/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * This file is part of the LibreOffice project. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include #include #include #if !defined(MACOSX) #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include class Test : public SwModelTestBase { public: Test() : SwModelTestBase("/sw/qa/extras/odfexport/data/", "writer8") {} /** * Blacklist handling */ bool mustTestImportOf(const char* filename) const override { // Only test import of .odt document return OString(filename).endsWith(".odt"); } bool mustValidate(const char* filename) const override { std::vector aBlacklist = { // These are known problems, they should be fixed one by one. "fdo86963.odt", "shape-relsize.odt", "fdo60769.odt", "first-header-footer.odt", "fdo38244.odt" }; return std::find(aBlacklist.begin(), aBlacklist.end(), filename) == aBlacklist.end(); } virtual std::unique_ptr preTest(const char* pFilename) override { if (OString(pFilename) == "fdo58949.docx") { std::unique_ptr pResetter(new Resetter( [] () { std::shared_ptr pBatch( comphelper::ConfigurationChanges::create()); officecfg::Office::Common::Filter::Microsoft::Import::MathTypeToMath::set(true, pBatch); return pBatch->commit(); })); std::shared_ptr pBatch(comphelper::ConfigurationChanges::create()); officecfg::Office::Common::Filter::Microsoft::Import::MathTypeToMath::set(false, pBatch); pBatch->commit(); return pResetter; } if (OString(pFilename) == "2_MathType3.docx") { std::unique_ptr pResetter(new Resetter( [this] () { mpFilter = "writer8"; std::shared_ptr pBatch( comphelper::ConfigurationChanges::create()); officecfg::Office::Common::Cache::Writer::OLE_Objects::set(20, pBatch); return pBatch->commit(); })); mpFilter = "OpenDocument Text Flat XML"; // doesn't happen with ODF package std::shared_ptr pBatch( comphelper::ConfigurationChanges::create()); officecfg::Office::Common::Cache::Writer::OLE_Objects::set(1, pBatch); pBatch->commit(); return pResetter; } return nullptr; } }; DECLARE_ODFEXPORT_TEST(testMathObjectFlatExport, "2_MathType3.docx") { uno::Reference xModifiable(mxComponent, uno::UNO_QUERY); CPPUNIT_ASSERT(!xModifiable->isModified()); // see preTest(), set the OLE cache to 1 for this test // and the problem was that the formulas that were in the cache // (the second one) were lost OUString formula1(getFormula(getRun(getParagraph(1), 1))); CPPUNIT_ASSERT_EQUAL(OUString(" size 12{1+1=2} {}"), formula1); OUString formula2(getFormula(getRun(getParagraph(2), 1))); CPPUNIT_ASSERT_EQUAL(OUString(" size 12{2+2=4} {}"), formula2); } DECLARE_ODFEXPORT_TEST(testFramebackgrounds, "framebackgrounds.odt") { //Counting the Number of Frames and checking with the expected count uno::Reference xTextFramesSupplier(mxComponent, uno::UNO_QUERY); uno::Reference xIndexAccess(xTextFramesSupplier->getTextFrames(), uno::UNO_QUERY); CPPUNIT_ASSERT_EQUAL(sal_Int32(16), xIndexAccess->getCount()); uno::Reference xTextFrame; awt::Gradient aGradientxTextFrame; //Frame 1 xTextFrame = getShape(1); CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_NONE, getProperty(xTextFrame, "FillStyle")); CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xTextFrame, "FillTransparence")); //Frame 2 xTextFrame = getShape(2); CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID, getProperty(xTextFrame, "FillStyle")); CPPUNIT_ASSERT_EQUAL(sal_Int32(0x006600), getProperty(xTextFrame, "FillColor")); CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xTextFrame, "FillTransparence")); //Frame 3 xTextFrame = getShape(3); CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID, getProperty(xTextFrame, "FillStyle")); CPPUNIT_ASSERT_EQUAL(sal_Int32(0x006600), getProperty(xTextFrame, "FillColor")); CPPUNIT_ASSERT_EQUAL(sal_Int32(45), getProperty(xTextFrame, "FillTransparence")); //Frame 4 xTextFrame = getShape(4); CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID, getProperty(xTextFrame, "FillStyle")); CPPUNIT_ASSERT_EQUAL(sal_Int32(0x579D1C), getProperty(xTextFrame, "FillColor")); aGradientxTextFrame = getProperty(xTextFrame, "FillTransparenceGradient"); CPPUNIT_ASSERT_EQUAL(css::awt::GradientStyle_LINEAR, aGradientxTextFrame.Style); //Frame 5 xTextFrame = getShape(5); CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_GRADIENT, getProperty(xTextFrame, "FillStyle")); CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xTextFrame, "FillTransparence")); CPPUNIT_ASSERT_EQUAL(OUString("Subtle Tango Green"), getProperty(xTextFrame, "FillGradientName")); //Frame 6 xTextFrame = getShape(6); CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_GRADIENT, getProperty(xTextFrame, "FillStyle")); CPPUNIT_ASSERT_EQUAL(OUString("Subtle Tango Green"), getProperty(xTextFrame, "FillGradientName")); CPPUNIT_ASSERT_EQUAL(sal_Int32(45), getProperty(xTextFrame, "FillTransparence")); //Frame 7 xTextFrame = getShape(7); CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_GRADIENT, getProperty(xTextFrame, "FillStyle")); CPPUNIT_ASSERT_EQUAL(OUString("Subtle Tango Green"), getProperty(xTextFrame, "FillGradientName")); aGradientxTextFrame = getProperty(xTextFrame, "FillTransparenceGradient"); CPPUNIT_ASSERT_EQUAL(css::awt::GradientStyle_LINEAR, aGradientxTextFrame.Style); //Frame 8 xTextFrame = getShape(8); CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_HATCH, getProperty(xTextFrame, "FillStyle")); CPPUNIT_ASSERT_EQUAL(OUString("Black 0 Degrees"), getProperty(xTextFrame, "FillHatchName")); CPPUNIT_ASSERT_EQUAL(false, getProperty(xTextFrame, "FillBackground")); CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xTextFrame, "FillTransparence")); //Frame 9 xTextFrame = getShape(9); CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_HATCH, getProperty(xTextFrame, "FillStyle")); CPPUNIT_ASSERT_EQUAL(OUString("Black 0 Degrees"), getProperty(xTextFrame, "FillHatchName")); CPPUNIT_ASSERT_EQUAL(true, getProperty(xTextFrame, "FillBackground")); CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xTextFrame, "FillTransparence")); //Frame 10 xTextFrame = getShape(10); CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_HATCH, getProperty(xTextFrame, "FillStyle")); CPPUNIT_ASSERT_EQUAL(OUString("Black 0 Degrees"), getProperty(xTextFrame, "FillHatchName")); CPPUNIT_ASSERT_EQUAL(false, getProperty(xTextFrame, "FillBackground")); CPPUNIT_ASSERT_EQUAL(sal_Int32(45), getProperty(xTextFrame, "FillTransparence")); //Frame 11 xTextFrame = getShape(11); CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_HATCH, getProperty(xTextFrame, "FillStyle")); CPPUNIT_ASSERT_EQUAL(OUString("Black 0 Degrees"), getProperty(xTextFrame, "FillHatchName")); CPPUNIT_ASSERT_EQUAL(true, getProperty(xTextFrame, "FillBackground")); CPPUNIT_ASSERT_EQUAL(sal_Int32(45), getProperty(xTextFrame, "FillTransparence")); //Frame 12 xTextFrame = getShape(12); CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_HATCH, getProperty(xTextFrame, "FillStyle")); CPPUNIT_ASSERT_EQUAL(OUString("Black 0 Degrees"), getProperty(xTextFrame, "FillHatchName")); CPPUNIT_ASSERT_EQUAL(false, getProperty(xTextFrame, "FillBackground")); aGradientxTextFrame = getProperty(xTextFrame, "FillTransparenceGradient"); CPPUNIT_ASSERT_EQUAL(css::awt::GradientStyle_LINEAR, aGradientxTextFrame.Style); //Frame 13 xTextFrame = getShape(13); CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_HATCH, getProperty(xTextFrame, "FillStyle")); CPPUNIT_ASSERT_EQUAL(OUString("Black 0 Degrees"), getProperty(xTextFrame, "FillHatchName")); CPPUNIT_ASSERT_EQUAL(true, getProperty(xTextFrame, "FillBackground")); aGradientxTextFrame = getProperty(xTextFrame, "FillTransparenceGradient"); CPPUNIT_ASSERT_EQUAL(css::awt::GradientStyle_LINEAR, aGradientxTextFrame.Style); //Frame 14 xTextFrame = getShape(14); CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_BITMAP, getProperty(xTextFrame, "FillStyle")); CPPUNIT_ASSERT_EQUAL(OUString("Sky"), getProperty(xTextFrame, "FillBitmapName")); CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xTextFrame, "FillTransparence")); CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xTextFrame, "FillBitmapPositionOffsetX")); CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xTextFrame, "FillBitmapPositionOffsetY")); CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xTextFrame, "FillBitmapOffsetX")); CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xTextFrame, "FillBitmapOffsetY")); CPPUNIT_ASSERT_EQUAL(true, getProperty(xTextFrame, "FillBitmapTile")); //Frame 15 xTextFrame = getShape(15); CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_BITMAP, getProperty(xTextFrame, "FillStyle")); CPPUNIT_ASSERT_EQUAL(OUString("Sky"), getProperty(xTextFrame, "FillBitmapName")); CPPUNIT_ASSERT_EQUAL(sal_Int32(45), getProperty(xTextFrame, "FillTransparence")); CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xTextFrame, "FillBitmapPositionOffsetX")); CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xTextFrame, "FillBitmapPositionOffsetY")); CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xTextFrame, "FillBitmapOffsetX")); CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xTextFrame, "FillBitmapOffsetY")); CPPUNIT_ASSERT_EQUAL(true, getProperty(xTextFrame, "FillBitmapTile")); //Frame 16 xTextFrame = getShape(16); CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_BITMAP, getProperty(xTextFrame, "FillStyle")); CPPUNIT_ASSERT_EQUAL(OUString("Sky"), getProperty(xTextFrame, "FillBitmapName")); CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xTextFrame, "FillBitmapPositionOffsetX")); CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xTextFrame, "FillBitmapPositionOffsetY")); CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xTextFrame, "FillBitmapOffsetX")); CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xTextFrame, "FillBitmapOffsetY")); CPPUNIT_ASSERT_EQUAL(true, getProperty(xTextFrame, "FillBitmapTile")); aGradientxTextFrame = getProperty(xTextFrame, "FillTransparenceGradient"); CPPUNIT_ASSERT_EQUAL(css::awt::GradientStyle_LINEAR, aGradientxTextFrame.Style); if (xmlDocPtr pXmlDoc = parseExport("content.xml")) { // check that there are 3 background-image elements assertXPath(pXmlDoc, "//style:style[@style:parent-style-name='Frame' and @style:family='graphic']/style:graphic-properties[@draw:fill='bitmap']/style:background-image[@style:repeat='stretch']", 3); // tdf#90640: check that one of them is 55% opaque assertXPath(pXmlDoc, "//style:style[@style:parent-style-name='Frame' and @style:family='graphic']/style:graphic-properties[@draw:fill='bitmap' and @fo:background-color='transparent' and @draw:opacity='55%']/style:background-image[@style:repeat='stretch' and @draw:opacity='55%']", 1); // tdf#90640: check that one of them is 43% opaque // (emulated - hopefully not with rounding errors) assertXPath(pXmlDoc, "//style:style[@style:parent-style-name='Frame' and @style:family='graphic']/style:graphic-properties[@draw:fill='bitmap' and @fo:background-color='transparent' and @draw:opacity-name='Transparency_20_1']/style:background-image[@style:repeat='stretch' and @draw:opacity='43%']", 1); } } DECLARE_ODFEXPORT_TEST(testOOoxmlEmbedded, "oooxml_embedded.sxw") { uno::Reference xTEOSupplier(mxComponent, uno::UNO_QUERY); uno::Reference xAccess(xTEOSupplier->getEmbeddedObjects()); uno::Sequence aSeq(xAccess->getElementNames()); CPPUNIT_ASSERT_EQUAL(sal_Int32(4), aSeq.getLength()); uno::Reference xEOSupplier1(xAccess->getByName("Object1"), uno::UNO_QUERY); uno::Reference xObj1(xEOSupplier1->getEmbeddedObject()); uno::Reference xEOSupplier2(xAccess->getByName("Object2"), uno::UNO_QUERY); uno::Reference xObj2(xEOSupplier2->getEmbeddedObject()); uno::Reference xEOSupplier3(xAccess->getByName("Object3"), uno::UNO_QUERY); uno::Reference xObj3(xEOSupplier3->getEmbeddedObject()); uno::Reference xEOSupplier4(xAccess->getByName("Object4"), uno::UNO_QUERY); uno::Reference xObj4(xEOSupplier4->getEmbeddedObject()); //checking first object uno::Reference xSBDoc1(xObj1, uno::UNO_QUERY); uno::Reference xStorage1(xSBDoc1->getDocumentStorage()); CPPUNIT_ASSERT_EQUAL(sal_Int32(SOFFICE_FILEFORMAT_8), comphelper::OStorageHelper::GetXStorageFormat(xStorage1)); //checking second object uno::Reference xSBDoc2(xObj2, uno::UNO_QUERY); uno::Reference xStorage2(xSBDoc2->getDocumentStorage()); CPPUNIT_ASSERT_EQUAL(sal_Int32(SOFFICE_FILEFORMAT_8), comphelper::OStorageHelper::GetXStorageFormat(xStorage2)); //checking third object uno::Reference xSBDoc3(xObj3, uno::UNO_QUERY); uno::Reference xStorage3(xSBDoc3->getDocumentStorage()); CPPUNIT_ASSERT_EQUAL(sal_Int32(SOFFICE_FILEFORMAT_8), comphelper::OStorageHelper::GetXStorageFormat(xStorage3)); //checking fourth object uno::Reference xSBDoc4(xObj4, uno::UNO_QUERY); uno::Reference xStorage4(xSBDoc4->getDocumentStorage()); CPPUNIT_ASSERT_EQUAL(sal_Int32(SOFFICE_FILEFORMAT_8), comphelper::OStorageHelper::GetXStorageFormat(xStorage4)); } DECLARE_ODFEXPORT_TEST(testredlineTextFrame, "redlineTextFrame.odt") { //Note this is for a crash test //Counting the Number of Frames and checking with the expected count uno::Reference xTextFramesSupplier(mxComponent, uno::UNO_QUERY); uno::Reference xIndexAccess(xTextFramesSupplier->getTextFrames(), uno::UNO_QUERY); CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount()); } DECLARE_ODFEXPORT_TEST(testFdo38244, "fdo38244.odt") { // See ooxmlexport's testFdo38244(). // Test comment range feature. uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); uno::Reference xParaEnumAccess(xTextDocument->getText(), uno::UNO_QUERY); uno::Reference xParaEnum = xParaEnumAccess->createEnumeration(); uno::Reference xRunEnumAccess(xParaEnum->nextElement(), uno::UNO_QUERY); uno::Reference xRunEnum = xRunEnumAccess->createEnumeration(); xRunEnum->nextElement(); uno::Reference xPropertySet(xRunEnum->nextElement(), uno::UNO_QUERY); CPPUNIT_ASSERT_EQUAL(OUString("Annotation"), getProperty(xPropertySet, "TextPortionType")); xRunEnum->nextElement(); xPropertySet.set(xRunEnum->nextElement(), uno::UNO_QUERY); CPPUNIT_ASSERT_EQUAL(OUString("AnnotationEnd"), getProperty(xPropertySet, "TextPortionType")); // Test properties uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); uno::Reference xFieldsAccess(xTextFieldsSupplier->getTextFields()); uno::Reference xFields(xFieldsAccess->createEnumeration()); xPropertySet.set(xFields->nextElement(), uno::UNO_QUERY); CPPUNIT_ASSERT_EQUAL(OUString("__Fieldmark__4_1833023242"), getProperty(xPropertySet, "Name")); CPPUNIT_ASSERT_EQUAL(OUString("M"), getProperty(xPropertySet, "Initials")); } DECLARE_ODFEXPORT_TEST(testTdf92379, "tdf92379.fodt") { // frame style fo:background-color was not imported uno::Reference xStyles(getStyles("FrameStyles")); uno::Reference xStyle(xStyles->getByName("encarts"), uno::UNO_QUERY); CPPUNIT_ASSERT_EQUAL(sal_Int32(0xffcc99), getProperty(xStyle, "BackColorRGB")); CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xStyle, "BackColorTransparency")); CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID, getProperty(xStyle, "FillStyle")); CPPUNIT_ASSERT_EQUAL(sal_Int32(0xffcc99), getProperty(xStyle, "FillColor")); CPPUNIT_ASSERT_EQUAL(sal_Int16(0), getProperty(xStyle, "FillTransparence")); uno::Reference xFrameStyle2(xStyles->getByName("Untitled1"), uno::UNO_QUERY); CPPUNIT_ASSERT_EQUAL(sal_Int32(0xffffff), getProperty(xFrameStyle2, "BackColorRGB")); CPPUNIT_ASSERT_EQUAL(true, getProperty(xFrameStyle2, "BackTransparent")); CPPUNIT_ASSERT_EQUAL(sal_Int32(100), getProperty(xFrameStyle2, "BackColorTransparency")); CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_NONE, getProperty(xFrameStyle2, "FillStyle")); // unfortunately this is actually the pool default value, which would be hard to fix - but it isn't a problem because style is NONE // CPPUNIT_ASSERT_EQUAL(sal_Int32(0xffffff), getProperty(xFrameStyle2, "FillColor")); // CPPUNIT_ASSERT_EQUAL(sal_Int16(100), getProperty(xFrameStyle2, "FillTransparence")); if (xmlDocPtr pXmlDoc = parseExport("styles.xml")) { // check that fo:background-color attribute is exported properly assertXPath(pXmlDoc, "//style:style[@style:family='graphic' and @style:name='encarts']/style:graphic-properties[@fo:background-color='#ffcc99']", 1); assertXPath(pXmlDoc, "//style:style[@style:family='graphic' and @style:name='Untitled1']/style:graphic-properties[@fo:background-color='transparent']", 1); } // paragraph style fo:background-color was wrongly inherited despite being // overridden in derived style uno::Reference xParaStyles(getStyles("ParagraphStyles")); uno::Reference xStyle1(xParaStyles->getByName( "Titre Avis expert"), uno::UNO_QUERY); CPPUNIT_ASSERT_EQUAL(sal_Int32(0x661900), getProperty(xStyle1, "ParaBackColor")); CPPUNIT_ASSERT_EQUAL(false, getProperty(xStyle1, "ParaBackTransparent")); CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID, getProperty(xStyle1, "FillStyle")); CPPUNIT_ASSERT_EQUAL(sal_Int32(0x661900), getProperty(xStyle1, "FillColor")); CPPUNIT_ASSERT_EQUAL(sal_Int16(0), getProperty(xStyle1, "FillTransparence")); CPPUNIT_ASSERT_EQUAL(sal_Int32(0xffffff), getProperty(xStyle1, "CharColor")); uno::Reference xStyle2(xParaStyles->getByName( "Avis expert questions"), uno::UNO_QUERY); CPPUNIT_ASSERT_EQUAL(sal_Int32(COL_TRANSPARENT), getProperty(xStyle2, "ParaBackColor")); CPPUNIT_ASSERT_EQUAL(true, getProperty(xStyle2, "ParaBackTransparent")); CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_NONE, getProperty(xStyle2, "FillStyle")); // unfortunately this is actually the pool default value, which would be hard to fix - but it isn't a problem because style is NONE // CPPUNIT_ASSERT_EQUAL(sal_Int32(0xffffff), getProperty(xStyle2, "FillColor")); // CPPUNIT_ASSERT_EQUAL(sal_Int16(100), getProperty(xStyle2, "FillTransparence")); CPPUNIT_ASSERT_EQUAL(sal_Int32(0x661900), getProperty(xStyle2, "CharColor")); uno::Reference xStyle31(xParaStyles->getByName( "avis expert questions non cadres"), uno::UNO_QUERY); CPPUNIT_ASSERT_EQUAL(sal_Int32(0x801900), getProperty(xStyle31, "ParaBackColor")); CPPUNIT_ASSERT_EQUAL(false, getProperty(xStyle31, "ParaBackTransparent")); CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID, getProperty(xStyle31, "FillStyle")); CPPUNIT_ASSERT_EQUAL(sal_Int32(0x801900), getProperty(xStyle31, "FillColor")); CPPUNIT_ASSERT_EQUAL(sal_Int16(0), getProperty(xStyle31, "FillTransparence")); CPPUNIT_ASSERT_EQUAL(sal_Int32(0x661900), getProperty(xStyle31, "CharColor")); uno::Reference xStyle32(xParaStyles->getByName( "Avis expert rXponses"), uno::UNO_QUERY); CPPUNIT_ASSERT_EQUAL(sal_Int32(COL_TRANSPARENT), getProperty(xStyle32, "ParaBackColor")); CPPUNIT_ASSERT_EQUAL(true, getProperty(xStyle32, "ParaBackTransparent")); CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_NONE, getProperty(xStyle32, "FillStyle")); // unfortunately this is actually the pool default value, which would be hard to fix - but it isn't a problem because style is NONE // CPPUNIT_ASSERT_EQUAL(sal_Int32(0xffffff), getProperty(xStyle32, "FillColor")); // CPPUNIT_ASSERT_EQUAL(sal_Int16(100), getProperty(xStyle32, "FillTransparence")); CPPUNIT_ASSERT_EQUAL(sal_Int32(0x461900), getProperty(xStyle32, "CharColor")); if (xmlDocPtr pXmlDoc = parseExport("styles.xml")) { // check that fo:background-color attribute is exported properly assertXPath(pXmlDoc, "//style:style[@style:family='paragraph' and @style:display-name='Titre Avis expert']/style:paragraph-properties[@fo:background-color='#661900']", 1); assertXPath(pXmlDoc, "//style:style[@style:family='paragraph' and @style:display-name='Avis expert questions']/style:paragraph-properties[@fo:background-color='transparent']", 1); assertXPath(pXmlDoc, "//style:style[@style:family='paragraph' and @style:display-name='avis expert questions non cadres']/style:paragraph-properties[@fo:background-color='#801900']", 1); assertXPath(pXmlDoc, "//style:style[@style:family='paragraph' and @style:display-name='Avis expert rXponses']/style:paragraph-properties[@fo:background-color='transparent']", 1); } } DECLARE_ODFEXPORT_TEST(testFdo79358, "fdo79358.odt") { // the boolean properties of the index were not exported properly uno::Reference xIndexSupplier(mxComponent, uno::UNO_QUERY); uno::Reference xIndexes(xIndexSupplier->getDocumentIndexes(), uno::UNO_QUERY); uno::Reference xTOCIndex(xIndexes->getByIndex(0), uno::UNO_QUERY); uno::Reference xTOCProps(xTOCIndex, uno::UNO_QUERY); CPPUNIT_ASSERT_EQUAL(false, getProperty(xTOCProps, "CreateFromOutline")); CPPUNIT_ASSERT_EQUAL(false, getProperty(xTOCProps, "CreateFromMarks")); CPPUNIT_ASSERT_EQUAL(true, getProperty(xTOCProps, "CreateFromLevelParagraphStyles")); // check that the source styles are preserved too while at it uno::Reference xLevels( getProperty< uno::Reference >(xTOCProps, "LevelParagraphStyles")); uno::Sequence seq { "Heading" }; CPPUNIT_ASSERT_EQUAL(uno::makeAny(seq), xLevels->getByIndex(1)); CPPUNIT_ASSERT_EQUAL(uno::makeAny(uno::Sequence()), xLevels->getByIndex(2)); } DECLARE_ODFEXPORT_TEST(testFirstHeaderFooter, "first-header-footer.odt") { // Test import and export of the header-first token. // The document has 6 pages, two page styles for the first and second half of pages. CPPUNIT_ASSERT_EQUAL(OUString("First header"), parseDump("/root/page[1]/header/txt/text()")); CPPUNIT_ASSERT_EQUAL(OUString("First footer"), parseDump("/root/page[1]/footer/txt/text()")); CPPUNIT_ASSERT_EQUAL(OUString("Left header"), parseDump("/root/page[2]/header/txt/text()")); CPPUNIT_ASSERT_EQUAL(OUString("Left footer"), parseDump("/root/page[2]/footer/txt/text()")); CPPUNIT_ASSERT_EQUAL(OUString("Right header"), parseDump("/root/page[3]/header/txt/text()")); CPPUNIT_ASSERT_EQUAL(OUString("Right footer"), parseDump("/root/page[3]/footer/txt/text()")); CPPUNIT_ASSERT_EQUAL(OUString("First header2"), parseDump("/root/page[4]/header/txt/text()")); CPPUNIT_ASSERT_EQUAL(OUString("First footer2"), parseDump("/root/page[4]/footer/txt/text()")); CPPUNIT_ASSERT_EQUAL(OUString("Right header2"), parseDump("/root/page[5]/header/txt/text()")); CPPUNIT_ASSERT_EQUAL(OUString("Right footer2"), parseDump("/root/page[5]/footer/txt/text()")); CPPUNIT_ASSERT_EQUAL(OUString("Left header2"), parseDump("/root/page[6]/header/txt/text()")); CPPUNIT_ASSERT_EQUAL(OUString("Left footer2"), parseDump("/root/page[6]/footer/txt/text()")); } DECLARE_ODFEXPORT_TEST(testTextframeGradient, "textframe-gradient.odt") { uno::Reference xTextFramesSupplier(mxComponent, uno::UNO_QUERY); uno::Reference xIndexAccess(xTextFramesSupplier->getTextFrames(), uno::UNO_QUERY); CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xIndexAccess->getCount()); uno::Reference xFrame(xIndexAccess->getByIndex(0), uno::UNO_QUERY); CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_GRADIENT, getProperty(xFrame, "FillStyle")); awt::Gradient aGradient = getProperty(xFrame, "FillGradient"); CPPUNIT_ASSERT_EQUAL(sal_Int32(0xC0504D), aGradient.StartColor); CPPUNIT_ASSERT_EQUAL(sal_Int32(0xD99594), aGradient.EndColor); CPPUNIT_ASSERT_EQUAL(awt::GradientStyle_AXIAL, aGradient.Style); xFrame.set(xIndexAccess->getByIndex(1), uno::UNO_QUERY); CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_GRADIENT, getProperty(xFrame, "FillStyle")); aGradient = getProperty(xFrame, "FillGradient"); CPPUNIT_ASSERT_EQUAL(sal_Int32(0x000000), aGradient.StartColor); CPPUNIT_ASSERT_EQUAL(sal_Int32(0x666666), aGradient.EndColor); CPPUNIT_ASSERT_EQUAL(awt::GradientStyle_AXIAL, aGradient.Style); } DECLARE_ODFEXPORT_TEST(testDuplicateCrossRefHeadingBookmark, "CrossRefHeadingBookmark.fodt") { // the file contains invalid duplicate heading cross reference bookmarks // but we have to round trip them, tdf#94804 uno::Reference xBookmarksSupplier(mxComponent, uno::UNO_QUERY); uno::Reference xBookmarks( xBookmarksSupplier->getBookmarks(), uno::UNO_QUERY); uno::Reference xBookmark1( xBookmarks->getByName("__RefHeading__8284_1826734303"), uno::UNO_QUERY); CPPUNIT_ASSERT(xBookmark1.is()); CPPUNIT_ASSERT_THROW(xBookmarks->getByName("__RefHeading__1673_25705824"), container::NoSuchElementException); uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); uno::Reference(xTextFieldsSupplier->getTextFields(), uno::UNO_QUERY)->refresh(); uno::Reference xFieldsAccess(xTextFieldsSupplier->getTextFields()); uno::Reference xFields(xFieldsAccess->createEnumeration()); uno::Any aField1 = xFields->nextElement(); uno::Reference xField1(aField1, uno::UNO_QUERY); CPPUNIT_ASSERT_EQUAL(OUString("1.1"), xField1->getPresentation(false)); uno::Any aField2 = xFields->nextElement(); uno::Reference xField2(aField2, uno::UNO_QUERY); CPPUNIT_ASSERT_EQUAL(OUString("1.1"), xField2->getPresentation(false)); } DECLARE_ODFEXPORT_TEST(testFdo60769, "fdo60769.odt") { // Test multi-paragraph comment range feature. uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); uno::Reference xParaEnumAccess(xTextDocument->getText(), uno::UNO_QUERY); uno::Reference xParaEnum = xParaEnumAccess->createEnumeration(); uno::Reference xRunEnumAccess(xParaEnum->nextElement(), uno::UNO_QUERY); uno::Reference xRunEnum = xRunEnumAccess->createEnumeration(); while (xRunEnum->hasMoreElements()) { uno::Reference xPropertySet(xRunEnum->nextElement(), uno::UNO_QUERY); OUString aType = getProperty(xPropertySet, "TextPortionType"); // First paragraph: no field end, no anchor CPPUNIT_ASSERT(aType == "Text" || aType == "Annotation"); } xRunEnumAccess.set(xParaEnum->nextElement(), uno::UNO_QUERY); while (xRunEnum->hasMoreElements()) { uno::Reference xPropertySet(xRunEnum->nextElement(), uno::UNO_QUERY); OUString aType = getProperty(xPropertySet, "TextPortionType"); // Second paragraph: no field start CPPUNIT_ASSERT(aType == "Text" || aType == "AnnotationEnd"); } } DECLARE_ODFEXPORT_TEST(testFdo58949, "fdo58949.docx") { /* * The problem was that the exporter didn't insert "Obj102" to the * resulting zip file. No idea how to check for "broken" (missing OLE data * and replacement image) OLE objects using UNO, so we'll check the zip file directly. */ utl::TempFile aTempFile; save("writer8", aTempFile); uno::Sequence aArgs(1); aArgs[0] <<= OUString(aTempFile.GetURL()); uno::Reference xNameAccess(m_xSFactory->createInstanceWithArguments("com.sun.star.packages.zip.ZipFileAccess", aArgs), uno::UNO_QUERY); CPPUNIT_ASSERT_EQUAL(true, bool(xNameAccess->hasByName("Obj102"))); } DECLARE_ODFEXPORT_TEST(testCharacterBorder, "charborder.odt") { // Make sure paragraph and character attributes don't interfere // First paragraph has a paragraph border and a character border included by the paragraph style // Paragraph border of first paragraph { const table::BorderLine2 aFirstParTopBorder(0x6666FF,2,26,26,7,55); const sal_Int32 aFirstParTopPadding(150); uno::Reference xSet(getParagraph(1), uno::UNO_QUERY); // Top border CPPUNIT_ASSERT_BORDER_EQUAL(aFirstParTopBorder, getProperty(xSet,"TopBorder")); CPPUNIT_ASSERT_EQUAL(aFirstParTopPadding, getProperty(xSet,"TopBorderDistance")); // Bottom border (same as top border) CPPUNIT_ASSERT_BORDER_EQUAL(aFirstParTopBorder, getProperty(xSet,"BottomBorder")); CPPUNIT_ASSERT_EQUAL(aFirstParTopPadding, getProperty(xSet,"BottomBorderDistance")); // Left border (same as top border) CPPUNIT_ASSERT_BORDER_EQUAL(aFirstParTopBorder, getProperty(xSet,"LeftBorder")); CPPUNIT_ASSERT_EQUAL(aFirstParTopPadding, getProperty(xSet,"LeftBorderDistance")); // Right border (same as top border) CPPUNIT_ASSERT_BORDER_EQUAL(aFirstParTopBorder, getProperty(xSet,"RightBorder")); CPPUNIT_ASSERT_EQUAL(aFirstParTopPadding, getProperty(xSet,"RightBorderDistance")); // Shadow const table::ShadowFormat aShadow = getProperty(xSet,"ParaShadowFormat"); CPPUNIT_ASSERT_EQUAL(sal_Int32(0), aShadow.Color); CPPUNIT_ASSERT_EQUAL(false, (bool)aShadow.IsTransparent); CPPUNIT_ASSERT_EQUAL(table::ShadowLocation(0), aShadow.Location); CPPUNIT_ASSERT_EQUAL(sal_Int16(0), aShadow.ShadowWidth); } // Character border for first paragraph { const table::BorderLine2 aFirstParCharTopBorder(0xFF3333,0,37,0,2,37); const sal_Int32 aFirstParCharTopPadding(450); uno::Reference xSet(getParagraph(1), uno::UNO_QUERY); // Top border CPPUNIT_ASSERT_BORDER_EQUAL(aFirstParCharTopBorder, getProperty(xSet,"CharTopBorder")); CPPUNIT_ASSERT_EQUAL(aFirstParCharTopPadding, getProperty(xSet,"CharTopBorderDistance")); // Bottom border (same as top border) CPPUNIT_ASSERT_BORDER_EQUAL(aFirstParCharTopBorder, getProperty(xSet,"CharBottomBorder")); CPPUNIT_ASSERT_EQUAL(aFirstParCharTopPadding, getProperty(xSet,"CharBottomBorderDistance")); // Left border (same as top border) CPPUNIT_ASSERT_BORDER_EQUAL(aFirstParCharTopBorder, getProperty(xSet,"CharLeftBorder")); CPPUNIT_ASSERT_EQUAL(aFirstParCharTopPadding, getProperty(xSet,"CharLeftBorderDistance")); // Right border (same as top border) CPPUNIT_ASSERT_BORDER_EQUAL(aFirstParCharTopBorder, getProperty(xSet,"CharRightBorder")); CPPUNIT_ASSERT_EQUAL(aFirstParCharTopPadding, getProperty(xSet,"CharRightBorderDistance")); // Shadow const table::ShadowFormat aShadow = getProperty(xSet,"CharShadowFormat"); CPPUNIT_ASSERT_EQUAL(sal_Int32(0xFF3333), aShadow.Color); CPPUNIT_ASSERT_EQUAL(false, (bool)aShadow.IsTransparent); CPPUNIT_ASSERT_EQUAL(table::ShadowLocation(2), aShadow.Location); CPPUNIT_ASSERT_EQUAL(sal_Int16(280), aShadow.ShadowWidth); // Check autostyle { uno::Reference< style::XAutoStyleFamily > xAutoStyleFamily(getAutoStyles("ParagraphStyles")); uno::Reference < container::XEnumeration > xAutoStylesEnum( xAutoStyleFamily->createEnumeration() ); CPPUNIT_ASSERT_EQUAL(true, (bool)xAutoStylesEnum->hasMoreElements()); // First paragraph autostyle uno::Reference < beans::XPropertySet > xPSet( xAutoStylesEnum->nextElement(), uno::UNO_QUERY ); // Top border CPPUNIT_ASSERT_BORDER_EQUAL(aFirstParCharTopBorder, getProperty(xSet,"CharTopBorder")); CPPUNIT_ASSERT_EQUAL(aFirstParCharTopPadding, getProperty(xSet,"CharTopBorderDistance")); // Bottom border CPPUNIT_ASSERT_BORDER_EQUAL(aFirstParCharTopBorder, getProperty(xSet,"CharBottomBorder")); CPPUNIT_ASSERT_EQUAL(aFirstParCharTopPadding, getProperty(xSet,"CharBottomBorderDistance")); // Left border CPPUNIT_ASSERT_BORDER_EQUAL(aFirstParCharTopBorder, getProperty(xSet,"CharLeftBorder")); CPPUNIT_ASSERT_EQUAL(aFirstParCharTopPadding, getProperty(xSet,"CharLeftBorderDistance")); // Right border CPPUNIT_ASSERT_BORDER_EQUAL(aFirstParCharTopBorder, getProperty(xSet,"CharRightBorder")); CPPUNIT_ASSERT_EQUAL(aFirstParCharTopPadding, getProperty(xSet,"CharRightBorderDistance")); } } // Second paragraph's second text portion has a character style named CharDiffBor // This style includes border with different sides { table::BorderLine2 aBorderArray[4] = { table::BorderLine2(0xFF3333,0,37,0,14,37), // Top (fine dashed line) table::BorderLine2(0x99FF66,26,26,53,11,106), // Bottom table::BorderLine2(0x6666FF,9,26,9,12,71), // Left table::BorderLine2(0,0,0,0,0,0) // Right }; sal_Int32 aDistances[4] = { 400 /*Top*/, 300 /*Bottom*/, 250 /*Left*/, 0 /*Right*/ }; // Get second text portion of second paragraph uno::Reference < beans::XPropertySet > xSet( getRun(getParagraph(2),2), uno::UNO_QUERY ); // Top border CPPUNIT_ASSERT_BORDER_EQUAL(aBorderArray[0], getProperty(xSet,"CharTopBorder")); CPPUNIT_ASSERT_EQUAL(aDistances[0], getProperty(xSet,"CharTopBorderDistance")); // Bottom border CPPUNIT_ASSERT_BORDER_EQUAL(aBorderArray[1], getProperty(xSet,"CharBottomBorder")); CPPUNIT_ASSERT_EQUAL(aDistances[1], getProperty(xSet,"CharBottomBorderDistance")); // Left border CPPUNIT_ASSERT_BORDER_EQUAL(aBorderArray[2], getProperty(xSet,"CharLeftBorder")); CPPUNIT_ASSERT_EQUAL(aDistances[2], getProperty(xSet,"CharLeftBorderDistance")); // Right border CPPUNIT_ASSERT_BORDER_EQUAL(aBorderArray[3], getProperty(xSet,"CharRightBorder")); CPPUNIT_ASSERT_EQUAL(aDistances[3], getProperty(xSet,"CharRightBorderDistance")); // Shadow const table::ShadowFormat aShadow = getProperty(xSet,"CharShadowFormat"); CPPUNIT_ASSERT_EQUAL(sal_Int32(0), aShadow.Color); CPPUNIT_ASSERT_EQUAL(false, (bool)aShadow.IsTransparent); CPPUNIT_ASSERT_EQUAL(table::ShadowLocation(3), aShadow.Location); CPPUNIT_ASSERT_EQUAL(sal_Int16(79), aShadow.ShadowWidth); // Check character style { uno::Reference< container::XNameAccess > xStyleFamily(getStyles("CharacterStyles"), uno::UNO_QUERY); uno::Reference < beans::XPropertySet > xStyleSet(xStyleFamily->getByName("CharDiffBor"), uno::UNO_QUERY); // Top border CPPUNIT_ASSERT_BORDER_EQUAL(aBorderArray[0], getProperty(xSet,"CharTopBorder")); CPPUNIT_ASSERT_EQUAL(aDistances[0], getProperty(xSet,"CharTopBorderDistance")); // Bottom border CPPUNIT_ASSERT_BORDER_EQUAL(aBorderArray[1], getProperty(xSet,"CharBottomBorder")); CPPUNIT_ASSERT_EQUAL(aDistances[1], getProperty(xSet,"CharBottomBorderDistance")); // Left border CPPUNIT_ASSERT_BORDER_EQUAL(aBorderArray[2], getProperty(xSet,"CharLeftBorder")); CPPUNIT_ASSERT_EQUAL(aDistances[2], getProperty(xSet,"CharLeftBorderDistance")); // Right border CPPUNIT_ASSERT_BORDER_EQUAL(aBorderArray[3], getProperty(xSet,"CharRightBorder")); CPPUNIT_ASSERT_EQUAL(aDistances[3], getProperty(xSet,"CharRightBorderDistance")); } } } DECLARE_ODFEXPORT_TEST(testFdo43807, "fdo43807.odt") { uno::Reference xSet(getParagraph(1), uno::UNO_QUERY); CPPUNIT_ASSERT_EQUAL(OUString("Drop Caps"),getProperty(xSet,"DropCapCharStyleName")); xSet.set(getParagraph(2), uno::UNO_QUERY); CPPUNIT_ASSERT_EQUAL(OUString("User Defined Drop Caps"),getProperty(xSet,"DropCapCharStyleName")); } DECLARE_ODFEXPORT_TEST(testTextframeTransparentShadow, "textframe-transparent-shadow.odt") { uno::Reference xPicture = getShape(1); // ODF stores opacity of 75%, that means 25% transparency. CPPUNIT_ASSERT_EQUAL(sal_Int32(25), getProperty(xPicture, "ShadowTransparence")); } DECLARE_ODFEXPORT_TEST(testRelhPage, "relh-page.odt") { uno::Reference xTextFrame = getShape(1); // This was text::RelOrientation::FRAME (the default), RelativeHeightRelation was not handled in xmloff. CPPUNIT_ASSERT_EQUAL(text::RelOrientation::PAGE_FRAME, getProperty(xTextFrame, "RelativeHeightRelation")); // Make sure rel-height-rel doesn't affect width. CPPUNIT_ASSERT_EQUAL(text::RelOrientation::FRAME, getProperty(xTextFrame, "RelativeWidthRelation")); // This was 2601, 20% height was relative from margin, not page. CPPUNIT_ASSERT_EQUAL(sal_Int32(3168), parseDump("/root/page/body/txt/anchored/fly/infos/bounds", "height").toInt32()); } DECLARE_ODFEXPORT_TEST(testRelwPage, "relw-page.odt") { uno::Reference xTextFrame = getShape(1); // This was text::RelOrientation::FRAME (the default), RelativeWidthRelation was not handled in xmloff. CPPUNIT_ASSERT_EQUAL(text::RelOrientation::PAGE_FRAME, getProperty(xTextFrame, "RelativeWidthRelation")); // Make sure rel-width-rel doesn't affect height. CPPUNIT_ASSERT_EQUAL(text::RelOrientation::FRAME, getProperty(xTextFrame, "RelativeHeightRelation")); // This was 3762, 40% width was relative from margin, not page. CPPUNIT_ASSERT_EQUAL(sal_Int32(4896), parseDump("/root/page/body/txt/anchored/fly/infos/bounds", "width").toInt32()); } DECLARE_ODFEXPORT_TEST(testTextFrameVertAdjust, "textframe-vertadjust.odt") { // Test import/export of new frame attribute called TextVerticalAdjust // 1st frame's context is adjusted to the top uno::Reference xFrame(getTextFrameByName("Rectangle 1"), uno::UNO_QUERY); CPPUNIT_ASSERT_EQUAL(drawing::TextVerticalAdjust_TOP, getProperty(xFrame, "TextVerticalAdjust")); // 2nd frame's context is adjusted to the center xFrame.set(getTextFrameByName("Rectangle 2"), uno::UNO_QUERY); CPPUNIT_ASSERT_EQUAL(drawing::TextVerticalAdjust_CENTER, getProperty(xFrame, "TextVerticalAdjust")); // 3rd frame's context is adjusted to the bottom xFrame.set(getTextFrameByName("Rectangle 3"), uno::UNO_QUERY); CPPUNIT_ASSERT_EQUAL(drawing::TextVerticalAdjust_BOTTOM, getProperty(xFrame, "TextVerticalAdjust")); } DECLARE_ODFEXPORT_TEST(testShapeRelsize, "shape-relsize.odt") { uno::Reference xShape = getShape(1); // These were all 0, as style:rel-width/height was ignored on import for shapes. CPPUNIT_ASSERT_EQUAL(sal_Int16(40), getProperty(xShape, "RelativeWidth")); CPPUNIT_ASSERT_EQUAL(sal_Int16(20), getProperty(xShape, "RelativeHeight")); // Relation was "page" for both width and height, should be "paragraph" for width. CPPUNIT_ASSERT_EQUAL(text::RelOrientation::FRAME, getProperty(xShape, "RelativeWidthRelation")); // And make sure that height stays "page". CPPUNIT_ASSERT_EQUAL(text::RelOrientation::PAGE_FRAME, getProperty(xShape, "RelativeHeightRelation")); } DECLARE_ODFEXPORT_TEST(testTextboxRoundedCorners, "textbox-rounded-corners.odt") { uno::Reference xShape = getShape(1); comphelper::SequenceAsHashMap aCustomShapeGeometry = comphelper::SequenceAsHashMap(getProperty< uno::Sequence >(xShape, "CustomShapeGeometry")); // Test that the shape is a rounded rectangle. CPPUNIT_ASSERT_EQUAL(OUString("round-rectangle"), aCustomShapeGeometry["Type"].get()); // The shape text should start with a table, with "a" in its A1 cell. uno::Reference xText = uno::Reference(xShape, uno::UNO_QUERY)->getText(); uno::Reference xTable(getParagraphOrTable(1, xText), uno::UNO_QUERY); uno::Reference xCell(xTable->getCellByName("A1"), uno::UNO_QUERY); CPPUNIT_ASSERT_EQUAL(OUString("a"), xCell->getString()); // Table inside a textbox should be in the extension namespace. if (xmlDocPtr pXmlDoc = parseExport("content.xml")) // This failed, as draw:custom-shape had a table:table child. assertXPath(pXmlDoc, "//draw:custom-shape/loext:table", "name", "Table1"); } DECLARE_ODFEXPORT_TEST(testFdo86963, "fdo86963.odt") { // Export of this document failed with beans::UnknownPropertyException. uno::Reference xDrawPageSupplier(mxComponent, uno::UNO_QUERY); uno::Reference xDrawPage = xDrawPageSupplier->getDrawPage(); CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xDrawPage->getCount()); } DECLARE_ODFEXPORT_TEST(testGerrit13858, "gerrit13858.odt") { // Just make sure the output is valid. } DECLARE_ODFEXPORT_TEST(testOdtBorderTypes, "border_types.odt") { static const sal_Int32 lineStyles[] = { 0, 1, 2, 14, 16, 17, 3, 15 }; uno::Reference textDocument(mxComponent, uno::UNO_QUERY); uno::Reference xParaEnumAccess(textDocument->getText(), uno::UNO_QUERY); // list of paragraphs uno::Reference xParaEnum = xParaEnumAccess->createEnumeration(); do { uno::Reference xServiceInfo; if (xParaEnum->nextElement() >>= xServiceInfo) { if (xServiceInfo->supportsService("com.sun.star.text.TextTable")) { uno::Reference const xCellRange(xServiceInfo, uno::UNO_QUERY_THROW); for (sal_Int32 row = 0; row < 15; row += 2) { uno::Reference xCell = xCellRange->getCellByPosition(1, row); uno::Reference< beans::XPropertySet > xPropSet(xCell, uno::UNO_QUERY_THROW); uno::Any aTopBorder = xPropSet->getPropertyValue("TopBorder"); table::BorderLine2 aTopBorderLine; if (aTopBorder >>= aTopBorderLine) { sal_Int32 lineStyle = aTopBorderLine.LineStyle; CPPUNIT_ASSERT_EQUAL(lineStyles[row / 2], lineStyle); } } //end of the 'for' loop } } } while (xParaEnum->hasMoreElements()); } DECLARE_ODFEXPORT_TEST(testCellUserDefineAttr, "userdefattr-tablecell.odt") { uno::Reference xTable(getParagraphOrTable(1), uno::UNO_QUERY); uno::Reference const xCellA1(xTable->getCellByName("A1"), uno::UNO_SET_THROW); uno::Reference const xCellB1(xTable->getCellByName("B1"), uno::UNO_SET_THROW); uno::Reference const xCellC1(xTable->getCellByName("C1"), uno::UNO_SET_THROW); getUserDefineAttribute(uno::makeAny(xCellA1), "proName", "v1"); getUserDefineAttribute(uno::makeAny(xCellB1), "proName", "v2"); getUserDefineAttribute(uno::makeAny(xCellC1), "proName", "v3"); } #if HAVE_FEATURE_PDFIMPORT DECLARE_ODFEXPORT_TEST(testEmbeddedPdf, "embedded-pdf.odt") { uno::Reference xShape = getShape(1); // This failed, pdf+svm replacement graphics pair didn't survive an ODT roundtrip. CPPUNIT_ASSERT(!getProperty(xShape, "ReplacementGraphicURL").isEmpty()); } #endif DECLARE_ODFEXPORT_TEST(testTableStyles1, "table_styles_1.odt") { // Table styles basic graphic test. // Doesn't cover all attributes. uno::Reference XFamiliesSupplier(mxComponent, uno::UNO_QUERY); uno::Reference xFamilies(XFamiliesSupplier->getStyleFamilies()); uno::Reference xCellFamily(xFamilies->getByName("CellStyles"), uno::UNO_QUERY); uno::Reference xCell1Style; xCellFamily->getByName("Test style.1") >>= xCell1Style; sal_Int64 nInt64 = 0xF0F0F0; sal_Int32 nInt32 = 0xF0F0F0; table::BorderLine2 oBorder; xCell1Style->getPropertyValue("BackColor") >>= nInt64; CPPUNIT_ASSERT_EQUAL(sal_Int64(0xCC0000), nInt64); xCell1Style->getPropertyValue("WritingMode") >>= nInt32; CPPUNIT_ASSERT_EQUAL(sal_Int32(4), nInt32); xCell1Style->getPropertyValue("VertOrient") >>= nInt32; CPPUNIT_ASSERT_EQUAL(sal_Int32(0), nInt32); xCell1Style->getPropertyValue("BorderDistance") >>= nInt32; CPPUNIT_ASSERT_EQUAL(sal_Int32(97), nInt32); xCell1Style->getPropertyValue("LeftBorderDistance") >>= nInt32; CPPUNIT_ASSERT_EQUAL(sal_Int32(97), nInt32); xCell1Style->getPropertyValue("RightBorderDistance") >>= nInt32; CPPUNIT_ASSERT_EQUAL(sal_Int32(97), nInt32); xCell1Style->getPropertyValue("TopBorderDistance") >>= nInt32; CPPUNIT_ASSERT_EQUAL(sal_Int32(97), nInt32); xCell1Style->getPropertyValue("BottomBorderDistance") >>= nInt32; CPPUNIT_ASSERT_EQUAL(sal_Int32(97), nInt32); xCell1Style->getPropertyValue("RightBorder") >>= oBorder; CPPUNIT_ASSERT_EQUAL(sal_Int32(0), oBorder.Color); xCell1Style->getPropertyValue("LeftBorder") >>= oBorder; CPPUNIT_ASSERT_EQUAL(sal_Int32(0), oBorder.Color); xCell1Style->getPropertyValue("TopBorder") >>= oBorder; CPPUNIT_ASSERT_EQUAL(sal_Int32(0), oBorder.Color); xCell1Style->getPropertyValue("BottomBorder") >>= oBorder; CPPUNIT_ASSERT_EQUAL(sal_Int32(0), oBorder.Color); } DECLARE_ODFEXPORT_TEST(testTableStyles2, "table_styles_2.odt") { // Table styles paragraph and char tests // Doesn't cover all attributes. // Problem: underline for table autoformat doesn't work. uno::Reference XFamiliesSupplier(mxComponent, uno::UNO_QUERY); uno::Reference xFamilies(XFamiliesSupplier->getStyleFamilies()); uno::Reference xTableFamily(xFamilies->getByName("TableStyles"), uno::UNO_QUERY); uno::Reference xTableStyle(xTableFamily->getByName("Test style2"), uno::UNO_QUERY); uno::Reference xCell1Style; float fFloat = 0.; bool bBool = true; sal_Int16 nInt16 = 0xF0; sal_Int32 nInt32 = 0xF0F0F0; sal_Int64 nInt64 = 0xF0F0F0; OUString sString; awt::FontSlant eCharPosture; // cell 1 xTableStyle->getByName("first-row-start-column") >>= xCell1Style; xCell1Style->getPropertyValue("ParaAdjust") >>= nInt32; CPPUNIT_ASSERT_EQUAL(sal_Int32(0), nInt32); xCell1Style->getPropertyValue("CharColor") >>= nInt64; CPPUNIT_ASSERT_EQUAL(sal_Int64(0xFF6600), nInt64); xCell1Style->getPropertyValue("CharContoured") >>= bBool; CPPUNIT_ASSERT_EQUAL(bool(false), bBool); xCell1Style->getPropertyValue("CharShadowed") >>= bBool; CPPUNIT_ASSERT_EQUAL(bool(true), bBool); xCell1Style->getPropertyValue("CharStrikeout") >>= nInt32; CPPUNIT_ASSERT_EQUAL(sal_Int32(1), nInt32); xCell1Style->getPropertyValue("CharUnderline") >>= nInt32; CPPUNIT_ASSERT_EQUAL(sal_Int32(0), nInt32); // underline color is not working for table autoformats // xCell1Style->getPropertyValue("CharUnderlineHasColor") >>= bBool; // CPPUNIT_ASSERT_EQUAL(bool(false), bBool); // xCell1Style->getPropertyValue("CharUnderlineColor") >>= nInt64; // CPPUNIT_ASSERT_EQUAL(sal_Int64(-1), nInt64); // standard font xCell1Style->getPropertyValue("CharHeight") >>= fFloat; CPPUNIT_ASSERT_EQUAL(float(18.), fFloat); xCell1Style->getPropertyValue("CharWeight") >>= fFloat; CPPUNIT_ASSERT_EQUAL(float(100.), fFloat); xCell1Style->getPropertyValue("CharPosture") >>= eCharPosture; CPPUNIT_ASSERT_EQUAL(awt::FontSlant(awt::FontSlant_NONE), eCharPosture); xCell1Style->getPropertyValue("CharFontName") >>= sString; CPPUNIT_ASSERT_EQUAL(OUString("Courier"), sString); xCell1Style->getPropertyValue("CharFontStyleName") >>= sString; CPPUNIT_ASSERT_EQUAL(OUString(""), sString); xCell1Style->getPropertyValue("CharFontFamily") >>= nInt16; CPPUNIT_ASSERT_EQUAL(sal_Int16(2), nInt16); xCell1Style->getPropertyValue("CharFontPitch") >>= nInt16; CPPUNIT_ASSERT_EQUAL(sal_Int16(1), nInt16); // cjk font xCell1Style->getPropertyValue("CharHeightAsian") >>= fFloat; CPPUNIT_ASSERT_EQUAL(float(18.), fFloat); xCell1Style->getPropertyValue("CharWeightAsian") >>= fFloat; CPPUNIT_ASSERT_EQUAL(float(100.), fFloat); xCell1Style->getPropertyValue("CharPostureAsian") >>= eCharPosture; CPPUNIT_ASSERT_EQUAL(awt::FontSlant(awt::FontSlant_NONE), eCharPosture); xCell1Style->getPropertyValue("CharFontNameAsian") >>= sString; CPPUNIT_ASSERT_EQUAL(OUString("Courier"), sString); xCell1Style->getPropertyValue("CharFontStyleNameAsian") >>= sString; CPPUNIT_ASSERT_EQUAL(OUString("Regularna"), sString); xCell1Style->getPropertyValue("CharFontFamilyAsian") >>= nInt16; CPPUNIT_ASSERT_EQUAL(sal_Int16(2), nInt16); xCell1Style->getPropertyValue("CharFontPitchAsian") >>= nInt16; CPPUNIT_ASSERT_EQUAL(sal_Int16(1), nInt16); // ctl font xCell1Style->getPropertyValue("CharHeightComplex") >>= fFloat; CPPUNIT_ASSERT_EQUAL(float(18.), fFloat); xCell1Style->getPropertyValue("CharWeightComplex") >>= fFloat; CPPUNIT_ASSERT_EQUAL(float(100.), fFloat); xCell1Style->getPropertyValue("CharPostureComplex") >>= eCharPosture; CPPUNIT_ASSERT_EQUAL(awt::FontSlant(awt::FontSlant_NONE), eCharPosture); xCell1Style->getPropertyValue("CharFontNameComplex") >>= sString; CPPUNIT_ASSERT_EQUAL(OUString("Courier"), sString); xCell1Style->getPropertyValue("CharFontStyleNameComplex") >>= sString; CPPUNIT_ASSERT_EQUAL(OUString("Regularna"), sString); xCell1Style->getPropertyValue("CharFontFamilyComplex") >>= nInt16; CPPUNIT_ASSERT_EQUAL(sal_Int16(2), nInt16); xCell1Style->getPropertyValue("CharFontPitchComplex") >>= nInt16; CPPUNIT_ASSERT_EQUAL(sal_Int16(1), nInt16); // cell 2 xTableStyle->getByName("first-row") >>= xCell1Style; xCell1Style->getPropertyValue("ParaAdjust") >>= nInt32; CPPUNIT_ASSERT_EQUAL(sal_Int32(3), nInt32); xCell1Style->getPropertyValue("CharColor") >>= nInt64; CPPUNIT_ASSERT_EQUAL(sal_Int64(0x9900FF), nInt64); xCell1Style->getPropertyValue("CharContoured") >>= bBool; CPPUNIT_ASSERT_EQUAL(bool(true), bBool); xCell1Style->getPropertyValue("CharShadowed") >>= bBool; CPPUNIT_ASSERT_EQUAL(bool(false), bBool); xCell1Style->getPropertyValue("CharStrikeout") >>= nInt32; CPPUNIT_ASSERT_EQUAL(sal_Int32(0), nInt32); xCell1Style->getPropertyValue("CharUnderline") >>= nInt32; CPPUNIT_ASSERT_EQUAL(sal_Int32(2), nInt32); // underline color test place // standard font xCell1Style->getPropertyValue("CharHeight") >>= fFloat; CPPUNIT_ASSERT_EQUAL(float(12.), fFloat); xCell1Style->getPropertyValue("CharWeight") >>= fFloat; CPPUNIT_ASSERT_EQUAL(float(150.), fFloat); xCell1Style->getPropertyValue("CharPosture") >>= eCharPosture; CPPUNIT_ASSERT_EQUAL(awt::FontSlant(awt::FontSlant_NONE), eCharPosture); xCell1Style->getPropertyValue("CharFontName") >>= sString; CPPUNIT_ASSERT_EQUAL(OUString("Liberation Serif"), sString); xCell1Style->getPropertyValue("CharFontStyleName") >>= sString; CPPUNIT_ASSERT_EQUAL(OUString(""), sString); xCell1Style->getPropertyValue("CharFontFamily") >>= nInt16; CPPUNIT_ASSERT_EQUAL(sal_Int16(3), nInt16); xCell1Style->getPropertyValue("CharFontPitch") >>= nInt16; CPPUNIT_ASSERT_EQUAL(sal_Int16(2), nInt16); // cjk font xCell1Style->getPropertyValue("CharHeightAsian") >>= fFloat; CPPUNIT_ASSERT_EQUAL(float(12.), fFloat); xCell1Style->getPropertyValue("CharWeightAsian") >>= fFloat; CPPUNIT_ASSERT_EQUAL(float(150.), fFloat); xCell1Style->getPropertyValue("CharPostureAsian") >>= eCharPosture; CPPUNIT_ASSERT_EQUAL(awt::FontSlant(awt::FontSlant_NONE), eCharPosture); xCell1Style->getPropertyValue("CharFontNameAsian") >>= sString; CPPUNIT_ASSERT_EQUAL(OUString("Liberation Serif"), sString); xCell1Style->getPropertyValue("CharFontStyleNameAsian") >>= sString; CPPUNIT_ASSERT_EQUAL(OUString("Pogrubiona"), sString); xCell1Style->getPropertyValue("CharFontFamilyAsian") >>= nInt16; CPPUNIT_ASSERT_EQUAL(sal_Int16(3), nInt16); xCell1Style->getPropertyValue("CharFontPitchAsian") >>= nInt16; CPPUNIT_ASSERT_EQUAL(sal_Int16(2), nInt16); // ctl font xCell1Style->getPropertyValue("CharHeightComplex") >>= fFloat; CPPUNIT_ASSERT_EQUAL(float(12.), fFloat); xCell1Style->getPropertyValue("CharWeightComplex") >>= fFloat; CPPUNIT_ASSERT_EQUAL(float(150.), fFloat); xCell1Style->getPropertyValue("CharPostureComplex") >>= eCharPosture; CPPUNIT_ASSERT_EQUAL(awt::FontSlant(awt::FontSlant_NONE), eCharPosture); xCell1Style->getPropertyValue("CharFontNameComplex") >>= sString; CPPUNIT_ASSERT_EQUAL(OUString("Liberation Serif"), sString); xCell1Style->getPropertyValue("CharFontStyleNameComplex") >>= sString; CPPUNIT_ASSERT_EQUAL(OUString("Pogrubiona"), sString); xCell1Style->getPropertyValue("CharFontFamilyComplex") >>= nInt16; CPPUNIT_ASSERT_EQUAL(sal_Int16(3), nInt16); xCell1Style->getPropertyValue("CharFontPitchComplex") >>= nInt16; CPPUNIT_ASSERT_EQUAL(sal_Int16(2), nInt16); // cell 3 xTableStyle->getByName("first-row-even-column") >>= xCell1Style; xCell1Style->getPropertyValue("ParaAdjust") >>= nInt32; CPPUNIT_ASSERT_EQUAL(sal_Int32(1), nInt32); xCell1Style->getPropertyValue("CharColor") >>= nInt64; CPPUNIT_ASSERT_EQUAL(sal_Int64(0), nInt64); xCell1Style->getPropertyValue("CharContoured") >>= bBool; CPPUNIT_ASSERT_EQUAL(bool(true), bBool); xCell1Style->getPropertyValue("CharShadowed") >>= bBool; CPPUNIT_ASSERT_EQUAL(bool(true), bBool); xCell1Style->getPropertyValue("CharStrikeout") >>= nInt32; CPPUNIT_ASSERT_EQUAL(sal_Int32(0), nInt32); xCell1Style->getPropertyValue("CharUnderline") >>= nInt32; CPPUNIT_ASSERT_EQUAL(sal_Int32(6), nInt32); // underline color test place // standard font xCell1Style->getPropertyValue("CharHeight") >>= fFloat; CPPUNIT_ASSERT_EQUAL(float(12.), fFloat); xCell1Style->getPropertyValue("CharWeight") >>= fFloat; CPPUNIT_ASSERT_EQUAL(float(100.), fFloat); xCell1Style->getPropertyValue("CharPosture") >>= eCharPosture; CPPUNIT_ASSERT_EQUAL(awt::FontSlant(awt::FontSlant_ITALIC), eCharPosture); xCell1Style->getPropertyValue("CharFontName") >>= sString; CPPUNIT_ASSERT_EQUAL(OUString("Open Sans"), sString); xCell1Style->getPropertyValue("CharFontStyleName") >>= sString; CPPUNIT_ASSERT_EQUAL(OUString(""), sString); xCell1Style->getPropertyValue("CharFontFamily") >>= nInt16; CPPUNIT_ASSERT_EQUAL(sal_Int16(0), nInt16); xCell1Style->getPropertyValue("CharFontPitch") >>= nInt16; CPPUNIT_ASSERT_EQUAL(sal_Int16(2), nInt16); // cjk font xCell1Style->getPropertyValue("CharHeightAsian") >>= fFloat; CPPUNIT_ASSERT_EQUAL(float(12.), fFloat); xCell1Style->getPropertyValue("CharWeightAsian") >>= fFloat; CPPUNIT_ASSERT_EQUAL(float(100.), fFloat); xCell1Style->getPropertyValue("CharPostureAsian") >>= eCharPosture; CPPUNIT_ASSERT_EQUAL(awt::FontSlant(awt::FontSlant_ITALIC), eCharPosture); xCell1Style->getPropertyValue("CharFontNameAsian") >>= sString; CPPUNIT_ASSERT_EQUAL(OUString("Open Sans"), sString); xCell1Style->getPropertyValue("CharFontStyleNameAsian") >>= sString; CPPUNIT_ASSERT_EQUAL(OUString("Kursywa"), sString); xCell1Style->getPropertyValue("CharFontFamilyAsian") >>= nInt16; CPPUNIT_ASSERT_EQUAL(sal_Int16(0), nInt16); xCell1Style->getPropertyValue("CharFontPitchAsian") >>= nInt16; CPPUNIT_ASSERT_EQUAL(sal_Int16(2), nInt16); // ctl font xCell1Style->getPropertyValue("CharHeightComplex") >>= fFloat; CPPUNIT_ASSERT_EQUAL(float(12.), fFloat); xCell1Style->getPropertyValue("CharWeightComplex") >>= fFloat; CPPUNIT_ASSERT_EQUAL(float(100.), fFloat); xCell1Style->getPropertyValue("CharPostureComplex") >>= eCharPosture; CPPUNIT_ASSERT_EQUAL(awt::FontSlant(awt::FontSlant_ITALIC), eCharPosture); xCell1Style->getPropertyValue("CharFontNameComplex") >>= sString; CPPUNIT_ASSERT_EQUAL(OUString("Open Sans"), sString); xCell1Style->getPropertyValue("CharFontStyleNameComplex") >>= sString; CPPUNIT_ASSERT_EQUAL(OUString("Kursywa"), sString); xCell1Style->getPropertyValue("CharFontFamilyComplex") >>= nInt16; CPPUNIT_ASSERT_EQUAL(sal_Int16(0), nInt16); xCell1Style->getPropertyValue("CharFontPitchComplex") >>= nInt16; CPPUNIT_ASSERT_EQUAL(sal_Int16(2), nInt16); } DECLARE_ODFEXPORT_TEST(testTableStyles3, "table_styles_3.odt") { // This test checks if default valued attributes aren't exported. if (xmlDocPtr pXmlDoc = parseExport("styles.xml")) { // // For this element the only exported attributes are: "border-left", "border-bottom" assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:table-cell-properties", "background-color"); // border-left place assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:table-cell-properties", "border-right"); assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:table-cell-properties", "border-top"); // border-bottom place assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:table-cell-properties", "padding"); assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:table-cell-properties", "padding-left"); assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:table-cell-properties", "padding-right"); assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:table-cell-properties", "padding-top"); assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:table-cell-properties", "padding-bottom"); assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:table-cell-properties", "writing-mode"); // should be absent, because it has only "text-align" attribute, which shouldn't be exported. // Assume that style:paragraph-properties and style:text-properties exists. assertXPathChildren(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']", 2); // // For this element the only exported attributes are: "use-window-font-color place", "font-size-asian", "font-name-asian", "font-family-asian", "font-name-complex", "font-family-complex" // use-window-font-color place assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "text-shadow"); assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "text-outline"); assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "text-line-through-style"); assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "text-line-through-type"); assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "text-underline-style"); assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "text-underline-color"); assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "font-size"); assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "font-weight"); assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "font-style"); assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "font-name"); assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "font-family"); assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "font-style-name"); assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "font-family-generic"); assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "font-pitch"); // font-size-asian place assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "font-weight-asian"); assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "font-style-asian"); // font-name-asian place // font-family-asian place assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "font-style-name-asian"); assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "font-family-generic-asian"); assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "font-pitch-asian"); assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "font-size-complex"); assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "font-weight-complex"); assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "font-style-complex"); // font-name-complex place // font-family-complex place assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "font-style-name-complex"); assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "font-family-generic-complex"); assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "font-pitch-complex"); } } DECLARE_ODFIMPORT_TEST(testTableStyles4, "table_styles_4.odt") { // Test if loaded styles overwrite existing styles uno::Reference XFamiliesSupplier(mxComponent, uno::UNO_QUERY); uno::Reference xFamilies(XFamiliesSupplier->getStyleFamilies()); uno::Reference xTableFamily(xFamilies->getByName("TableStyles"), uno::UNO_QUERY); uno::Reference xTableStyle(xTableFamily->getByName("Green"), uno::UNO_QUERY); uno::Reference xCell1Style; xTableStyle->getByName("first-row-start-column") >>= xCell1Style; CPPUNIT_ASSERT_EQUAL(sal_Int32(0x00ff00), getProperty(xCell1Style, "BackColor")); } DECLARE_ODFEXPORT_TEST(testTableStyles5, "table_styles_5.odt") { // Test if cell styles doesn't have a style:parent-style-name attribute. if (xmlDocPtr pXmlDoc = parseExport("styles.xml")) { assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style.1']", "parent-style-name"); assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style.2']", "parent-style-name"); assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style.3']", "parent-style-name"); assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style.4']", "parent-style-name"); assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style.5']", "parent-style-name"); assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style.6']", "parent-style-name"); assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style.7']", "parent-style-name"); assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style.8']", "parent-style-name"); assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style.9']", "parent-style-name"); assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style.10']", "parent-style-name"); assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style.11']", "parent-style-name"); assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style.12']", "parent-style-name"); assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style.13']", "parent-style-name"); assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style.14']", "parent-style-name"); assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style.15']", "parent-style-name"); assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style.16']", "parent-style-name"); } } #endif CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */