From c2fd8c4492e9eb12375f78ceb188c87d8fac41b7 Mon Sep 17 00:00:00 2001 From: Kohei Yoshida Date: Sat, 26 Jul 2014 23:07:47 -0400 Subject: [PATCH] bnc#885825: Write test for this. Originally it was a pptx document, but switched to docx because reloading an impress document in cppunit currently mysteriously crashes. Change-Id: I3e9ba6b9a4dc7d3c0ca1d59a073dc8a4cca4008c --- chart2/qa/extras/chart2export.cxx | 103 ++++++++++++++++++ .../extras/data/docx/data-label-borders.docx | Bin 0 -> 34843 bytes 2 files changed, 103 insertions(+) create mode 100755 chart2/qa/extras/data/docx/data-label-borders.docx diff --git a/chart2/qa/extras/chart2export.cxx b/chart2/qa/extras/chart2export.cxx index b92e5650338b..0c31f225efea 100644 --- a/chart2/qa/extras/chart2export.cxx +++ b/chart2/qa/extras/chart2export.cxx @@ -17,6 +17,7 @@ #include #include #include +#include #include #include @@ -68,6 +69,7 @@ public: void testFdo78290ScatterChartMarkerX(); void testFdo78290CombinationChartMarkerX(); void testAxisNumberFormatODS(); + void testDataLabelBordersDOCX(); CPPUNIT_TEST_SUITE(Chart2ExportTest); CPPUNIT_TEST(test); @@ -102,6 +104,7 @@ public: CPPUNIT_TEST(testFdo78290ScatterChartMarkerX); CPPUNIT_TEST(testFdo78290CombinationChartMarkerX); CPPUNIT_TEST(testAxisNumberFormatODS); + CPPUNIT_TEST(testDataLabelBordersDOCX); CPPUNIT_TEST_SUITE_END(); protected: @@ -688,6 +691,106 @@ void Chart2ExportTest::testAxisNumberFormatODS() aTest.check(xChartDoc); } +void Chart2ExportTest::testDataLabelBordersDOCX() +{ + struct Check + { + sal_Int32 mnIndex; + css::drawing::LineStyle meStyle; + sal_Int32 mnColor; + }; + + struct + { + /** + * Chart 1 has 4 bars of which 1st and 3rd have labels with borders + * around them. + */ + void checkObject1( const Reference& xChartDoc ) + { + CPPUNIT_ASSERT(xChartDoc.is()); + + Reference xDataSeries = getDataSeriesFromDoc(xChartDoc, 0); + CPPUNIT_ASSERT(xDataSeries.is()); + + // Check to make sure that data points 0 and 2 have local properties. + Reference xPropSet(xDataSeries, uno::UNO_QUERY); + CPPUNIT_ASSERT(xPropSet.is()); + + Sequence aIndices; + xPropSet->getPropertyValue("AttributedDataPoints") >>= aIndices; + CPPUNIT_ASSERT_MESSAGE("There should be 2 data points with local properties.", aIndices.getLength() == 2); + CPPUNIT_ASSERT(aIndices[0] == 0); + CPPUNIT_ASSERT(aIndices[1] == 2); + + const Check aDataPoints[] = + { + { 0, css::drawing::LineStyle_SOLID, 0x00FFFF00 }, // solid yellow + { 2, css::drawing::LineStyle_SOLID, 0x00FF0000 } // solid red + }; + + for (size_t i = 0, n = SAL_N_ELEMENTS(aDataPoints); i < n; ++i) + { + xPropSet = xDataSeries->getDataPointByIndex(aDataPoints[i].mnIndex); + CPPUNIT_ASSERT(xPropSet.is()); + + css::drawing::LineStyle eLineStyle = css::drawing::LineStyle_NONE; + xPropSet->getPropertyValue(CHART_UNONAME_LABEL_BORDER_STYLE) >>= eLineStyle; + CPPUNIT_ASSERT(eLineStyle == aDataPoints[i].meStyle); + + sal_Int32 nWidth = -1; + xPropSet->getPropertyValue(CHART_UNONAME_LABEL_BORDER_WIDTH) >>= nWidth; + CPPUNIT_ASSERT(nWidth > 0); + + sal_Int32 nColor = -1; + xPropSet->getPropertyValue(CHART_UNONAME_LABEL_BORDER_COLOR) >>= nColor; + CPPUNIT_ASSERT_MESSAGE("Border color is wrong.", nColor == aDataPoints[i].mnColor); + } + } + + /** + * Chart 2 has all its data labels with identical borders. + */ + void checkObject2( const Reference& xChartDoc ) + { + CPPUNIT_ASSERT(xChartDoc.is()); + + Reference xDataSeries = getDataSeriesFromDoc(xChartDoc, 0); + CPPUNIT_ASSERT(xDataSeries.is()); + + Reference xPropSet(xDataSeries, uno::UNO_QUERY); + CPPUNIT_ASSERT(xPropSet.is()); + + css::drawing::LineStyle eLineStyle = css::drawing::LineStyle_NONE; + xPropSet->getPropertyValue(CHART_UNONAME_LABEL_BORDER_STYLE) >>= eLineStyle; + CPPUNIT_ASSERT(eLineStyle == css::drawing::LineStyle_SOLID); + + sal_Int32 nWidth = -1; + xPropSet->getPropertyValue(CHART_UNONAME_LABEL_BORDER_WIDTH) >>= nWidth; + CPPUNIT_ASSERT(nWidth > 0); + + sal_Int32 nColor = -1; + xPropSet->getPropertyValue(CHART_UNONAME_LABEL_BORDER_COLOR) >>= nColor; + CPPUNIT_ASSERT_MESSAGE("Border color should be green.", nColor == 0x0000FF00); + } + + } aTest; + + load("/chart2/qa/extras/data/docx/", "data-label-borders.docx"); + + Reference xChartDoc(getChartDocFromWriter(0), uno::UNO_QUERY); + aTest.checkObject1(xChartDoc); + xChartDoc.set(getChartDocFromWriter(1), uno::UNO_QUERY); + aTest.checkObject2(xChartDoc); + + reload("Office Open XML Text"); + + xChartDoc.set(getChartDocFromWriter(0), uno::UNO_QUERY); + aTest.checkObject1(xChartDoc); + xChartDoc.set(getChartDocFromWriter(1), uno::UNO_QUERY); + aTest.checkObject2(xChartDoc); +} + void Chart2ExportTest::testBarChartRotation() { load ("/chart2/qa/extras/data/docx/", "barChartRotation.docx"); diff --git a/chart2/qa/extras/data/docx/data-label-borders.docx b/chart2/qa/extras/data/docx/data-label-borders.docx new file mode 100755 index 0000000000000000000000000000000000000000..6f2b94d98ee9aa9ce912ae93b5ae19c96ea53142 GIT binary patch literal 34843 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 W{xUp~J}e`UG|mFG=o}%t5&r>7!2~}5 literal 0 HcmV?d00001