/* -*- 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 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace ::com::sun::star; namespace { /// Gets one child of xShape, which one is specified by nIndex. uno::Reference getChildShape(const uno::Reference& xShape, sal_Int32 nIndex) { uno::Reference xGroup(xShape, uno::UNO_QUERY); CPPUNIT_ASSERT(xGroup.is()); CPPUNIT_ASSERT(xGroup->getCount() > nIndex); uno::Reference xRet(xGroup->getByIndex(nIndex), uno::UNO_QUERY); CPPUNIT_ASSERT(xRet.is()); return xRet; } } /// oox drawingml tests. class OoxDrawingmlTest : public test::BootstrapFixture, public unotest::MacrosTest { private: uno::Reference mxComponent; public: void setUp() override; void tearDown() override; uno::Reference& getComponent() { return mxComponent; } void load(const OUString& rURL); void loadAndReload(const OUString& rURL, const OUString& rFilterName); }; void OoxDrawingmlTest::setUp() { test::BootstrapFixture::setUp(); mxDesktop.set(frame::Desktop::create(mxComponentContext)); } void OoxDrawingmlTest::tearDown() { if (mxComponent.is()) mxComponent->dispose(); test::BootstrapFixture::tearDown(); } void OoxDrawingmlTest::load(const OUString& rURL) { mxComponent = loadFromDesktop(rURL); } void OoxDrawingmlTest::loadAndReload(const OUString& rURL, const OUString& rFilterName) { load(rURL); uno::Reference xStorable(mxComponent, uno::UNO_QUERY); utl::MediaDescriptor aMediaDescriptor; aMediaDescriptor["FilterName"] <<= rFilterName; utl::TempFile aTempFile; aTempFile.EnableKillingFile(); xStorable->storeToURL(aTempFile.GetURL(), aMediaDescriptor.getAsConstPropertyValueList()); mxComponent->dispose(); validate(aTempFile.GetFileName(), test::OOXML); mxComponent = loadFromDesktop(aTempFile.GetURL()); } constexpr OUStringLiteral DATA_DIRECTORY = u"/oox/qa/unit/data/"; CPPUNIT_TEST_FIXTURE(OoxDrawingmlTest, testTransparentText) { OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "transparent-text.pptx"; loadAndReload(aURL, "Impress Office Open XML"); uno::Reference xDrawPagesSupplier(getComponent(), uno::UNO_QUERY); uno::Reference xDrawPage(xDrawPagesSupplier->getDrawPages()->getByIndex(0), uno::UNO_QUERY); uno::Reference xShape(xDrawPage->getByIndex(0), uno::UNO_QUERY); uno::Reference xParagraph( xShape->createEnumeration()->nextElement(), uno::UNO_QUERY); uno::Reference xPortion(xParagraph->createEnumeration()->nextElement(), uno::UNO_QUERY); sal_Int16 nTransparency = 0; xPortion->getPropertyValue("CharTransparence") >>= nTransparency; // Without the accompanying fix in place, this test would have failed with: // - Expected: 75 // - Actual : 0 // i.e. the transparency of the character color was lost on import/export. CPPUNIT_ASSERT_EQUAL(static_cast(75), nTransparency); } CPPUNIT_TEST_FIXTURE(OoxDrawingmlTest, testTdf131082) { OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "tdf131082.pptx"; loadAndReload(aURL, "Impress Office Open XML"); uno::Reference xDrawPagesSupplier(getComponent(), uno::UNO_QUERY); uno::Reference xDrawPage(xDrawPagesSupplier->getDrawPages()->getByIndex(0), uno::UNO_QUERY); uno::Reference xShape(xDrawPage->getByIndex(0), uno::UNO_QUERY); uno::Reference XPropSet(getChildShape(getChildShape(xShape, 0), 0), uno::UNO_QUERY); drawing::FillStyle eFillStyle = drawing::FillStyle_NONE; XPropSet->getPropertyValue("FillStyle") >>= eFillStyle; // Without the accompanying fix in place, this test would have failed with: // with drawing::FillStyle_NONE - 0 CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID, eFillStyle); } CPPUNIT_TEST_FIXTURE(OoxDrawingmlTest, testPresetAdjustValue) { OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "preset-adjust-value.pptx"; load(aURL); uno::Reference xDrawPagesSupplier(getComponent(), uno::UNO_QUERY); uno::Reference xDrawPage(xDrawPagesSupplier->getDrawPages()->getByIndex(0), uno::UNO_QUERY); uno::Reference xShape(xDrawPage->getByIndex(0), uno::UNO_QUERY); uno::Reference xShapeProps(xShape, uno::UNO_QUERY); uno::Sequence aGeoPropSeq; xShapeProps->getPropertyValue("CustomShapeGeometry") >>= aGeoPropSeq; comphelper::SequenceAsHashMap aGeoPropMap(aGeoPropSeq); uno::Sequence aAdjustmentSeq; aGeoPropMap.getValue("AdjustmentValues") >>= aAdjustmentSeq; CPPUNIT_ASSERT_EQUAL(static_cast(1), aAdjustmentSeq.getLength()); // Without the accompanying fix in place, this test would have failed with: // - Expected: 11587 // - Actual : 10813 // i.e. the adjust value was set from the placeholder, not from the shape. CPPUNIT_ASSERT_EQUAL(static_cast(11587), aAdjustmentSeq[0].Value.get()); } CPPUNIT_TEST_FIXTURE(OoxDrawingmlTest, testChartDataLabelCharColor) { OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "chart-data-label-char-color.docx"; load(aURL); uno::Reference xDrawPagesSupplier(getComponent(), uno::UNO_QUERY); uno::Reference xDrawPage(xDrawPagesSupplier->getDrawPages()->getByIndex(0), uno::UNO_QUERY); uno::Reference xShape(xDrawPage->getByIndex(0), uno::UNO_QUERY); uno::Reference xModel(xShape->getPropertyValue("Model"), uno::UNO_QUERY); uno::Reference xDiagram(xModel->getFirstDiagram(), uno::UNO_QUERY); uno::Reference xCoordinateSystem( xDiagram->getCoordinateSystems()[0], uno::UNO_QUERY); uno::Reference xChartType(xCoordinateSystem->getChartTypes()[0], uno::UNO_QUERY); uno::Reference xDataSeries = xChartType->getDataSeries()[0]; uno::Reference xDataPoint = xDataSeries->getDataPointByIndex(0); uno::Sequence> aLabels; xDataPoint->getPropertyValue("CustomLabelFields") >>= aLabels; uno::Reference xLabel = aLabels[0]; sal_Int32 nCharColor = 0; xLabel->getPropertyValue("CharColor") >>= nCharColor; // Without the accompanying fix in place, this test would have failed with: // - Expected: 16777215 // - Actual : -1 // i.e. the data label had no explicit (white) color. CPPUNIT_ASSERT_EQUAL(static_cast(0xffffff), nCharColor); } CPPUNIT_TEST_FIXTURE(OoxDrawingmlTest, testGradientMultiStepTransparency) { // Load a document with a multi-step gradient. OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "gradient-multistep-transparency.pptx"; load(aURL); // Check the end transparency of the gradient. uno::Reference xDrawPagesSupplier(getComponent(), uno::UNO_QUERY); uno::Reference xDrawPage(xDrawPagesSupplier->getDrawPages()->getByIndex(0), uno::UNO_QUERY); uno::Reference xShape(xDrawPage->getByIndex(1), uno::UNO_QUERY); CPPUNIT_ASSERT_EQUAL(OUString("Rectangle 4"), xShape->getName()); uno::Reference xShapeProps(xShape, uno::UNO_QUERY); awt::Gradient aTransparence; xShapeProps->getPropertyValue("FillTransparenceGradient") >>= aTransparence; // Without the accompanying fix in place, this test would have failed with: // - Expected: 16777215 (0xffffff) // - Actual : 3487029 (0x353535) // i.e. the end transparency was not 100%, but was 21%, leading to an unexpected visible line on // the right of this shape. CPPUNIT_ASSERT_EQUAL(static_cast(0xffffff), aTransparence.EndColor); } CPPUNIT_TEST_FIXTURE(OoxDrawingmlTest, testShapeTextAlignment) { OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "shape-text-alignment.pptx"; load(aURL); uno::Reference xDrawPagesSupplier(getComponent(), uno::UNO_QUERY); uno::Reference xDrawPage(xDrawPagesSupplier->getDrawPages()->getByIndex(0), uno::UNO_QUERY); uno::Reference xShape(xDrawPage->getByIndex(0), uno::UNO_QUERY); sal_Int16 nParaAdjust = -1; CPPUNIT_ASSERT(xShape->getPropertyValue("ParaAdjust") >>= nParaAdjust); // Without the accompanying fix in place, this test would have failed with: // - Expected: 0 // - Actual : 3 // i.e. text which is meant to be left-aligned was centered at a paragraph level. CPPUNIT_ASSERT_EQUAL(style::ParagraphAdjust_LEFT, static_cast(nParaAdjust)); } CPPUNIT_TEST_FIXTURE(OoxDrawingmlTest, testShapeTextAdjustLeft) { OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "shape-text-adjust-left.pptx"; load(aURL); uno::Reference xDrawPagesSupplier(getComponent(), uno::UNO_QUERY); uno::Reference xDrawPage(xDrawPagesSupplier->getDrawPages()->getByIndex(0), uno::UNO_QUERY); uno::Reference xShape(xDrawPage->getByIndex(0), uno::UNO_QUERY); drawing::TextHorizontalAdjust eAdjust; // Without the accompanying fix in place, this test would have failed with: // - Expected: 3 (center) // - Actual : 1 (block) // i.e. text was center-adjusted, not default-adjusted (~left). CPPUNIT_ASSERT(xShape->getPropertyValue("TextHorizontalAdjust") >>= eAdjust); CPPUNIT_ASSERT_EQUAL(drawing::TextHorizontalAdjust_BLOCK, eAdjust); } CPPUNIT_TEST_FIXTURE(OoxDrawingmlTest, testCameraRotationRevolution) { OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "camera-rotation-revolution.docx"; load(aURL); uno::Reference xDrawPagesSupplier(getComponent(), uno::UNO_QUERY); uno::Reference xDrawPage(xDrawPagesSupplier->getDrawPages()->getByIndex(0), uno::UNO_QUERY); uno::Reference xShape0(xDrawPage->getByIndex(0), uno::UNO_QUERY); uno::Reference xShape1(xDrawPage->getByIndex(1), uno::UNO_QUERY); uno::Reference xShapeProps0(xShape0, uno::UNO_QUERY); uno::Reference xShapeProps1(xShape1, uno::UNO_QUERY); sal_Int32 nRotateAngle0; sal_Int32 nRotateAngle1; xShapeProps0->getPropertyValue("RotateAngle") >>= nRotateAngle0; xShapeProps1->getPropertyValue("RotateAngle") >>= nRotateAngle1; // Without the accompanying fix in place, this test would have failed with: // - Expected: 8000 // - Actual : 0 // so the camera rotation would not have been factored into how the shape is displayed CPPUNIT_ASSERT_EQUAL(static_cast(8000), nRotateAngle0); CPPUNIT_ASSERT_EQUAL(static_cast(27000), nRotateAngle1); } CPPUNIT_TEST_FIXTURE(OoxDrawingmlTest, testTdf146534_CameraRotationRevolutionNonWpsShapes) { OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "camera-rotation-revolution-nonwps.pptx"; load(aURL); uno::Reference xDrawPagesSupplier(getComponent(), uno::UNO_QUERY); uno::Reference xDrawPage(xDrawPagesSupplier->getDrawPages()->getByIndex(0), uno::UNO_QUERY); uno::Reference xShape0(xDrawPage->getByIndex(0), uno::UNO_QUERY); uno::Reference xShape1(xDrawPage->getByIndex(1), uno::UNO_QUERY); uno::Reference xShapeProps0(xShape0, uno::UNO_QUERY); uno::Reference xShapeProps1(xShape1, uno::UNO_QUERY); sal_Int32 nRotateAngle0; sal_Int32 nRotateAngle1; xShapeProps0->getPropertyValue("RotateAngle") >>= nRotateAngle0; xShapeProps1->getPropertyValue("RotateAngle") >>= nRotateAngle1; // Without the accompanying fix in place, this test would have failed with: // - Expected: 9000 // - Actual : 0 // so the camera rotation would not have been factored into how the shape is displayed CPPUNIT_ASSERT_EQUAL(static_cast(9000), nRotateAngle0); CPPUNIT_ASSERT_EQUAL(static_cast(30500), nRotateAngle1); } CPPUNIT_TEST_FIXTURE(OoxDrawingmlTest, testTableShadow) { auto verify = [](const uno::Reference& xComponent) { uno::Reference xDrawPagesSupplier(xComponent, uno::UNO_QUERY); uno::Reference xDrawPage( xDrawPagesSupplier->getDrawPages()->getByIndex(0), uno::UNO_QUERY); uno::Reference xShape(xDrawPage->getByIndex(0), uno::UNO_QUERY); bool bShadow = false; CPPUNIT_ASSERT(xShape->getPropertyValue("Shadow") >>= bShadow); CPPUNIT_ASSERT(bShadow); sal_Int32 nColor = 0; CPPUNIT_ASSERT(xShape->getPropertyValue("ShadowColor") >>= nColor); CPPUNIT_ASSERT_EQUAL(static_cast(0xff0000), nColor); }; OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "table-shadow.pptx"; load(aURL); // Without the accompanying fix in place, this test would have failed, because shadow on a table // was lost on import. verify(getComponent()); uno::Reference xStorable(getComponent(), uno::UNO_QUERY); utl::MediaDescriptor aMediaDescriptor; aMediaDescriptor["FilterName"] <<= OUString("Impress Office Open XML"); utl::TempFile aTempFile; aTempFile.EnableKillingFile(); xStorable->storeToURL(aTempFile.GetURL(), aMediaDescriptor.getAsConstPropertyValueList()); getComponent()->dispose(); validate(aTempFile.GetFileName(), test::OOXML); getComponent() = loadFromDesktop(aTempFile.GetURL()); // Without the accompanying fix in place, this test would have failed, because shadow on a table // was lost on export. verify(getComponent()); } CPPUNIT_TEST_FIXTURE(OoxDrawingmlTest, testGroupShapeSmartArt) { // Given a file with a smartart inside a group shape: OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "smartart-groupshape.pptx"; // When loading that file: load(aURL); // Then make sure that the smartart is not just an empty group shape: uno::Reference xDrawPagesSupplier(getComponent(), uno::UNO_QUERY); uno::Reference xDrawPage(xDrawPagesSupplier->getDrawPages()->getByIndex(0), uno::UNO_QUERY); uno::Reference xGroup(xDrawPage->getByIndex(0), uno::UNO_QUERY); uno::Reference xSmartArt(xGroup->getByIndex(0), uno::UNO_QUERY); // Without the accompanying fix in place, this test would have failed, because we lost all // children of the group shape representing the smartart. CPPUNIT_ASSERT_GREATER(static_cast(0), xSmartArt->getCount()); } CPPUNIT_TEST_FIXTURE(OoxDrawingmlTest, testTdf142605_CurveSize) { // The document contains a Bezier curve, where the control points are outside the bounding // rectangle of the shape. Error was, that the export uses a path size which included the // control points. OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "tdf142605_CurveSize.odp"; loadAndReload(aURL, "Impress Office Open XML"); uno::Reference xDrawPagesSupplier(getComponent(), uno::UNO_QUERY); uno::Reference xDrawPage(xDrawPagesSupplier->getDrawPages()->getByIndex(0), uno::UNO_QUERY); uno::Reference xShape(xDrawPage->getByIndex(0), uno::UNO_QUERY); uno::Reference xShapeProps(xShape, uno::UNO_QUERY); css::awt::Rectangle aBoundRect; xShapeProps->getPropertyValue("BoundRect") >>= aBoundRect; // Without fix, size was 6262 x 3509, and position was 10037|6790. CPPUNIT_ASSERT_DOUBLES_EQUAL(sal_Int32(8601), aBoundRect.Width, 1); CPPUNIT_ASSERT_DOUBLES_EQUAL(sal_Int32(4601), aBoundRect.Height, 1); CPPUNIT_ASSERT_DOUBLES_EQUAL(sal_Int32(7699), aBoundRect.X, 1); CPPUNIT_ASSERT_DOUBLES_EQUAL(sal_Int32(5699), aBoundRect.Y, 1); } CPPUNIT_TEST_FIXTURE(OoxDrawingmlTest, testChartThemeOverride) { // Given a document with 2 slides, slide1 has a chart with a theme override and slide2 has a // shape: OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "chart-theme-override.pptx"; // When loading that document: load(aURL); // Then make sure that the slide 2 shape's text color is blue, not red: uno::Reference xDrawPagesSupplier(getComponent(), uno::UNO_QUERY); uno::Reference xDrawPage(xDrawPagesSupplier->getDrawPages()->getByIndex(1), uno::UNO_QUERY); uno::Reference xShape(xDrawPage->getByIndex(0), uno::UNO_QUERY); uno::Reference xText(xShape->getText(), uno::UNO_QUERY); uno::Reference xPara(xText->createEnumeration()->nextElement(), uno::UNO_QUERY); uno::Reference xPortion(xPara->createEnumeration()->nextElement(), uno::UNO_QUERY); sal_Int32 nActual{ 0 }; xPortion->getPropertyValue("CharColor") >>= nActual; // Without the accompanying fix in place, this test would have failed with: // - Expected: 4485828 (0x4472c4) // - Actual : 16711680 (0xff0000) // i.e. the text color was red, not blue. CPPUNIT_ASSERT_EQUAL(static_cast(0x4472C4), nActual); } CPPUNIT_TEST_FIXTURE(OoxDrawingmlTest, testPptxTheme) { // Given a PPTX file with a slide -> master slide -> theme: OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "theme.pptx"; // When importing the document: load(aURL); // Then make sure the theme + referring to that theme is imported: // Check the imported theme of the master page: uno::Reference xDrawPagesSupplier(getComponent(), uno::UNO_QUERY); uno::Reference xDrawPage( xDrawPagesSupplier->getDrawPages()->getByIndex(0), uno::UNO_QUERY); uno::Reference xMasterpage(xDrawPage->getMasterPage(), uno::UNO_QUERY); comphelper::SequenceAsHashMap aMap(xMasterpage->getPropertyValue("Theme")); CPPUNIT_ASSERT_EQUAL(OUString("Office Theme"), aMap["Name"].get()); // Without the accompanying fix in place, this test would have failed with: // - Cannot extract an Any(void) to string! // i.e. the name of the color scheme was lost on import. CPPUNIT_ASSERT_EQUAL(OUString("Office"), aMap["ColorSchemeName"].get()); // Check the last color in the color set, value is from ppt/theme/theme1.xml. // Without the accompanying fix in place, this test would have failed with: // - Cannot extract an Any(void) to []long! auto aColorScheme = aMap["ColorScheme"].get>(); CPPUNIT_ASSERT_EQUAL(static_cast(12), aColorScheme.getLength()); CPPUNIT_ASSERT_EQUAL(static_cast(0x954F72), aColorScheme[11]); // Check the reference to that theme: uno::Reference xDrawPageShapes(xDrawPage, uno::UNO_QUERY); uno::Reference xShape(xDrawPageShapes->getByIndex(0), uno::UNO_QUERY); uno::Reference xText(xShape->getText(), uno::UNO_QUERY); uno::Reference xPara(xText->createEnumeration()->nextElement(), uno::UNO_QUERY); uno::Reference xPortion(xPara->createEnumeration()->nextElement(), uno::UNO_QUERY); // 4 is accent1, see oox::drawingml::Color::getSchemeColorIndex(). CPPUNIT_ASSERT_EQUAL(static_cast(4), xPortion->getPropertyValue("CharColorTheme").get()); // 60000 in the file, just 100th vs 1000th percents. // Without the accompanying fix in place, this test would have failed with: // - Expected: 6000 // - Actual : 10000 // i.e. we had the default 100% value, not the value from the file. CPPUNIT_ASSERT_EQUAL(static_cast(6000), xPortion->getPropertyValue("CharColorLumMod").get()); // 40000 in the file, just 100th vs 1000th percents. // Without the accompanying fix in place, this test would have failed with: // - Expected: 4000 // - Actual : 0 // i.e. we had the default 0% value, not the value from the file. CPPUNIT_ASSERT_EQUAL(static_cast(4000), xPortion->getPropertyValue("CharColorLumOff").get()); } CPPUNIT_TEST_FIXTURE(OoxDrawingmlTest, testTdf132557_footerCustomShapes) { // slide with date, footer, slide number with custom shapes OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "testTdf132557_footerCustomShapes.pptx"; // When importing the document: load(aURL); uno::Reference xDrawPagesSupplier(getComponent(), uno::UNO_QUERY); uno::Reference xDrawPage(xDrawPagesSupplier->getDrawPages()->getByIndex(0), uno::UNO_QUERY); // Test if we were able to import the footer shapes with CustomShape service. uno::Reference xShapeDateTime(xDrawPage->getByIndex(0), uno::UNO_QUERY); CPPUNIT_ASSERT_EQUAL(OUString("com.sun.star.drawing.CustomShape"), xShapeDateTime->getShapeType()); // Without the accompanying fix in place, this test would have failed with: // An uncaught exception of type com.sun.star.lang.IndexOutOfBoundsException // i.e. the shape wasn't on the slide there since it was imported as a property, not a shape. uno::Reference xShapeFooter(xDrawPage->getByIndex(1), uno::UNO_QUERY); CPPUNIT_ASSERT_EQUAL(OUString("com.sun.star.drawing.CustomShape"), xShapeFooter->getShapeType()); uno::Reference xShapeSlideNum(xDrawPage->getByIndex(2), uno::UNO_QUERY); CPPUNIT_ASSERT_EQUAL(OUString("com.sun.star.drawing.CustomShape"), xShapeSlideNum->getShapeType()); } CPPUNIT_TEST_FIXTURE(OoxDrawingmlTest, testThemeTint) { // Given a document with a table style, using theme color with tinting in the A2 cell: OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "theme-tint.pptx"; // When loading that document: load(aURL); // Then make sure that we only import theming info to the doc model if the effects are limited // to lum mod / off that we can handle (i.e. no tint/shade): uno::Reference xDrawPagesSupplier(getComponent(), uno::UNO_QUERY); uno::Reference xDrawPage(xDrawPagesSupplier->getDrawPages()->getByIndex(0), uno::UNO_QUERY); uno::Reference xShape(xDrawPage->getByIndex(0), uno::UNO_QUERY); uno::Reference xTable; CPPUNIT_ASSERT(xShape->getPropertyValue("Model") >>= xTable); uno::Reference xA1(xTable->getCellByPosition(0, 0), uno::UNO_QUERY); sal_Int16 nFillColorTheme{}; CPPUNIT_ASSERT(xA1->getPropertyValue("FillColorTheme") >>= nFillColorTheme); // This is OK, no problematic effects: CPPUNIT_ASSERT_EQUAL(static_cast(4), nFillColorTheme); uno::Reference xA2(xTable->getCellByPosition(0, 1), uno::UNO_QUERY); CPPUNIT_ASSERT(xA2->getPropertyValue("FillColorTheme") >>= nFillColorTheme); // Without the accompanying fix in place, this test would have failed with: // - Expected: -1 // - Actual : 4 // i.e. we remembered the theme index, without being able to remember the tint effect, leading // to a bad background color. CPPUNIT_ASSERT_EQUAL(static_cast(-1), nFillColorTheme); } CPPUNIT_TEST_FIXTURE(OoxDrawingmlTest, testTdf113187ConstantArcTo) { OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "tdf113187_arcTo_withoutReferences.pptx"; load(aURL); // Get ViewBox of shape uno::Reference xDrawPagesSupplier(getComponent(), uno::UNO_QUERY); uno::Reference xDrawPage(xDrawPagesSupplier->getDrawPages()->getByIndex(0), uno::UNO_QUERY); uno::Reference xShape(xDrawPage->getByIndex(0), uno::UNO_QUERY); uno::Reference xShapeProps(xShape, uno::UNO_QUERY); uno::Sequence aGeoPropSeq; xShapeProps->getPropertyValue("CustomShapeGeometry") >>= aGeoPropSeq; comphelper::SequenceAsHashMap aGeoPropMap(aGeoPropSeq); // Without the fix width and height of the ViewBox were 0 and thus the shape was not shown. auto aViewBox = aGeoPropMap["ViewBox"].get(); CPPUNIT_ASSERT_EQUAL(sal_Int32(3600000), aViewBox.Width); CPPUNIT_ASSERT_EQUAL(sal_Int32(3600000), aViewBox.Height); } CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */