From beccf477581b1f3e85100d43be81ea55d3b3f912 Mon Sep 17 00:00:00 2001 From: Markus Mohrhard Date: Fri, 27 Apr 2012 23:28:16 +0200 Subject: 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 --- test/Library_test.mk | 1 + test/Package_inc.mk | 1 + test/inc/test/xshape_dumper.hxx | 57 +++++++++++++++ test/source/xshape_dumper.cxx | 149 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 208 insertions(+) create mode 100644 test/inc/test/xshape_dumper.hxx create mode 100644 test/source/xshape_dumper.cxx (limited to 'test') 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 (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 +#include +#include +#include +#include +#include +#include +#include + +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 (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 +#include +#include +#include +#include + +using namespace com::sun::star; + +namespace { + +#define DEBUG_DUMPER 0 + +int writeCallback(void* pContext, const char* sBuffer, int nLen) +{ + rtl::OStringBuffer* pBuffer = static_cast(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: */ -- cgit