summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorMarkus Mohrhard <markus.mohrhard@googlemail.com>2012-04-27 23:28:16 +0200
committerMarkus Mohrhard <markus.mohrhard@googlemail.com>2012-04-27 23:28:16 +0200
commitbeccf477581b1f3e85100d43be81ea55d3b3f912 (patch)
treebd0a3675fae6bc771f42e94126e2029c7bbf8c78 /test
parent52348aa791c6006d27c94146907c788b6318e816 (diff)
move xshape dumper into test
XShapeDumper can now be used by other parts of the code too. Please keep in mind that changing the dumper affects other parts too and might require a regneration of reference files. Change-Id: I540420a8bdf8afd8d43c5ea0bb0d82d7e0ecc44b
Diffstat (limited to 'test')
-rw-r--r--test/Library_test.mk1
-rw-r--r--test/Package_inc.mk1
-rw-r--r--test/inc/test/xshape_dumper.hxx57
-rw-r--r--test/source/xshape_dumper.cxx149
4 files changed, 208 insertions, 0 deletions
diff --git a/test/Library_test.mk b/test/Library_test.mk
index 8ca0289364e5..c4a9dc992fa7 100644
--- a/test/Library_test.mk
+++ b/test/Library_test.mk
@@ -68,6 +68,7 @@ $(eval $(call gb_Library_use_external,test,cppunit))
$(eval $(call gb_Library_add_exception_objects,test,\
test/source/bootstrapfixture \
test/source/diff/diff \
+ test/source/xshape_dumper \
))
# vim: set noet sw=4 ts=4:
diff --git a/test/Package_inc.mk b/test/Package_inc.mk
index aac4b3822577..8c2970e6847d 100644
--- a/test/Package_inc.mk
+++ b/test/Package_inc.mk
@@ -27,6 +27,7 @@
$(eval $(call gb_Package_Package,test_inc,$(SRCDIR)/test/inc))
$(eval $(call gb_Package_add_file,test_inc,inc/test/xmldiff.hxx,test/xmldiff.hxx))
+$(eval $(call gb_Package_add_file,test_inc,inc/test/xshape_dumper.hxx,test/xshape_dumper.hxx))
$(eval $(call gb_Package_add_file,test_inc,inc/test/bootstrapfixture.hxx,test/bootstrapfixture.hxx))
$(eval $(call gb_Package_add_file,test_inc,inc/test/testdllapi.hxx,test/testdllapi.hxx))
$(eval $(call gb_Package_add_file,test_inc,inc/test/unoapi_test.hxx,test/unoapi_test.hxx))
diff --git a/test/inc/test/xshape_dumper.hxx b/test/inc/test/xshape_dumper.hxx
new file mode 100644
index 000000000000..d4f1ba6ee857
--- /dev/null
+++ b/test/inc/test/xshape_dumper.hxx
@@ -0,0 +1,57 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * Version: MPL 1.1 / GPLv3+ / LGPLv3+
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License or as specified alternatively below. You may obtain a copy of
+ * the License at http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * Major Contributor(s):
+ * Copyright (C) 2012 Markus Mohrhard <markus.mohrhard@googlemail.com> (initial developer)
+ *
+ * All Rights Reserved.
+ *
+ * For minor contributions see the git repository.
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 3 or later (the "GPLv3+"), or
+ * the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"),
+ * in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable
+ * instead of those above.
+ */
+
+#include <rtl/ustring.hxx>
+#include <com/sun/star/uno/Reference.hxx>
+#include <libxml/xmlwriter.h>
+#include <com/sun/star/drawing/XShapes.hpp>
+#include <com/sun/star/drawing/XShape.hpp>
+#include <com/sun/star/awt/Point.hpp>
+#include <com/sun/star/awt/Size.hpp>
+#include <test/testdllapi.hxx>
+
+class OOO_DLLPUBLIC_TEST XShapeDumper
+{
+public:
+ XShapeDumper(com::sun::star::uno::Reference< com::sun::star::drawing::XShapes > xShapes ):
+ mxShapes(xShapes) {}
+
+ rtl::OUString dump();
+private:
+ void dumpPositionAsAttribute(const com::sun::star::awt::Point& rPointr);
+ void dumpSizeAsAttribute(const com::sun::star::awt::Size& rSize);
+ void dumpShapeDescriptorAsAttribute( com::sun::star::uno::Reference< com::sun::star::drawing::XShapeDescriptor > xDescr );
+ void dumpXShape( com::sun::star::uno::Reference< com::sun::star::drawing::XShape > xShape );
+ void dumpXShapes( com::sun::star::uno::Reference< com::sun::star::drawing::XShapes > xShapes );
+
+ com::sun::star::uno::Reference< com::sun::star::drawing::XShapes > mxShapes;
+ xmlTextWriterPtr mxmlWriter;
+
+};
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/test/source/xshape_dumper.cxx b/test/source/xshape_dumper.cxx
new file mode 100644
index 000000000000..806fff7f449f
--- /dev/null
+++ b/test/source/xshape_dumper.cxx
@@ -0,0 +1,149 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * Version: MPL 1.1 / GPLv3+ / LGPLv3+
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License or as specified alternatively below. You may obtain a copy of
+ * the License at http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * Major Contributor(s):
+ * Copyright (C) 2012 Markus Mohrhard <markus.mohrhard@googlemail.com> (initial developer)
+ *
+ * All Rights Reserved.
+ *
+ * For minor contributions see the git repository.
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 3 or later (the "GPLv3+"), or
+ * the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"),
+ * in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable
+ * instead of those above.
+ */
+
+#include "test/xshape_dumper.hxx"
+#include <rtl/strbuf.hxx>
+#include <rtl/oustringostreaminserter.hxx>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/text/XText.hpp>
+
+using namespace com::sun::star;
+
+namespace {
+
+#define DEBUG_DUMPER 0
+
+int writeCallback(void* pContext, const char* sBuffer, int nLen)
+{
+ rtl::OStringBuffer* pBuffer = static_cast<rtl::OStringBuffer*>(pContext);
+ pBuffer->append(sBuffer);
+ return nLen;
+}
+
+int closeCallback(void* )
+{
+ return 0;
+}
+
+}
+
+void XShapeDumper::dumpPositionAsAttribute(const awt::Point& rPoint)
+{
+ xmlTextWriterWriteFormatAttribute(mxmlWriter, BAD_CAST("positionX"), "%" SAL_PRIdINT32, rPoint.X);
+ xmlTextWriterWriteFormatAttribute(mxmlWriter, BAD_CAST("positionY"), "%" SAL_PRIdINT32, rPoint.Y);
+}
+
+void XShapeDumper::dumpSizeAsAttribute(const awt::Size& rSize)
+{
+ xmlTextWriterWriteFormatAttribute(mxmlWriter, BAD_CAST("sizeX"), "%" SAL_PRIdINT32, rSize.Width);
+ xmlTextWriterWriteFormatAttribute(mxmlWriter, BAD_CAST("sizeY"), "%" SAL_PRIdINT32, rSize.Height);
+}
+
+void XShapeDumper::dumpShapeDescriptorAsAttribute( uno::Reference< drawing::XShapeDescriptor > xDescr )
+{
+ xmlTextWriterWriteFormatAttribute(mxmlWriter, BAD_CAST("type"), "%s", rtl::OUStringToOString(xDescr->getShapeType(), RTL_TEXTENCODING_UTF8).getStr());
+}
+
+void XShapeDumper::dumpXShape( uno::Reference< drawing::XShape > xShape )
+{
+ xmlTextWriterStartElement( mxmlWriter, BAD_CAST( "XShape" ) );
+
+ dumpPositionAsAttribute(xShape->getPosition());
+ dumpSizeAsAttribute(xShape->getSize());
+ uno::Reference< drawing::XShapeDescriptor > xDescr(xShape, uno::UNO_QUERY_THROW);
+ dumpShapeDescriptorAsAttribute(xDescr);
+
+ uno::Reference< lang::XServiceInfo > xServiceInfo( xShape, uno::UNO_QUERY_THROW );
+ uno::Sequence< rtl::OUString > aServiceNames = xServiceInfo->getSupportedServiceNames();
+
+ uno::Reference< beans::XPropertySet > xPropSet(xShape, uno::UNO_QUERY_THROW);
+ uno::Any aAny = xPropSet->getPropertyValue("Name");
+ rtl::OUString aName;
+ if (aAny >>= aName)
+ {
+ if (!aName.isEmpty())
+ xmlTextWriterWriteFormatAttribute( mxmlWriter, BAD_CAST("name"), "%s", rtl::OUStringToOString(aName, RTL_TEXTENCODING_UTF8).getStr());
+ }
+ if (xServiceInfo->supportsService("com.sun.star.drawing.Text"))
+ {
+ uno::Reference< text::XText > xText(xShape, uno::UNO_QUERY_THROW);
+ rtl::OUString aText = xText->getString();
+ if(!aText.isEmpty())
+ xmlTextWriterWriteFormatAttribute( mxmlWriter, BAD_CAST("text"), "%s", rtl::OUStringToOString(aText, RTL_TEXTENCODING_UTF8).getStr());
+ }
+ else if(xServiceInfo->supportsService("com.sun.star.drawing.GroupShape"))
+ {
+ uno::Reference< drawing::XShapes > xShapes(xShape, uno::UNO_QUERY_THROW);
+ dumpXShapes(xShapes);
+ }
+#if DEBUG_DUMPER
+ sal_Int32 nServices = aServiceNames.getLength();
+ for (sal_Int32 i = 0; i < nServices; ++i)
+ {
+ xmlTextWriterStartElement(mxmlWriter, BAD_CAST( "ServiceName" ));
+ xmlTextWriterWriteFormatAttribute(mxmlWriter, BAD_CAST( "name" ), "%s", rtl::OUStringToOString(aServiceNames[i], RTL_TEXTENCODING_UTF8).getStr());
+ xmlTextWriterEndElement( mxmlWriter );
+ }
+#endif
+
+ xmlTextWriterEndElement( mxmlWriter );
+}
+
+void XShapeDumper::dumpXShapes( uno::Reference< drawing::XShapes > xShapes )
+{
+ xmlTextWriterStartElement( mxmlWriter, BAD_CAST( "XShapes" ) );
+ uno::Reference< container::XIndexAccess > xIA( xShapes, uno::UNO_QUERY_THROW);
+ sal_Int32 nLength = xIA->getCount();
+ for (sal_Int32 i = 0; i < nLength; ++i)
+ {
+ uno::Reference< drawing::XShape > xShape( xIA->getByIndex( i ), uno::UNO_QUERY_THROW );
+ dumpXShape( xShape );
+ }
+
+ xmlTextWriterEndElement( mxmlWriter );
+}
+
+rtl::OUString XShapeDumper::dump()
+{
+ rtl::OStringBuffer aString;
+ xmlOutputBufferPtr xmlOutBuffer = xmlOutputBufferCreateIO( writeCallback, closeCallback, &aString, NULL );
+ mxmlWriter = xmlNewTextWriter( xmlOutBuffer );
+ xmlTextWriterSetIndent( mxmlWriter, 1 );
+
+ xmlTextWriterStartDocument( mxmlWriter, NULL, NULL, NULL );
+
+ dumpXShapes( mxShapes );
+
+ xmlTextWriterEndDocument( mxmlWriter );
+ xmlFreeTextWriter( mxmlWriter );
+
+ return OStringToOUString(aString.makeStringAndClear(), RTL_TEXTENCODING_UTF8);
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */