diff options
Diffstat (limited to 'chart2/qa/extras/chart2import.cxx')
-rw-r--r-- | chart2/qa/extras/chart2import.cxx | 1707 |
1 files changed, 586 insertions, 1121 deletions
diff --git a/chart2/qa/extras/chart2import.cxx b/chart2/qa/extras/chart2import.cxx index 57c7227b49c1..02c00daed941 100644 --- a/chart2/qa/extras/chart2import.cxx +++ b/chart2/qa/extras/chart2import.cxx @@ -12,7 +12,6 @@ #include <com/sun/star/chart2/DataPointLabel.hpp> #include <com/sun/star/chart2/XDataPointCustomLabelField.hpp> #include <com/sun/star/chart2/DataPointCustomLabelFieldType.hpp> -#include <com/sun/star/chart2/RelativePosition.hpp> #include <com/sun/star/chart/ErrorBarStyle.hpp> #include <com/sun/star/chart2/XRegressionCurveContainer.hpp> #include <com/sun/star/chart2/XChartDocument.hpp> @@ -30,281 +29,35 @@ #include <com/sun/star/chart2/data/XTextualDataSequence.hpp> #include <com/sun/star/chart/DataLabelPlacement.hpp> #include <com/sun/star/text/XTextRange.hpp> +#include <com/sun/star/qa/XDumper.hpp> #include <iterator> #include <com/sun/star/util/Color.hpp> -#include <com/sun/star/awt/Gradient.hpp> +#include <com/sun/star/awt/Gradient2.hpp> #include <com/sun/star/lang/XMultiServiceFactory.hpp> +#include <docmodel/uno/UnoGradientTools.hxx> +namespace +{ class Chart2ImportTest : public ChartTest { public: - void Fdo60083(); - void testSteppedLines(); - void testErrorBarRange(); - void testErrorBarFormatting(); - void testODSChartSeries(); - void testXLSXChartSeries(); - void testXLSChartSeries(); - void testODTChartSeries(); - void testDOCChartSeries(); - void testDOCXChartSeries(); - void testDOCXChartEmptySeries(); - void testDOCXChartValuesSize(); - void testPPTXChartSeries(); - void testPPTXSparseChartSeries(); - /** - * Original data contains 3 series but 2 of them are hidden. For now, we - * detect and skip those hidden series on import (since we don't support - * hidden columns for internal data table yet). - */ - void testPPTXHiddenDataSeries(); - void testPPTXPercentageNumberFormats(); - void testPieChartLabelsNumFormat(); - void testPPTXStackedNonStackedYAxis(); - void testPPTChartSeries(); - void testODPChartSeries(); - void testBnc864396(); - void testBnc882383(); - void testTransparancyGradientValue(); - void testBnc889755(); - void testSimpleStrictXLSX(); - void testDelayedCellImport(); // chart range referencing content on later sheets - void testFlatODSStackedColumnChart(); - void testFdo78080(); - void testFdo54361(); - void testFdo54361_1(); - void testTdf127811(); - void testTdf86624(); // manually placed legends - void testTdf105517(); - void testTdf106217(); - void testTdf108021(); - void testTdf100084(); - void testTdf124817(); - void testTdf126033(); - void testAutoBackgroundXLSX(); - void testAutoChartAreaBorderPropXLSX(); - void testChartAreaStyleBackgroundXLSX(); - void testChartHatchFillXLSX(); - void testAxisTextRotationXLSX(); - // void testTextCanOverlapXLSX(); // TODO : temporarily disabled. - void testTextBreakXLSX(); - void testNumberFormatsXLSX(); - void testNumberFormatsDOCX(); - void testPercentageNumberFormatsDOCX(); - - void testTransparentBackground(OUString const & filename); - - // below are OOXML default value tests for cases - // where we fixed the handling of MSO 2007 vs OOXML - void testAutoTitleDelDefaultValue2007XLSX(); - void testAutoTitleDelDefaultValue2013XLSX(); - void testDispBlanksAsDefaultValue2007XLSX(); - void testDispBlanksAsDefaultValue2013XLSX(); - - void testSmoothDefaultValue2007XLSX(); - void testSmoothDefaultValue2013XLSX(); - void testTrendlineDefaultValue2007XLSX(); - void testTrendlineDefaultValue2013XLSX(); - void testVaryColorDefaultValues2007XLSX(); - void testVaryColorDefaultValues2013XLSX(); - void testPlotVisOnlyDefaultValue2013XLSX(); - void testRAngAxDefaultValue2013XLSX(); - void testMajorTickMarksDefaultValue2013XLSX(); - void testMinorTickMarksDefaultValue2013XLSX(); - - void testAxisTitleDefaultRotationXLSX(); - void testSecondaryAxisTitleDefaultRotationXLSX(); - void testAxisTitleRotationXLSX(); - void testAxisTitlePositionDOCX(); - void testCombinedChartAttachedAxisXLSX(); - - void testTdf90510(); // Pie chart label placement settings(XLS) - void testTdf109858(); // Pie chart label placement settings(XLSX) - void testTdf130105(); - - void testTdf111173(); - void testTdf122226(); - - void testInternalDataProvider(); - - void testTdf115107(); // import complex data point labels - void testTdf115107_2(); // import complex data point labels in cobo charts with multiple data series - - void testTdf116163(); - - void testTdf48041(); - - void testTdf121205(); - - void testTdf114179(); - void testTdf124243(); - void testTdf127393(); - void testTdf128733(); - void testTdf128432(); - void testTdf128627(); - void testTdf128634(); - void testTdf130657(); - void testDeletedDataLabel(); - void testDataPointInheritedColorDOCX(); - void testExternalStrRefsXLSX(); - void testSourceNumberFormatComplexCategoriesXLS(); - void testSimpleCategoryAxis(); - void testMultilevelCategoryAxis(); - void testXaxisValues(); - void testTdf123504(); - void testTdf122765(); - void testTdf123206CustomLabelField(); - void testTdf125444PercentageCustomLabel(); - void testDataPointLabelCustomPos(); - void testTdf130032(); - void testTdf134978(); - void testTdf119138MissingAutoTitleDeleted(); - void testStockChartShiftedCategoryPosition(); - void testTdf133376(); - void testTdf134225(); - void testTdf136105(); - void testTdf91250(); - void testTdf134111(); - void testTdf136752(); - void testTdf137505(); - void testTdf137734(); - void testTdf137874(); - void testTdfCustomShapePos(); - void testTdf121281(); - - CPPUNIT_TEST_SUITE(Chart2ImportTest); - CPPUNIT_TEST(Fdo60083); - CPPUNIT_TEST(testSteppedLines); - CPPUNIT_TEST(testErrorBarRange); - CPPUNIT_TEST(testErrorBarFormatting); - CPPUNIT_TEST(testODSChartSeries); - CPPUNIT_TEST(testXLSXChartSeries); - CPPUNIT_TEST(testXLSChartSeries); - CPPUNIT_TEST(testODTChartSeries); - CPPUNIT_TEST(testDOCChartSeries); - CPPUNIT_TEST(testDOCXChartSeries); - CPPUNIT_TEST(testDOCXChartEmptySeries); - CPPUNIT_TEST(testDOCXChartValuesSize); - CPPUNIT_TEST(testPPTChartSeries); - CPPUNIT_TEST(testPPTXChartSeries); - CPPUNIT_TEST(testPPTXSparseChartSeries); - CPPUNIT_TEST(testPPTXHiddenDataSeries); - CPPUNIT_TEST(testPPTXPercentageNumberFormats); - CPPUNIT_TEST(testPieChartLabelsNumFormat); - CPPUNIT_TEST(testPPTXStackedNonStackedYAxis); - CPPUNIT_TEST(testODPChartSeries); - CPPUNIT_TEST(testBnc864396); - CPPUNIT_TEST(testBnc882383); - CPPUNIT_TEST(testTransparancyGradientValue); - CPPUNIT_TEST(testBnc889755); - CPPUNIT_TEST(testSimpleStrictXLSX); - CPPUNIT_TEST(testDelayedCellImport); - CPPUNIT_TEST(testFlatODSStackedColumnChart); - CPPUNIT_TEST(testFdo78080); - CPPUNIT_TEST(testFdo54361); - CPPUNIT_TEST(testFdo54361_1); - CPPUNIT_TEST(testTdf127811); - CPPUNIT_TEST(testTdf86624); - CPPUNIT_TEST(testTdf105517); - CPPUNIT_TEST(testTdf106217); - CPPUNIT_TEST(testTdf108021); - CPPUNIT_TEST(testTdf100084); - CPPUNIT_TEST(testTdf124817); - CPPUNIT_TEST(testTdf126033); - CPPUNIT_TEST(testAutoBackgroundXLSX); - CPPUNIT_TEST(testAutoChartAreaBorderPropXLSX); - CPPUNIT_TEST(testChartAreaStyleBackgroundXLSX); - CPPUNIT_TEST(testChartHatchFillXLSX); - CPPUNIT_TEST(testAxisTextRotationXLSX); - // CPPUNIT_TEST(testTextCanOverlapXLSX); // TODO : temporarily disabled. - CPPUNIT_TEST(testTextBreakXLSX); - CPPUNIT_TEST(testNumberFormatsXLSX); - CPPUNIT_TEST(testNumberFormatsDOCX); - CPPUNIT_TEST(testPercentageNumberFormatsDOCX); - CPPUNIT_TEST(testAutoTitleDelDefaultValue2007XLSX); - CPPUNIT_TEST(testAutoTitleDelDefaultValue2013XLSX); - CPPUNIT_TEST(testDispBlanksAsDefaultValue2007XLSX); - CPPUNIT_TEST(testDispBlanksAsDefaultValue2013XLSX); - CPPUNIT_TEST(testSmoothDefaultValue2007XLSX); - CPPUNIT_TEST(testSmoothDefaultValue2013XLSX); - CPPUNIT_TEST(testTrendlineDefaultValue2007XLSX); - CPPUNIT_TEST(testTrendlineDefaultValue2013XLSX); - CPPUNIT_TEST(testVaryColorDefaultValues2007XLSX); - CPPUNIT_TEST(testVaryColorDefaultValues2013XLSX); - CPPUNIT_TEST(testPlotVisOnlyDefaultValue2013XLSX); - CPPUNIT_TEST(testRAngAxDefaultValue2013XLSX); - CPPUNIT_TEST(testMajorTickMarksDefaultValue2013XLSX); - CPPUNIT_TEST(testMinorTickMarksDefaultValue2013XLSX); - CPPUNIT_TEST(testAxisTitleDefaultRotationXLSX); - CPPUNIT_TEST(testSecondaryAxisTitleDefaultRotationXLSX); - CPPUNIT_TEST(testAxisTitleRotationXLSX); - CPPUNIT_TEST(testAxisTitlePositionDOCX); - CPPUNIT_TEST(testCombinedChartAttachedAxisXLSX); - CPPUNIT_TEST(testTdf90510); - CPPUNIT_TEST(testTdf109858); - CPPUNIT_TEST(testTdf130105); - CPPUNIT_TEST(testTdf111173); - CPPUNIT_TEST(testTdf122226); - - CPPUNIT_TEST(testInternalDataProvider); - - CPPUNIT_TEST(testTdf115107); - CPPUNIT_TEST(testTdf115107_2); - - CPPUNIT_TEST(testTdf116163); - - CPPUNIT_TEST(testTdf48041); - - CPPUNIT_TEST(testTdf121205); - - CPPUNIT_TEST(testTdf114179); - CPPUNIT_TEST(testTdf124243); - CPPUNIT_TEST(testTdf127393); - CPPUNIT_TEST(testTdf128733); - CPPUNIT_TEST(testTdf128432); - CPPUNIT_TEST(testTdf128627); - CPPUNIT_TEST(testTdf128634); - CPPUNIT_TEST(testTdf130657); - CPPUNIT_TEST(testDeletedDataLabel); - CPPUNIT_TEST(testDataPointInheritedColorDOCX); - CPPUNIT_TEST(testExternalStrRefsXLSX); - CPPUNIT_TEST(testSourceNumberFormatComplexCategoriesXLS); - CPPUNIT_TEST(testSimpleCategoryAxis); - CPPUNIT_TEST(testMultilevelCategoryAxis); - CPPUNIT_TEST(testXaxisValues); - CPPUNIT_TEST(testTdf123504); - CPPUNIT_TEST(testTdf122765); - CPPUNIT_TEST(testTdf123206CustomLabelField); - CPPUNIT_TEST(testTdf125444PercentageCustomLabel); - CPPUNIT_TEST(testDataPointLabelCustomPos); - CPPUNIT_TEST(testTdf130032); - CPPUNIT_TEST(testTdf134978); - CPPUNIT_TEST(testTdf119138MissingAutoTitleDeleted); - CPPUNIT_TEST(testStockChartShiftedCategoryPosition); - CPPUNIT_TEST(testTdf133376); - CPPUNIT_TEST(testTdf134225); - CPPUNIT_TEST(testTdf136105); - CPPUNIT_TEST(testTdf91250); - CPPUNIT_TEST(testTdf134111); - CPPUNIT_TEST(testTdf136752); - CPPUNIT_TEST(testTdf137505); - CPPUNIT_TEST(testTdf137734); - CPPUNIT_TEST(testTdf137874); - CPPUNIT_TEST(testTdfCustomShapePos); - CPPUNIT_TEST(testTdf121281); - - CPPUNIT_TEST_SUITE_END(); - -private: + Chart2ImportTest() : ChartTest("/chart2/qa/extras/data/") {} +protected: + void testTransparentBackground(std::u16string_view filename); }; +OUString getShapeDump(css::uno::Reference<css::chart::XChartDocument> const& doc) +{ + return css::uno::Reference<css::qa::XDumper>(doc, css::uno::UNO_QUERY_THROW)->dump("shapes"); +} + // error bar import // split method up into smaller chunks for more detailed tests -void Chart2ImportTest::Fdo60083() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testFdo60083) { - load(u"/chart2/qa/extras/data/ods/", "fdo60083.ods"); + loadFromFile(u"ods/fdo60083.ods"); uno::Reference< chart2::XChartDocument > xChartDoc = getChartDocFromSheet( 0, mxComponent ); CPPUNIT_ASSERT(xChartDoc.is()); @@ -351,9 +104,9 @@ void Chart2ImportTest::Fdo60083() CPPUNIT_ASSERT(!xErrorBarXProps.is()); } -void Chart2ImportTest::testErrorBarRange() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testErrorBarRange) { - load(u"/chart2/qa/extras/data/ods/", "error_bar_range.ods"); + loadFromFile(u"ods/error_bar_range.ods"); uno::Reference< chart2::XChartDocument > xChartDoc = getChartDocFromSheet( 0, mxComponent ); CPPUNIT_ASSERT(xChartDoc.is()); @@ -380,9 +133,9 @@ void Chart2ImportTest::testErrorBarRange() CPPUNIT_ASSERT_EQUAL(OUString("$Sheet1.$C$2:$C$4"), aRangePos); } -void Chart2ImportTest::testErrorBarFormatting() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testErrorBarFormatting) { - load(u"/chart2/qa/extras/data/ods/", "error_bar_properties.ods"); + loadFromFile(u"ods/error_bar_properties.ods"); uno::Reference< chart2::XChartDocument > xChartDoc = getChartDocFromSheet( 0, mxComponent ); CPPUNIT_ASSERT(xChartDoc.is()); @@ -403,7 +156,7 @@ void Chart2ImportTest::testErrorBarFormatting() } // stepped line interpolation -void Chart2ImportTest::testSteppedLines() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testSteppedLines) { const sal_Int32 MAXSHEET = 14; chart2::CurveStyle const curveStyle[] = { @@ -423,7 +176,7 @@ void Chart2ImportTest::testSteppedLines() chart2::CurveStyle_STEP_CENTER_Y }; - load(u"/chart2/qa/extras/data/ods/", "stepped_lines.ods"); + loadFromFile(u"ods/stepped_lines.ods"); for(sal_Int32 nSheet = 0; nSheet < MAXSHEET; ++nSheet) { uno::Reference< chart2::XChartDocument > xChart2Doc = getChartDocFromSheet( nSheet, mxComponent ); @@ -441,7 +194,7 @@ void Chart2ImportTest::testSteppedLines() } } -static uno::Sequence < OUString > getChartColumnDescriptions( uno::Reference< chart::XChartDocument > const & xChart1Doc) +uno::Sequence < OUString > getChartColumnDescriptions( uno::Reference< chart::XChartDocument > const & xChart1Doc) { CPPUNIT_ASSERT(xChart1Doc.is()); uno::Reference< chart::XChartDataArray > xChartData ( xChart1Doc->getData(), UNO_QUERY_THROW); @@ -449,10 +202,10 @@ static uno::Sequence < OUString > getChartColumnDescriptions( uno::Reference< ch return seriesList; } -void Chart2ImportTest::testODSChartSeries() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testODSChartSeries) { - load(u"/chart2/qa/extras/data/ods/", "chart.ods"); - uno::Reference< chart::XChartDocument > xChart1Doc ( getChartCompFromSheet( 0, mxComponent ), UNO_QUERY_THROW); + loadFromFile(u"ods/chart.ods"); + uno::Reference< chart::XChartDocument > xChart1Doc ( getChartCompFromSheet( 0, 0, mxComponent ), UNO_QUERY_THROW); uno::Sequence < OUString > seriesList = getChartColumnDescriptions( xChart1Doc); CPPUNIT_ASSERT_EQUAL(OUString("Col 1"), seriesList[0]); CPPUNIT_ASSERT_EQUAL(OUString("Col2"), seriesList[1]); @@ -460,10 +213,10 @@ void Chart2ImportTest::testODSChartSeries() } -void Chart2ImportTest::testXLSXChartSeries() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testXLSXChartSeries) { - load(u"/chart2/qa/extras/data/xlsx/", "chart.xlsx"); - uno::Reference< chart::XChartDocument > xChart1Doc ( getChartCompFromSheet( 0, mxComponent ), UNO_QUERY_THROW); + loadFromFile(u"xlsx/chart.xlsx"); + uno::Reference< chart::XChartDocument > xChart1Doc ( getChartCompFromSheet( 0, 0, mxComponent ), UNO_QUERY_THROW); uno::Sequence < OUString > seriesList = getChartColumnDescriptions(xChart1Doc ); CPPUNIT_ASSERT_EQUAL(OUString("Col 1"), seriesList[0]); CPPUNIT_ASSERT_EQUAL(OUString("Col2"), seriesList[1]); @@ -471,10 +224,10 @@ void Chart2ImportTest::testXLSXChartSeries() } -void Chart2ImportTest::testXLSChartSeries() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testXLSChartSeries) { - load(u"/chart2/qa/extras/data/xls/", "chart.xls"); - uno::Reference< chart::XChartDocument > xChart1Doc ( getChartCompFromSheet( 0, mxComponent ), UNO_QUERY_THROW); + loadFromFile(u"xls/chart.xls"); + uno::Reference< chart::XChartDocument > xChart1Doc ( getChartCompFromSheet( 0, 0, mxComponent ), UNO_QUERY_THROW); uno::Sequence < OUString > seriesList = getChartColumnDescriptions(xChart1Doc ); CPPUNIT_ASSERT_EQUAL(OUString("Col 1"), seriesList[0]); CPPUNIT_ASSERT_EQUAL(OUString("Col 2"), seriesList[1]); @@ -482,9 +235,9 @@ void Chart2ImportTest::testXLSChartSeries() } -void Chart2ImportTest::testODTChartSeries() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testODTChartSeries) { - load(u"/chart2/qa/extras/data/odt/", "chart.odt"); + loadFromFile(u"odt/chart.odt"); uno::Sequence< OUString > seriesList = getWriterChartColumnDescriptions(mxComponent); CPPUNIT_ASSERT_EQUAL(OUString("Column 1"), seriesList[0]); CPPUNIT_ASSERT_EQUAL(OUString("Column 2"), seriesList[1]); @@ -492,18 +245,18 @@ void Chart2ImportTest::testODTChartSeries() } -void Chart2ImportTest::testDOCChartSeries() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testDOCChartSeries) { - load(u"/chart2/qa/extras/data/doc/", "chart.doc"); + loadFromFile(u"doc/chart.doc"); uno::Sequence< OUString > seriesList = getWriterChartColumnDescriptions(mxComponent); CPPUNIT_ASSERT_EQUAL(OUString("Column 1"), seriesList[0]); CPPUNIT_ASSERT_EQUAL(OUString("Column 2"), seriesList[1]); CPPUNIT_ASSERT_EQUAL(OUString("Column 3"), seriesList[2]); } -void Chart2ImportTest::testDOCXChartSeries() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testDOCXChartSeries) { - load(u"/chart2/qa/extras/data/docx/", "chart.docx"); + loadFromFile(u"docx/chart.docx"); Reference<chart2::XChartDocument> xChartDoc(getChartDocFromWriter(0), uno::UNO_QUERY); CPPUNIT_ASSERT(xChartDoc.is()); @@ -517,9 +270,9 @@ void Chart2ImportTest::testDOCXChartSeries() CPPUNIT_ASSERT_EQUAL(OUString("Series 3"), aLabels[2][0].get<OUString>()); } -void Chart2ImportTest::testDOCXChartEmptySeries() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testDOCXChartEmptySeries) { - load(u"/chart2/qa/extras/data/docx/", "tdf125337.docx"); + loadFromFile(u"docx/tdf125337.docx"); Reference<chart2::XChartDocument> xChartDoc(getChartDocFromWriter(0), uno::UNO_QUERY); CPPUNIT_ASSERT(xChartDoc.is()); @@ -543,9 +296,39 @@ void Chart2ImportTest::testDOCXChartEmptySeries() CPPUNIT_ASSERT(std::isnan(aValues[2][1])); } -void Chart2ImportTest::testDOCXChartValuesSize() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testTdf81396) { - load( u"/chart2/qa/extras/data/docx/", "bubblechart.docx" ); + loadFromFile(u"xlsx/tdf81396.xlsx"); + Reference<chart::XChartDocument> xChartDoc(getChartDocFromSheet(0, mxComponent), + UNO_QUERY_THROW); + + Reference<chart2::XChartDocument> xChartDoc2(xChartDoc, UNO_QUERY_THROW); + Reference<chart2::XChartType> xChartType(getChartTypeFromDoc(xChartDoc2, 0), UNO_SET_THROW); + std::vector aDataSeriesYValues = getDataSeriesYValuesFromChartType(xChartType); + CPPUNIT_ASSERT_EQUAL(size_t(1), aDataSeriesYValues.size()); + + // Without the fix in place, this test would have failed with + // - Expected: 105.210801910481 + // - Actual : nan + CPPUNIT_ASSERT_EQUAL(105.210801910481, aDataSeriesYValues[0][0]); +} + +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testPPTXChartErrorBars) +{ + loadFromFile(u"pptx/tdf127720.pptx"); + Reference<chart2::XChartDocument> xChartDoc(getChartDocFromDrawImpress(0, 0), uno::UNO_QUERY); + CPPUNIT_ASSERT(xChartDoc.is()); + + uno::Reference< chart::XChartDataArray > xDataArray(xChartDoc->getDataProvider(), UNO_QUERY_THROW); + Sequence<OUString> aColumnDesc = xDataArray->getColumnDescriptions(); + // Number of columns = 4 (Y-values, X-values and positive/negative error bars). + // Without the fix there would only be 2 columns (no error range). + CPPUNIT_ASSERT_EQUAL_MESSAGE("There must be 4 columns and descriptions", static_cast<sal_Int32>(4), aColumnDesc.getLength()); +} + +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testDOCXChartValuesSize) +{ + loadFromFile(u"docx/bubblechart.docx" ); Reference<chart2::XChartDocument> xChartDoc( getChartDocFromWriter(0), uno::UNO_QUERY ); CPPUNIT_ASSERT( xChartDoc.is() ); @@ -564,10 +347,11 @@ void Chart2ImportTest::testDOCXChartValuesSize() CPPUNIT_ASSERT_DOUBLES_EQUAL( aExpected[nRowIdx][nColIdx], aData[nRowIdx][nColIdx], 1e-1 ); } -void Chart2ImportTest::testPPTChartSeries() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testPPTChartSeries) { //test chart series names for ppt - uno::Sequence < OUString > seriesList = getImpressChartColumnDescriptions(u"/chart2/qa/extras/data/ppt/", "chart.ppt"); + loadFromFile(u"ppt/chart.ppt"); + uno::Sequence < OUString > seriesList = getImpressChartColumnDescriptions(0, 0); CPPUNIT_ASSERT_EQUAL(OUString("Column 1"), seriesList[0]); CPPUNIT_ASSERT_EQUAL(OUString("Column 2"), seriesList[1]); @@ -575,10 +359,10 @@ void Chart2ImportTest::testPPTChartSeries() } -void Chart2ImportTest::testPPTXChartSeries() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testPPTXChartSeries) { //test chart series names for pptx - load(u"/chart2/qa/extras/data/pptx/", "chart.pptx"); + loadFromFile(u"pptx/chart.pptx"); Reference<chart2::XChartDocument> xChartDoc(getChartDocFromDrawImpress(0, 0), uno::UNO_QUERY); CPPUNIT_ASSERT(xChartDoc.is()); @@ -592,10 +376,10 @@ void Chart2ImportTest::testPPTXChartSeries() CPPUNIT_ASSERT_EQUAL(OUString("Column 3"), aLabels[2][0].get<OUString>()); } -void Chart2ImportTest::testPPTXSparseChartSeries() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testPPTXSparseChartSeries) { //test chart series sparse data for pptx - load(u"/chart2/qa/extras/data/pptx/", "sparse-chart.pptx"); + loadFromFile(u"pptx/sparse-chart.pptx"); Reference<chart2::XChartDocument> xChartDoc(getChartDocFromDrawImpress(0, 0), uno::UNO_QUERY); CPPUNIT_ASSERT(xChartDoc.is()); @@ -614,9 +398,14 @@ void Chart2ImportTest::testPPTXSparseChartSeries() CPPUNIT_ASSERT_EQUAL(-2.8, aValues[1][3]); } -void Chart2ImportTest::testPPTXHiddenDataSeries() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testPPTXHiddenDataSeries) { - load(u"/chart2/qa/extras/data/pptx/", "stacked-bar-chart-hidden-series.pptx"); + /** + * Original data contains 3 series but 2 of them are hidden. For now, we + * detect and skip those hidden series on import (since we don't support + * hidden columns for internal data table yet). + */ + loadFromFile(u"pptx/stacked-bar-chart-hidden-series.pptx"); Reference<chart2::XChartDocument> xChartDoc(getChartDocFromDrawImpress(0, 0), uno::UNO_QUERY); CPPUNIT_ASSERT(xChartDoc.is()); @@ -653,9 +442,9 @@ void Chart2ImportTest::testPPTXHiddenDataSeries() CPPUNIT_ASSERT_EQUAL(OUString("Category 4"), aCategories[3][0]); } -void Chart2ImportTest::testPPTXPercentageNumberFormats() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testPPTXPercentageNumberFormats) { - load(u"/chart2/qa/extras/data/pptx/", "percentage-number-formats.pptx"); + loadFromFile(u"pptx/percentage-number-formats.pptx"); // 1st chart Reference<chart2::XChartDocument> xChartDoc(getChartDocFromDrawImpress(0, 0), uno::UNO_QUERY); @@ -707,7 +496,8 @@ void Chart2ImportTest::testPPTXPercentageNumberFormats() Reference<beans::XPropertySet> xPS(xYAxis, uno::UNO_QUERY_THROW); bool bLinkNumberFormatToSource = true; bool bSuccess = xPS->getPropertyValue(CHART_UNONAME_LINK_TO_SRC_NUMFMT) >>= bLinkNumberFormatToSource; - CPPUNIT_ASSERT_MESSAGE("\"LinkNumberFormatToSource\" should be set to false.", bSuccess && !bLinkNumberFormatToSource); + CPPUNIT_ASSERT_MESSAGE("\"LinkNumberFormatToSource\" should be set to false.", bSuccess); + CPPUNIT_ASSERT_MESSAGE("\"LinkNumberFormatToSource\" should be set to false.", !bLinkNumberFormatToSource); // FIXME: This should be in fact "0.00%". // see TODO in oox/source/drawingml/chart/modelbase.cxx @@ -718,10 +508,10 @@ void Chart2ImportTest::testPPTXPercentageNumberFormats() CPPUNIT_ASSERT_MESSAGE("Y axis should be a percent format.", (nType & util::NumberFormat::PERCENT)); } -void Chart2ImportTest::testPieChartLabelsNumFormat() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testPieChartLabelsNumFormat) { - load(u"/chart2/qa/extras/data/xlsx/", "tdfPieNumFormat.xlsx"); - uno::Reference< chart::XChartDocument > xChartDoc(getChartCompFromSheet(0, mxComponent), UNO_QUERY_THROW); + loadFromFile(u"xlsx/tdfPieNumFormat.xlsx"); + uno::Reference< chart::XChartDocument > xChartDoc(getChartCompFromSheet(0, 0, mxComponent), UNO_QUERY_THROW); CPPUNIT_ASSERT(xChartDoc.is()); // test data point labels format Reference<beans::XPropertySet> xDataPointPropSet(xChartDoc->getDiagram()->getDataPointProperties(0, 0), uno::UNO_SET_THROW); @@ -730,9 +520,9 @@ void Chart2ImportTest::testPieChartLabelsNumFormat() CPPUNIT_ASSERT_EQUAL(sal_True, aLabel.ShowNumber); } -void Chart2ImportTest::testPPTXStackedNonStackedYAxis() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testPPTXStackedNonStackedYAxis) { - load(u"/chart2/qa/extras/data/pptx/", "stacked-non-stacked-mix-y-axis.pptx"); + loadFromFile(u"pptx/stacked-non-stacked-mix-y-axis.pptx"); // 1st chart is a normal stacked column. Reference<chart2::XChartDocument> xChartDoc(getChartDocFromDrawImpress(0, 0), uno::UNO_QUERY); @@ -789,19 +579,21 @@ void Chart2ImportTest::testPPTXStackedNonStackedYAxis() CPPUNIT_ASSERT_MESSAGE("Y axis should NOT be a percent format.", !(nType & util::NumberFormat::PERCENT)); } -void Chart2ImportTest::testODPChartSeries() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testODPChartSeries) { //test chart series names for odp - uno::Sequence < OUString > seriesList = getImpressChartColumnDescriptions(u"/chart2/qa/extras/data/odp/", "chart.odp"); + loadFromFile(u"odp/chart.odp"); + uno::Sequence < OUString > seriesList = getImpressChartColumnDescriptions(0, 0); CPPUNIT_ASSERT_EQUAL(OUString("Column 1"), seriesList[0]); CPPUNIT_ASSERT_EQUAL(OUString("Column 2"), seriesList[1]); CPPUNIT_ASSERT_EQUAL(OUString("Column 3"), seriesList[2]); } -void Chart2ImportTest::testBnc864396() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testBnc864396) { - uno::Reference< chart2::XChartDocument > xChartDoc(getChartDocFromImpress(u"/chart2/qa/extras/data/pptx/", "bnc864396.pptx"), uno::UNO_QUERY_THROW); + loadFromFile(u"pptx/bnc864396.pptx"); + uno::Reference< chart2::XChartDocument > xChartDoc(getChartDocFromDrawImpress(0,0), uno::UNO_QUERY_THROW); CPPUNIT_ASSERT(xChartDoc->hasInternalDataProvider()); uno::Reference< chart2::XInternalDataProvider > xDataProvider( xChartDoc->getDataProvider(), uno::UNO_QUERY_THROW ); @@ -814,37 +606,50 @@ void Chart2ImportTest::testBnc864396() } } -void Chart2ImportTest::testBnc889755() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testBnc889755) { - load(u"/chart2/qa/extras/data/pptx/", "bnc889755.pptx"); - uno::Reference<chart2::XChartDocument> xChartDoc(getChartDocFromDrawImpress(0, 6), uno::UNO_QUERY_THROW); + loadFromFile(u"pptx/bnc889755.pptx"); + uno::Reference<chart2::XChartDocument> xChartDoc(getChartDocFromDrawImpress(0, 5), uno::UNO_QUERY_THROW); CPPUNIT_ASSERT(xChartDoc->hasInternalDataProvider()); - uno::Reference< chart2::XInternalDataProvider > xDataProvider( xChartDoc->getDataProvider(), uno::UNO_QUERY_THROW ); - uno::Reference< chart::XChartDataArray > xChartDataArray(xDataProvider, uno::UNO_QUERY_THROW); - uno::Sequence< OUString > aRowLabels = xChartDataArray->getRowDescriptions(); - CPPUNIT_ASSERT_EQUAL(sal_Int32(16), aRowLabels.getLength()); - CPPUNIT_ASSERT_EQUAL(OUString("Oct-12"), aRowLabels[0]); - CPPUNIT_ASSERT_EQUAL(OUString("Nov-12"), aRowLabels[1]); - CPPUNIT_ASSERT_EQUAL(OUString("Dec-12"), aRowLabels[2]); - CPPUNIT_ASSERT_EQUAL(OUString("Jan-13"), aRowLabels[3]); - CPPUNIT_ASSERT_EQUAL(OUString("Feb-13"), aRowLabels[4]); - CPPUNIT_ASSERT_EQUAL(OUString("Mar-13"), aRowLabels[5]); - CPPUNIT_ASSERT_EQUAL(OUString("Apr-13"), aRowLabels[6]); - CPPUNIT_ASSERT_EQUAL(OUString("May-13"), aRowLabels[7]); - CPPUNIT_ASSERT_EQUAL(OUString("Jun-13"), aRowLabels[8]); - CPPUNIT_ASSERT_EQUAL(OUString("Jul-13"), aRowLabels[9]); - CPPUNIT_ASSERT_EQUAL(OUString("Aug-13"), aRowLabels[10]); - CPPUNIT_ASSERT_EQUAL(OUString("Sep-13"), aRowLabels[11]); - CPPUNIT_ASSERT_EQUAL(OUString("Oct-13"), aRowLabels[12]); - CPPUNIT_ASSERT_EQUAL(OUString("Nov-13"), aRowLabels[13]); - CPPUNIT_ASSERT_EQUAL(OUString("Dec-13"), aRowLabels[14]); - CPPUNIT_ASSERT_EQUAL(OUString("Jan-14"), aRowLabels[15]); -} - -void Chart2ImportTest::testBnc882383() -{ - load(u"/chart2/qa/extras/data/pptx/", "bnc882383.pptx"); + constexpr sal_Int32 nNumCategories = 16; + Sequence<OUString> aDateSeq = getFormattedDateCategories(xChartDoc); + + CPPUNIT_ASSERT_EQUAL(nNumCategories, aDateSeq.getLength()); + + const OUString aExpectedDateCategories[nNumCategories] = { + "Oct-12", "Nov-12", "Dec-12", "Jan-13", + "Feb-13", "Mar-13", "Apr-13", "May-13", + "Jun-13", "Jul-13", "Aug-13", "Sep-13", + "Oct-13", "Nov-13", "Dec-13", "Jan-14", + }; + + for (size_t nIdx = 0; nIdx < nNumCategories; ++nIdx) + CPPUNIT_ASSERT_EQUAL(aExpectedDateCategories[nIdx], aDateSeq[nIdx]); + + //tdf#139940 - the title's gradient was lost and was filled with solid blue, instead of a "blue underline". + uno::Reference<drawing::XDrawPagesSupplier> xDoc(mxComponent, uno::UNO_QUERY_THROW); + uno::Reference<drawing::XDrawPage> xPage(xDoc->getDrawPages()->getByIndex(0), uno::UNO_QUERY_THROW); + + // Shape "Title 3" + // MCGR: Use the whole completely imported transparency gradient to check for correctness + uno::Reference<beans::XPropertySet> xShapeProps(xPage->getByIndex(4), uno::UNO_QUERY_THROW); + awt::Gradient2 aTransparence; + xShapeProps->getPropertyValue("FillTransparenceGradient") >>= aTransparence; + const basegfx::BColorStops aColorStops = model::gradient::getColorStopsFromUno(aTransparence.ColorStops); + + CPPUNIT_ASSERT_EQUAL(size_t(3), aColorStops.size()); + CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[0].getStopOffset(), 0.0)); + CPPUNIT_ASSERT_EQUAL(Color(0x404040), Color(aColorStops[0].getStopColor())); + CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[1].getStopOffset(), 0.070000000000000007)); + CPPUNIT_ASSERT_EQUAL(Color(0x404040), Color(aColorStops[1].getStopColor())); + CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[2].getStopOffset(), 0.080000000000000002)); + CPPUNIT_ASSERT_EQUAL(COL_WHITE, Color(aColorStops[2].getStopColor())); +} + +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testBnc882383) +{ + loadFromFile(u"pptx/bnc882383.pptx"); uno::Reference<chart2::XChartDocument> xChartDoc(getChartDocFromDrawImpress(0, 0), uno::UNO_QUERY_THROW); uno::Reference<chart2::XDataSeries> xDataSeries(getDataSeriesFromDoc(xChartDoc, 0)); CPPUNIT_ASSERT(xDataSeries.is()); @@ -855,9 +660,9 @@ void Chart2ImportTest::testBnc882383() CPPUNIT_ASSERT(!sGradientName.isEmpty()); } -void Chart2ImportTest::testTransparancyGradientValue() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testTransparencyGradientValue) { - load(u"/chart2/qa/extras/data/xlsx/", "tdf128732.xlsx"); + loadFromFile(u"xlsx/tdf128732.xlsx"); uno::Reference< chart2::XChartDocument > xChartDoc = getChartDocFromSheet(0, mxComponent); CPPUNIT_ASSERT(xChartDoc.is()); uno::Reference<chart2::XDataSeries> xDataSeries(getDataSeriesFromDoc(xChartDoc, 0)); @@ -868,19 +673,25 @@ void Chart2ImportTest::testTransparancyGradientValue() xPropertySet->getPropertyValue("FillTransparenceGradientName") >>= sTranspGradientName; CPPUNIT_ASSERT(!sTranspGradientName.isEmpty()); - awt::Gradient aTransparenceGradient; + awt::Gradient2 aTransparenceGradient; uno::Reference< lang::XMultiServiceFactory > xFact(xChartDoc, uno::UNO_QUERY); CPPUNIT_ASSERT(xFact.is()); uno::Reference< container::XNameAccess > xTransparenceGradient(xFact->createInstance("com.sun.star.drawing.TransparencyGradientTable"), uno::UNO_QUERY); uno::Any rTransparenceValue = xTransparenceGradient->getByName(sTranspGradientName); CPPUNIT_ASSERT(rTransparenceValue >>= aTransparenceGradient); - CPPUNIT_ASSERT_EQUAL(sal_Int32(3355443), aTransparenceGradient.EndColor); - CPPUNIT_ASSERT_EQUAL(sal_Int32(5000268), aTransparenceGradient.StartColor); + const basegfx::BColorStops aColorStops = model::gradient::getColorStopsFromUno(aTransparenceGradient.ColorStops); + + // MCGR: Use the whole completely imported transparency gradient to check for correctness + CPPUNIT_ASSERT_EQUAL(size_t(2), aColorStops.size()); + CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[0].getStopOffset(), 0.0)); + CPPUNIT_ASSERT_EQUAL(Color(0x4d4d4d), Color(aColorStops[0].getStopColor())); + CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[1].getStopOffset(), 1.0)); + CPPUNIT_ASSERT_EQUAL(Color(0x333333), Color(aColorStops[1].getStopColor())); } -void Chart2ImportTest::testSimpleStrictXLSX() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testSimpleStrictXLSX) { - load(u"/chart2/qa/extras/data/xlsx/", "strict_chart.xlsx"); + loadFromFile(u"xlsx/strict_chart.xlsx"); uno::Reference< chart2::XChartDocument > xChartDoc = getChartDocFromSheet( 0, mxComponent ); CPPUNIT_ASSERT(xChartDoc.is()); @@ -889,9 +700,10 @@ void Chart2ImportTest::testSimpleStrictXLSX() } -void Chart2ImportTest::testDelayedCellImport() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testDelayedCellImport) { - load(u"/chart2/qa/extras/data/xlsx/", "fdo70609.xlsx"); + // chart range referencing content on later sheets + loadFromFile(u"xlsx/fdo70609.xlsx"); uno::Reference< chart2::XChartDocument > xChartDoc = getChartDocFromSheet( 0, mxComponent ); Reference< chart2::data::XDataSequence > xDataSeq = getDataSequenceFromDocByRole(xChartDoc, u"values-x"); @@ -900,9 +712,9 @@ void Chart2ImportTest::testDelayedCellImport() CPPUNIT_ASSERT_EQUAL(OUString("$Sheet2.$C$5:$C$9"), aRange); } -void Chart2ImportTest::testFlatODSStackedColumnChart() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testFlatODSStackedColumnChart) { - load(u"/chart2/qa/extras/data/fods/", "stacked-column-chart.fods"); + loadFromFile(u"fods/stacked-column-chart.fods"); Reference<chart2::XChartDocument> xChartDoc = getChartDocFromSheet(0, mxComponent); CPPUNIT_ASSERT(xChartDoc.is()); @@ -917,9 +729,9 @@ void Chart2ImportTest::testFlatODSStackedColumnChart() CPPUNIT_ASSERT_EQUAL(sal_Int32(5), aSeriesSeq.getLength()); } -void Chart2ImportTest::testFdo78080() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testFdo78080) { - load(u"/chart2/qa/extras/data/xlsx/", "fdo78080.xlsx"); + loadFromFile(u"xlsx/fdo78080.xlsx"); Reference<chart2::XChartDocument> xChartDoc = getChartDocFromSheet(0, mxComponent); CPPUNIT_ASSERT(xChartDoc.is()); @@ -928,9 +740,9 @@ void Chart2ImportTest::testFdo78080() CPPUNIT_ASSERT(!xTitle.is()); } -void Chart2ImportTest::testTdf127811() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testTdf127811) { - load(u"/chart2/qa/extras/data/pptx/", "tdf127811.pptx"); + loadFromFile(u"pptx/tdf127811.pptx"); Reference<chart2::XChartDocument> xChartDoc(getChartDocFromDrawImpress(0, 0), uno::UNO_QUERY); CPPUNIT_ASSERT(xChartDoc.is()); @@ -947,9 +759,10 @@ void Chart2ImportTest::testTdf127811() CPPUNIT_ASSERT_EQUAL(OUString("2. second"), aLabels[1][0].get<OUString>()); } -void Chart2ImportTest::testTdf86624() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testTdf86624) { - load(u"/chart2/qa/extras/data/ods/", "tdf86624.ods"); + // manually placed legends + loadFromFile(u"ods/tdf86624.ods"); uno::Reference< chart2::XChartDocument > xChart2Doc = getChartDocFromSheet(0, mxComponent); uno::Reference< chart::XChartDocument > xChartDoc (xChart2Doc, uno::UNO_QUERY); uno::Reference<drawing::XShape> xLegend = xChartDoc->getLegend(); @@ -958,9 +771,9 @@ void Chart2ImportTest::testTdf86624() CPPUNIT_ASSERT(aPos.Y > 4000); // real value for ms is above 7000 } -void Chart2ImportTest::testTdf105517() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testTdf105517) { - load(u"/chart2/qa/extras/data/pptx/", "tdf105517.pptx"); + loadFromFile(u"pptx/tdf105517.pptx"); Reference<chart2::XChartDocument> xChartDoc(getChartDocFromDrawImpress(0, 0), uno::UNO_QUERY); CPPUNIT_ASSERT(xChartDoc.is()); @@ -986,9 +799,9 @@ void Chart2ImportTest::testTdf105517() CPPUNIT_ASSERT_EQUAL(tools::Long(0x1e69a8), lineColor); } -void Chart2ImportTest::testTdf106217() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testTdf106217) { - load(u"/chart2/qa/extras/data/pptx/", "tdf106217.pptx"); + loadFromFile(u"pptx/tdf106217.pptx"); uno::Reference< chart::XChartDocument > xChartDoc = getChartDocFromDrawImpress(0, 0); CPPUNIT_ASSERT(xChartDoc.is()); @@ -1008,14 +821,14 @@ void Chart2ImportTest::testTdf106217() CPPUNIT_ASSERT_EQUAL(sal_Int32(2700), aSize.Height); } -void Chart2ImportTest::testTdf108021() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testTdf108021) { // Tdf108021 : To check TextBreak value is true. - load(u"/chart2/qa/extras/data/ods/", "tdf108021.ods"); + loadFromFile(u"ods/tdf108021.ods"); uno::Reference< chart::XDiagram > mxDiagram; uno::Reference< beans::XPropertySet > xAxisProp; bool bTextBreak = false; - uno::Reference< chart::XChartDocument > xChartDoc ( getChartCompFromSheet( 0, mxComponent ), UNO_QUERY_THROW); + uno::Reference< chart::XChartDocument > xChartDoc ( getChartCompFromSheet( 0, 0, mxComponent ), UNO_QUERY_THROW); mxDiagram.set(xChartDoc->getDiagram()); CPPUNIT_ASSERT(mxDiagram.is()); uno::Reference< chart::XAxisXSupplier > xAxisXSupp( mxDiagram, uno::UNO_QUERY ); @@ -1026,19 +839,19 @@ void Chart2ImportTest::testTdf108021() CPPUNIT_ASSERT(bTextBreak); } -void Chart2ImportTest::testTdf100084() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testTdf100084) { // The test file was created with IBM Cognos, make sure there is a diagram. - load(u"/chart2/qa/extras/data/xlsx/", "tdf100084.xlsx"); + loadFromFile(u"xlsx/tdf100084.xlsx"); Reference<chart2::XChartDocument> xChartDoc = getChartDocFromSheet(0, mxComponent); CPPUNIT_ASSERT_MESSAGE("failed to load chart", xChartDoc.is()); Reference<beans::XPropertySet> xDiagram(xChartDoc->getFirstDiagram(), UNO_QUERY); CPPUNIT_ASSERT_MESSAGE("There should be a Diagram.", xDiagram.is()); } -void Chart2ImportTest::testTdf124817() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testTdf124817) { - load(u"/chart2/qa/extras/data/xlsx/", "tdf124817.xlsx"); + loadFromFile(u"xlsx/tdf124817.xlsx"); Reference<chart2::XChartDocument> xChartDoc = getChartDocFromSheet(0, mxComponent); CPPUNIT_ASSERT_MESSAGE("failed to load chart", xChartDoc.is()); @@ -1049,24 +862,27 @@ void Chart2ImportTest::testTdf124817() xDataSeries = getDataSeriesFromDoc(xChartDoc, 0); CPPUNIT_ASSERT(xDataSeries.is()); uno::Reference<beans::XPropertySet> xPropSet_0(xDataSeries, uno::UNO_QUERY_THROW); - CPPUNIT_ASSERT((xPropSet_0->getPropertyValue("Symbol") >>= aSymblProp) && (aSymblProp.Style == chart2::SymbolStyle_NONE)); + CPPUNIT_ASSERT((xPropSet_0->getPropertyValue("Symbol") >>= aSymblProp)); + CPPUNIT_ASSERT_EQUAL(chart2::SymbolStyle_NONE, aSymblProp.Style); // Check the symbol of data series 2 (marker style square) xDataSeries = getDataSeriesFromDoc(xChartDoc, 1); CPPUNIT_ASSERT(xDataSeries.is()); uno::Reference<beans::XPropertySet> xPropSet_1(xDataSeries, uno::UNO_QUERY_THROW); - CPPUNIT_ASSERT((xPropSet_1->getPropertyValue("Symbol") >>= aSymblProp) && (aSymblProp.FillColor == static_cast<sal_Int32>(0xED7D31))); + CPPUNIT_ASSERT((xPropSet_1->getPropertyValue("Symbol") >>= aSymblProp)); + CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0xED7D31), aSymblProp.FillColor); // Check the symbol of data series 3 (marker style diagonal cross) xDataSeries = getDataSeriesFromDoc(xChartDoc, 2); CPPUNIT_ASSERT(xDataSeries.is()); uno::Reference<beans::XPropertySet> xPropSet_2(xDataSeries, uno::UNO_QUERY_THROW); - CPPUNIT_ASSERT((xPropSet_2->getPropertyValue("Symbol") >>= aSymblProp) && (aSymblProp.BorderColor == static_cast<sal_Int32>(0xFF0000))); + CPPUNIT_ASSERT((xPropSet_2->getPropertyValue("Symbol") >>= aSymblProp)); + CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0xFF0000), aSymblProp.BorderColor); } -void Chart2ImportTest::testTdf126033() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testTdf126033) { - load(u"/chart2/qa/extras/data/xlsx/", "tdf126033.xlsx"); + loadFromFile(u"xlsx/tdf126033.xlsx"); Reference<chart2::XChartDocument> xChartDoc = getChartDocFromSheet(0, mxComponent); CPPUNIT_ASSERT_MESSAGE("failed to load chart", xChartDoc.is()); @@ -1081,9 +897,9 @@ void Chart2ImportTest::testTdf126033() CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(176), aSymblProp.Size.Height); } -void Chart2ImportTest::testTransparentBackground(OUString const & filename) +void Chart2ImportTest::testTransparentBackground(std::u16string_view filename) { - load(u"/chart2/qa/extras/data/xlsx/", filename); + loadFromFile(filename); uno::Reference< chart2::XChartDocument > xChartDoc = getChartDocFromSheet(0, mxComponent); CPPUNIT_ASSERT_MESSAGE("failed to load chart", xChartDoc.is()); @@ -1098,19 +914,20 @@ void Chart2ImportTest::testTransparentBackground(OUString const & filename) CPPUNIT_ASSERT_EQUAL_MESSAGE("Background needs to be with solid fill style", css::drawing::FillStyle_SOLID, aStyle); } + // 2 test methods here so that tearDown() can dispose the document -void Chart2ImportTest::testFdo54361() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testFdo54361) { - testTransparentBackground("fdo54361.xlsx"); + testTransparentBackground(u"xlsx/fdo54361.xlsx"); } -void Chart2ImportTest::testFdo54361_1() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testFdo54361_1) { - testTransparentBackground("fdo54361-1.xlsx"); + testTransparentBackground(u"xlsx/fdo54361-1.xlsx"); } -void Chart2ImportTest::testAutoBackgroundXLSX() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testAutoBackgroundXLSX) { - load(u"/chart2/qa/extras/data/xlsx/", "chart-auto-background.xlsx"); + loadFromFile(u"xlsx/chart-auto-background.xlsx"); uno::Reference<chart2::XChartDocument> xChartDoc = getChartDocFromSheet(0, mxComponent); CPPUNIT_ASSERT_MESSAGE("failed to load chart", xChartDoc.is()); @@ -1125,9 +942,9 @@ void Chart2ImportTest::testAutoBackgroundXLSX() sal_Int32(0x00FFFFFF), sal_Int32(nColor & 0x00FFFFFF)); // highest 2 bytes are transparency which we ignore here. } -void Chart2ImportTest::testAutoChartAreaBorderPropXLSX() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testAutoChartAreaBorderPropXLSX) { - load(u"/chart2/qa/extras/data/xlsx/", "chart-area-style-border.xlsx"); + loadFromFile(u"xlsx/chart-area-style-border.xlsx"); uno::Reference<chart2::XChartDocument> xChartDoc = getChartDocFromSheet(0, mxComponent); CPPUNIT_ASSERT_MESSAGE("failed to load chart", xChartDoc.is()); @@ -1145,9 +962,23 @@ void Chart2ImportTest::testAutoChartAreaBorderPropXLSX() sal_Int32(26), nWidth); } -void Chart2ImportTest::testChartAreaStyleBackgroundXLSX() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testAutoChartAreaBorderPropPPTX) { - load(u"/chart2/qa/extras/data/xlsx/", "chart-area-style-background.xlsx"); + loadFromFile(u"pptx/tdf150176.pptx"); + Reference<chart2::XChartDocument> xChartDoc(getChartDocFromDrawImpress(0, 0), uno::UNO_QUERY); + CPPUNIT_ASSERT_MESSAGE("failed to load chart", xChartDoc.is()); + + // Test "Automatic" chartarea border style/color/width. + Reference<beans::XPropertySet> xPropSet = xChartDoc->getPageBackground(); + CPPUNIT_ASSERT(xPropSet.is()); + drawing::LineStyle eStyle = xPropSet->getPropertyValue("LineStyle").get<drawing::LineStyle>(); + CPPUNIT_ASSERT_EQUAL_MESSAGE("'Automatic' chartarea border should be loaded as none style for pptx.", + drawing::LineStyle_NONE, eStyle); +} + +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testChartAreaStyleBackgroundXLSX) +{ + loadFromFile(u"xlsx/chart-area-style-background.xlsx"); uno::Reference<chart2::XChartDocument> xChartDoc = getChartDocFromSheet(0, mxComponent); CPPUNIT_ASSERT_MESSAGE("failed to load chart", xChartDoc.is()); @@ -1162,9 +993,9 @@ void Chart2ImportTest::testChartAreaStyleBackgroundXLSX() sal_Int32(0), nColor); } -void Chart2ImportTest::testChartHatchFillXLSX() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testChartHatchFillXLSX) { - load(u"/chart2/qa/extras/data/xlsx/", "chart-hatch-fill.xlsx"); + loadFromFile(u"xlsx/chart-hatch-fill.xlsx"); uno::Reference<chart2::XChartDocument> xChartDoc = getChartDocFromSheet(0, mxComponent); CPPUNIT_ASSERT_MESSAGE("failed to load chart", xChartDoc.is()); @@ -1181,9 +1012,9 @@ void Chart2ImportTest::testChartHatchFillXLSX() xPropSet->getPropertyValue("FillBackground") >>= bBackgroundFill; CPPUNIT_ASSERT(bBackgroundFill); - sal_Int32 nBackgroundColor; + Color nBackgroundColor; xPropSet->getPropertyValue("FillColor") >>= nBackgroundColor; - CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0xFFFFFF), nBackgroundColor); + CPPUNIT_ASSERT_EQUAL(COL_WHITE, nBackgroundColor); // Check the datapoint has HatchName value uno::Reference<chart2::XDataSeries> xDataSeries(getDataSeriesFromDoc(xChartDoc, 0)); @@ -1204,9 +1035,9 @@ void Chart2ImportTest::testChartHatchFillXLSX() CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0x00B050), nBackgroundColorofDatapoint); } -void Chart2ImportTest::testAxisTextRotationXLSX() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testAxisTextRotationXLSX) { - load(u"/chart2/qa/extras/data/xlsx/", "axis-label-rotation.xlsx"); + loadFromFile(u"xlsx/axis-label-rotation.xlsx"); uno::Reference<chart2::XChartDocument> xChartDoc = getChartDocFromSheet(0, mxComponent); CPPUNIT_ASSERT_MESSAGE("failed to load chart", xChartDoc.is()); @@ -1221,34 +1052,31 @@ void Chart2ImportTest::testAxisTextRotationXLSX() CPPUNIT_ASSERT_DOUBLES_EQUAL(90, nRotation, 1e-10); } -/* TODO : temporarily disabled. -void Chart2ImportTest::testTextCanOverlapXLSX() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testTextCanOverlapXLSX) { // fdo#84647 : To check textoverlap value is imported correctly. - load("/chart2/qa/extras/data/xlsx/", "chart-text-can-overlap.xlsx"); + loadFromFile(u"xlsx/chart-text-can-overlap.xlsx"); uno::Reference< chart::XDiagram > mxDiagram; uno::Reference< beans::XPropertySet > xAxisProp; bool bTextCanOverlap = false; - uno::Reference< chart::XChartDocument > xChartDoc ( getChartCompFromSheet( 0, mxComponent ), UNO_QUERY_THROW); + uno::Reference< chart::XChartDocument > xChartDoc ( getChartCompFromSheet( 0, 0, mxComponent ), UNO_QUERY_THROW); mxDiagram.set(xChartDoc->getDiagram()); CPPUNIT_ASSERT(mxDiagram.is()); uno::Reference< chart::XAxisXSupplier > xAxisXSupp( mxDiagram, uno::UNO_QUERY ); CPPUNIT_ASSERT(xAxisXSupp.is()); xAxisProp = xAxisXSupp->getXAxis(); xAxisProp->getPropertyValue("TextCanOverlap") >>= bTextCanOverlap; - // Expected value of 'TextCanOverlap' is true - CPPUNIT_ASSERT(bTextCanOverlap); + CPPUNIT_ASSERT(!bTextCanOverlap); } -*/ -void Chart2ImportTest::testTextBreakXLSX() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testTextBreakXLSX) { // tdf#122091: To check textbreak value is true in case of 0° degree of Axis label rotation. - load(u"/chart2/qa/extras/data/xlsx/", "chart_label_text_break.xlsx"); + loadFromFile(u"xlsx/chart_label_text_break.xlsx"); uno::Reference< chart::XDiagram > mxDiagram; uno::Reference< beans::XPropertySet > xAxisProp; bool textBreak = false; - uno::Reference< chart::XChartDocument > xChartDoc ( getChartCompFromSheet( 0, mxComponent ), UNO_QUERY_THROW); + uno::Reference< chart::XChartDocument > xChartDoc ( getChartCompFromSheet( 0, 0, mxComponent ), UNO_QUERY_THROW); CPPUNIT_ASSERT(xChartDoc.is()); mxDiagram.set(xChartDoc->getDiagram()); CPPUNIT_ASSERT(mxDiagram.is()); @@ -1260,9 +1088,9 @@ void Chart2ImportTest::testTextBreakXLSX() CPPUNIT_ASSERT(textBreak); } -void Chart2ImportTest::testNumberFormatsXLSX() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testNumberFormatsXLSX) { - load(u"/chart2/qa/extras/data/xlsx/", "number-formats.xlsx"); + loadFromFile(u"xlsx/number-formats.xlsx"); Reference<chart2::XChartDocument> xChartDoc = getChartDocFromSheet(0, mxComponent); CPPUNIT_ASSERT_MESSAGE("failed to load chart", xChartDoc.is()); @@ -1284,7 +1112,8 @@ void Chart2ImportTest::testNumberFormatsXLSX() bool bSuccess = xPropertySet->getPropertyValue("PercentageNumberFormat") >>= nNumberFormat; CPPUNIT_ASSERT_EQUAL(false, bSuccess); bSuccess = xPropertySet->getPropertyValue(CHART_UNONAME_LINK_TO_SRC_NUMFMT) >>= bLinkNumberFormatToSource; - CPPUNIT_ASSERT_MESSAGE("\"LinkNumberFormatToSource\" should be set to true.", bSuccess && bLinkNumberFormatToSource); + CPPUNIT_ASSERT_MESSAGE("\"LinkNumberFormatToSource\" should be set to true.", bSuccess); + CPPUNIT_ASSERT_MESSAGE("\"LinkNumberFormatToSource\" should be set to true.", bLinkNumberFormatToSource); xPropertySet.set(xDataSeries->getDataPointByIndex(1), uno::UNO_SET_THROW); xPropertySet->getPropertyValue("Label") >>= aLabel; @@ -1295,7 +1124,8 @@ void Chart2ImportTest::testNumberFormatsXLSX() bSuccess = xPropertySet->getPropertyValue("PercentageNumberFormat") >>= nNumberFormat; CPPUNIT_ASSERT_EQUAL(false, bSuccess); bSuccess = xPropertySet->getPropertyValue(CHART_UNONAME_LINK_TO_SRC_NUMFMT) >>= bLinkNumberFormatToSource; - CPPUNIT_ASSERT_MESSAGE("\"LinkNumberFormatToSource\" should be set to true.", bSuccess && bLinkNumberFormatToSource); + CPPUNIT_ASSERT_MESSAGE("\"LinkNumberFormatToSource\" should be set to true.", bSuccess); + CPPUNIT_ASSERT_MESSAGE("\"LinkNumberFormatToSource\" should be set to true.", bLinkNumberFormatToSource); xPropertySet.set(xDataSeries->getDataPointByIndex(2), uno::UNO_SET_THROW); xPropertySet->getPropertyValue("Label") >>= aLabel; @@ -1306,12 +1136,13 @@ void Chart2ImportTest::testNumberFormatsXLSX() bSuccess = xPropertySet->getPropertyValue("PercentageNumberFormat") >>= nNumberFormat; CPPUNIT_ASSERT_EQUAL(false, bSuccess); bSuccess = xPropertySet->getPropertyValue(CHART_UNONAME_LINK_TO_SRC_NUMFMT) >>= bLinkNumberFormatToSource; - CPPUNIT_ASSERT_MESSAGE("\"LinkNumberFormatToSource\" should be set to true.", bSuccess && bLinkNumberFormatToSource); + CPPUNIT_ASSERT_MESSAGE("\"LinkNumberFormatToSource\" should be set to true.", bSuccess); + CPPUNIT_ASSERT_MESSAGE("\"LinkNumberFormatToSource\" should be set to true.", bLinkNumberFormatToSource); } -void Chart2ImportTest::testNumberFormatsDOCX() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testNumberFormatsDOCX) { - load(u"/chart2/qa/extras/data/docx/", "tdf132174.docx"); + loadFromFile(u"docx/tdf132174.docx"); { uno::Reference< chart2::XChartDocument > xChartDoc(getChartDocFromWriter(0), uno::UNO_QUERY); CPPUNIT_ASSERT(xChartDoc.is()); @@ -1332,7 +1163,7 @@ void Chart2ImportTest::testNumberFormatsDOCX() CPPUNIT_ASSERT_MESSAGE("\"LinkNumberFormatToSource\" should be set to false.", !bLinkNumberFormatToSource); } - load(u"/chart2/qa/extras/data/docx/", "tdf136650.docx"); + loadFromFile(u"docx/tdf136650.docx"); { uno::Reference< chart2::XChartDocument > xChartDoc(getChartDocFromWriter(0), uno::UNO_QUERY); CPPUNIT_ASSERT(xChartDoc.is()); @@ -1354,9 +1185,9 @@ void Chart2ImportTest::testNumberFormatsDOCX() } } -void Chart2ImportTest::testPercentageNumberFormatsDOCX() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testPercentageNumberFormatsDOCX) { - load(u"/chart2/qa/extras/data/docx/", "tdf133632.docx"); + loadFromFile(u"docx/tdf133632.docx"); uno::Reference< chart2::XChartDocument > xChartDoc(getChartDocFromWriter(0), uno::UNO_QUERY); CPPUNIT_ASSERT(xChartDoc.is()); @@ -1371,12 +1202,15 @@ void Chart2ImportTest::testPercentageNumberFormatsDOCX() CPPUNIT_ASSERT_EQUAL(sal_False, aLabel.ShowNumber); CPPUNIT_ASSERT_EQUAL(sal_True, aLabel.ShowNumberInPercent); bool bSuccess = xPropertySet->getPropertyValue(CHART_UNONAME_LINK_TO_SRC_NUMFMT) >>= bLinkNumberFormatToSource; - CPPUNIT_ASSERT_MESSAGE("\"LinkNumberFormatToSource\" should be set to true.", bSuccess && bLinkNumberFormatToSource); + CPPUNIT_ASSERT_MESSAGE("\"LinkNumberFormatToSource\" should be set to true.", bSuccess); + CPPUNIT_ASSERT_MESSAGE("\"LinkNumberFormatToSource\" should be set to true.", bLinkNumberFormatToSource); } -void Chart2ImportTest::testAutoTitleDelDefaultValue2007XLSX() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testAutoTitleDelDefaultValue2007XLSX) { - load(u"/chart2/qa/extras/data/xlsx/", "autotitledel_2007.xlsx"); + // below are OOXML default value tests for cases + // where we fixed the handling of MSO 2007 vs OOXML + loadFromFile(u"xlsx/autotitledel_2007.xlsx"); Reference<chart2::XChartDocument> xChartDoc = getChartDocFromSheet(0, mxComponent); CPPUNIT_ASSERT_MESSAGE("failed to load chart", xChartDoc.is()); @@ -1386,9 +1220,9 @@ void Chart2ImportTest::testAutoTitleDelDefaultValue2007XLSX() !aTitle.isEmpty()); } -void Chart2ImportTest::testAutoTitleDelDefaultValue2013XLSX() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testAutoTitleDelDefaultValue2013XLSX) { - load(u"/chart2/qa/extras/data/xlsx/", "autotitledel_2013.xlsx"); + loadFromFile(u"xlsx/autotitledel_2013.xlsx"); Reference<chart2::XChartDocument> xChartDoc = getChartDocFromSheet(0, mxComponent); CPPUNIT_ASSERT_MESSAGE("failed to load chart", xChartDoc.is()); @@ -1398,9 +1232,9 @@ void Chart2ImportTest::testAutoTitleDelDefaultValue2013XLSX() !xTitle.is()); } -void Chart2ImportTest::testDispBlanksAsDefaultValue2007XLSX() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testDispBlanksAsDefaultValue2007XLSX) { - load(u"/chart2/qa/extras/data/xlsx/", "dispBlanksAs_2007.xlsx"); + loadFromFile(u"xlsx/dispBlanksAs_2007.xlsx"); Reference<chart2::XChartDocument> xChartDoc = getChartDocFromSheet(0, mxComponent); CPPUNIT_ASSERT_MESSAGE("failed to load chart", xChartDoc.is()); @@ -1412,9 +1246,9 @@ void Chart2ImportTest::testDispBlanksAsDefaultValue2007XLSX() CPPUNIT_ASSERT_EQUAL(chart::MissingValueTreatment::LEAVE_GAP, nMissingValueTreatment); } -void Chart2ImportTest::testDispBlanksAsDefaultValue2013XLSX() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testDispBlanksAsDefaultValue2013XLSX) { - load(u"/chart2/qa/extras/data/xlsx/", "dispBlanksAs_2013.xlsx"); + loadFromFile(u"xlsx/dispBlanksAs_2013.xlsx"); Reference<chart2::XChartDocument> xChartDoc = getChartDocFromSheet(0, mxComponent); CPPUNIT_ASSERT_MESSAGE("failed to load chart", xChartDoc.is()); @@ -1426,9 +1260,9 @@ void Chart2ImportTest::testDispBlanksAsDefaultValue2013XLSX() CPPUNIT_ASSERT_EQUAL(chart::MissingValueTreatment::USE_ZERO, nMissingValueTreatment); } -void Chart2ImportTest::testSmoothDefaultValue2007XLSX() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testSmoothDefaultValue2007XLSX) { - load(u"/chart2/qa/extras/data/xlsx/", "smoothed_series2007.xlsx"); + loadFromFile(u"xlsx/smoothed_series2007.xlsx"); Reference<chart2::XChartDocument> xChartDoc = getChartDocFromSheet(0, mxComponent); CPPUNIT_ASSERT_MESSAGE("failed to load chart", xChartDoc.is()); CPPUNIT_ASSERT(xChartDoc.is()); @@ -1444,9 +1278,9 @@ void Chart2ImportTest::testSmoothDefaultValue2007XLSX() CPPUNIT_ASSERT_EQUAL(chart2::CurveStyle_LINES, eCurveStyle); } -void Chart2ImportTest::testSmoothDefaultValue2013XLSX() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testSmoothDefaultValue2013XLSX) { - load(u"/chart2/qa/extras/data/xlsx/", "smoothed_series.xlsx"); + loadFromFile(u"xlsx/smoothed_series.xlsx"); Reference<chart2::XChartDocument> xChartDoc = getChartDocFromSheet(0, mxComponent); CPPUNIT_ASSERT_MESSAGE("failed to load chart", xChartDoc.is()); CPPUNIT_ASSERT(xChartDoc.is()); @@ -1462,9 +1296,9 @@ void Chart2ImportTest::testSmoothDefaultValue2013XLSX() CPPUNIT_ASSERT(eCurveStyle != chart2::CurveStyle_LINES); } -void Chart2ImportTest::testTrendlineDefaultValue2007XLSX() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testTrendlineDefaultValue2007XLSX) { - load(u"/chart2/qa/extras/data/xlsx/", "trendline2007.xlsx"); + loadFromFile(u"xlsx/trendline2007.xlsx"); Reference<chart2::XChartDocument> xChartDoc = getChartDocFromSheet(0, mxComponent); CPPUNIT_ASSERT_MESSAGE("failed to load chart", xChartDoc.is()); CPPUNIT_ASSERT(xChartDoc.is()); @@ -1488,9 +1322,9 @@ void Chart2ImportTest::testTrendlineDefaultValue2007XLSX() CPPUNIT_ASSERT(!bShowCorrelation); } -void Chart2ImportTest::testTrendlineDefaultValue2013XLSX() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testTrendlineDefaultValue2013XLSX) { - load(u"/chart2/qa/extras/data/xlsx/", "trendline.xlsx"); + loadFromFile(u"xlsx/trendline.xlsx"); Reference<chart2::XChartDocument> xChartDoc = getChartDocFromSheet(0, mxComponent); CPPUNIT_ASSERT_MESSAGE("failed to load chart", xChartDoc.is()); CPPUNIT_ASSERT(xChartDoc.is()); @@ -1514,9 +1348,9 @@ void Chart2ImportTest::testTrendlineDefaultValue2013XLSX() CPPUNIT_ASSERT(bShowCorrelation); } -void Chart2ImportTest::testVaryColorDefaultValues2007XLSX() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testVaryColorDefaultValues2007XLSX) { - load(u"/chart2/qa/extras/data/xlsx/", "vary_color2007.xlsx"); + loadFromFile(u"xlsx/vary_color2007.xlsx"); Reference<chart2::XChartDocument> xChartDoc = getChartDocFromSheet(0, mxComponent); CPPUNIT_ASSERT_MESSAGE("failed to load chart", xChartDoc.is()); CPPUNIT_ASSERT(xChartDoc.is()); @@ -1529,9 +1363,9 @@ void Chart2ImportTest::testVaryColorDefaultValues2007XLSX() CPPUNIT_ASSERT(!bVaryColor); } -void Chart2ImportTest::testVaryColorDefaultValues2013XLSX() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testVaryColorDefaultValues2013XLSX) { - load(u"/chart2/qa/extras/data/xlsx/", "vary_color.xlsx"); + loadFromFile(u"xlsx/vary_color.xlsx"); Reference<chart2::XChartDocument> xChartDoc = getChartDocFromSheet(0, mxComponent); CPPUNIT_ASSERT_MESSAGE("failed to load chart", xChartDoc.is()); CPPUNIT_ASSERT(xChartDoc.is()); @@ -1544,10 +1378,10 @@ void Chart2ImportTest::testVaryColorDefaultValues2013XLSX() CPPUNIT_ASSERT(!bVaryColor); } -void Chart2ImportTest::testPlotVisOnlyDefaultValue2013XLSX() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testPlotVisOnlyDefaultValue2013XLSX) { - load(u"/chart2/qa/extras/data/xlsx/", "plotVisOnly.xlsx"); - uno::Reference< chart::XChartDocument > xChart1Doc ( getChartCompFromSheet( 0, mxComponent ), UNO_QUERY_THROW); + loadFromFile(u"xlsx/plotVisOnly.xlsx"); + uno::Reference< chart::XChartDocument > xChart1Doc ( getChartCompFromSheet( 0, 0, mxComponent ), UNO_QUERY_THROW); Reference<beans::XPropertySet> xPropSet(xChart1Doc->getDiagram(), uno::UNO_QUERY_THROW); uno::Any aAny = xPropSet->getPropertyValue("IncludeHiddenCells"); CPPUNIT_ASSERT(aAny.hasValue()); @@ -1556,10 +1390,10 @@ void Chart2ImportTest::testPlotVisOnlyDefaultValue2013XLSX() CPPUNIT_ASSERT(!bShowHiddenValues); } -void Chart2ImportTest::testRAngAxDefaultValue2013XLSX() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testRAngAxDefaultValue2013XLSX) { - load(u"/chart2/qa/extras/data/xlsx/", "rAngAx.xlsx"); - uno::Reference< chart::XChartDocument > xChart1Doc ( getChartCompFromSheet( 0, mxComponent ), UNO_QUERY_THROW); + loadFromFile(u"xlsx/rAngAx.xlsx"); + uno::Reference< chart::XChartDocument > xChart1Doc ( getChartCompFromSheet( 0, 0, mxComponent ), UNO_QUERY_THROW); Reference<beans::XPropertySet> xPropSet(xChart1Doc->getDiagram(), uno::UNO_QUERY_THROW); uno::Any aAny = xPropSet->getPropertyValue("RightAngledAxes"); CPPUNIT_ASSERT(aAny.hasValue()); @@ -1568,9 +1402,9 @@ void Chart2ImportTest::testRAngAxDefaultValue2013XLSX() CPPUNIT_ASSERT(bRightAngleAxes); } -void Chart2ImportTest::testMajorTickMarksDefaultValue2013XLSX() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testMajorTickMarksDefaultValue2013XLSX) { - load(u"/chart2/qa/extras/data/xlsx/", "majorTickMark.xlsx"); + loadFromFile(u"xlsx/majorTickMark.xlsx"); Reference<chart2::XChartDocument> xChartDoc = getChartDocFromSheet(0, mxComponent); CPPUNIT_ASSERT_MESSAGE("failed to load chart", xChartDoc.is()); Reference<chart2::XAxis> xXAxis = getAxisFromDoc(xChartDoc, 0, 0, 0); @@ -1583,9 +1417,9 @@ void Chart2ImportTest::testMajorTickMarksDefaultValue2013XLSX() CPPUNIT_ASSERT_EQUAL(chart2::TickmarkStyle::INNER | chart2::TickmarkStyle::OUTER, nMajorTickmarks); } -void Chart2ImportTest::testMinorTickMarksDefaultValue2013XLSX() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testMinorTickMarksDefaultValue2013XLSX) { - load(u"/chart2/qa/extras/data/xlsx/", "minorTickMark.xlsx"); + loadFromFile(u"xlsx/minorTickMark.xlsx"); Reference<chart2::XChartDocument> xChartDoc = getChartDocFromSheet(0, mxComponent); CPPUNIT_ASSERT_MESSAGE("failed to load chart", xChartDoc.is()); Reference<chart2::XAxis> xXAxis = getAxisFromDoc(xChartDoc, 0, 0, 0); @@ -1598,9 +1432,9 @@ void Chart2ImportTest::testMinorTickMarksDefaultValue2013XLSX() CPPUNIT_ASSERT_EQUAL(chart2::TickmarkStyle::INNER | chart2::TickmarkStyle::OUTER, nMajorTickmarks); } -void Chart2ImportTest::testAxisTitleDefaultRotationXLSX() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testAxisTitleDefaultRotationXLSX) { - load(u"/chart2/qa/extras/data/xlsx/", "axis_title_default_rotation.xlsx"); + loadFromFile(u"xlsx/axis_title_default_rotation.xlsx"); Reference<chart2::XChartDocument> xChartDoc = getChartDocFromSheet(0, mxComponent); CPPUNIT_ASSERT_MESSAGE("failed to load chart", xChartDoc.is()); Reference<chart2::XAxis> xYAxis = getAxisFromDoc(xChartDoc, 0, 1, 0); @@ -1615,9 +1449,9 @@ void Chart2ImportTest::testAxisTitleDefaultRotationXLSX() CPPUNIT_ASSERT_EQUAL(90.0, nRotation); } -void Chart2ImportTest::testSecondaryAxisTitleDefaultRotationXLSX() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testSecondaryAxisTitleDefaultRotationXLSX) { - load(u"/chart2/qa/extras/data/xlsx/", "secondary_axis_title_default_rotation.xlsx"); + loadFromFile(u"xlsx/secondary_axis_title_default_rotation.xlsx"); Reference<chart2::XChartDocument> xChartDoc = getChartDocFromSheet(0, mxComponent); CPPUNIT_ASSERT_MESSAGE("failed to load chart", xChartDoc.is()); Reference<chart2::XAxis> xYAxis = getAxisFromDoc(xChartDoc, 0, 1, 1); @@ -1632,9 +1466,9 @@ void Chart2ImportTest::testSecondaryAxisTitleDefaultRotationXLSX() CPPUNIT_ASSERT_EQUAL(90.0, nRotation); } -void Chart2ImportTest::testAxisTitleRotationXLSX() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testAxisTitleRotationXLSX) { - load(u"/chart2/qa/extras/data/xlsx/", "axis_title_rotated.xlsx"); + loadFromFile(u"xlsx/axis_title_rotated.xlsx"); Reference<chart2::XChartDocument> xChartDoc = getChartDocFromSheet(0, mxComponent); CPPUNIT_ASSERT_MESSAGE("failed to load chart", xChartDoc.is()); { @@ -1664,9 +1498,9 @@ void Chart2ImportTest::testAxisTitleRotationXLSX() } -void Chart2ImportTest::testAxisTitlePositionDOCX() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testAxisTitlePositionDOCX) { - load(u"/chart2/qa/extras/data/docx/", "testAxisTitlePosition.docx"); + loadFromFile(u"docx/testAxisTitlePosition.docx"); uno::Reference< chart::XDiagram > mxDiagram; uno::Reference< drawing::XShape > xAxisTitle; uno::Reference< chart::XChartDocument > xChartDoc = getChartDocFromWriter(0); @@ -1696,9 +1530,9 @@ void Chart2ImportTest::testAxisTitlePositionDOCX() CPPUNIT_ASSERT_DOUBLES_EQUAL(6378, aPos.Y, 300); } -void Chart2ImportTest::testCombinedChartAttachedAxisXLSX() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testCombinedChartAttachedAxisXLSX) { - load(u"/chart2/qa/extras/data/xlsx/", "testCombinedChartAxis.xlsx"); + loadFromFile(u"xlsx/testCombinedChartAxis.xlsx"); Reference< chart2::XChartDocument> xChartDoc = getChartDocFromSheet(0, mxComponent); // First series Reference<chart2::XDataSeries> xSeries = getDataSeriesFromDoc(xChartDoc, 0); @@ -1722,12 +1556,47 @@ void Chart2ImportTest::testCombinedChartAttachedAxisXLSX() CPPUNIT_ASSERT_EQUAL(sal_Int32(0), nAxisIndex); } -void Chart2ImportTest::testInternalDataProvider() { - uno::Reference< chart2::XChartDocument > xChartDoc(getChartDocFromImpress(u"/chart2/qa/extras/data/odp/", "chart.odp"), uno::UNO_QUERY_THROW); +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testTdf140489MultiSeriesChartAxisXLSX) +{ + loadFromFile(u"xlsx/tdf140489.xlsx"); + Reference< chart2::XChartDocument> xChartDoc = getChartDocFromSheet(0, mxComponent); + // First series + Reference<chart2::XDataSeries> xSeries = getDataSeriesFromDoc(xChartDoc, 0); + CPPUNIT_ASSERT(xSeries.is()); + + Reference<beans::XPropertySet> xPropSet(xSeries, uno::UNO_QUERY_THROW); + sal_Int32 nAxisIndex = -1; + uno::Any aAny = xPropSet->getPropertyValue("AttachedAxisIndex"); + CPPUNIT_ASSERT(aAny >>= nAxisIndex); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), nAxisIndex); + + // Second series + xSeries = getDataSeriesFromDoc(xChartDoc, 0, 1); + CPPUNIT_ASSERT(xSeries.is()); + + xPropSet.set(xSeries, uno::UNO_QUERY_THROW); + aAny = xPropSet->getPropertyValue("AttachedAxisIndex"); + CPPUNIT_ASSERT(aAny >>= nAxisIndex); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), nAxisIndex); + + // Third series + xSeries = getDataSeriesFromDoc(xChartDoc, 0, 2); + CPPUNIT_ASSERT(xSeries.is()); + + xPropSet.set(xSeries, uno::UNO_QUERY_THROW); + aAny = xPropSet->getPropertyValue("AttachedAxisIndex"); + CPPUNIT_ASSERT(aAny >>= nAxisIndex); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), nAxisIndex); +} + +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testInternalDataProvider) +{ + loadFromFile(u"odp/chart.odp"); + uno::Reference< chart2::XChartDocument > xChartDoc(getChartDocFromDrawImpress(0,0), uno::UNO_QUERY_THROW); const uno::Reference< chart2::data::XDataProvider >& rxDataProvider = xChartDoc->getDataProvider(); // Parse 42 array - Reference<chart2::data::XDataSequence> xDataSeq = rxDataProvider->createDataSequenceByValueArray("values-y", "{42;42;42;42}"); + Reference<chart2::data::XDataSequence> xDataSeq = rxDataProvider->createDataSequenceByValueArray("values-y", "{42;42;42;42}", ""); Sequence<Any> xSequence = xDataSeq->getData(); CPPUNIT_ASSERT_EQUAL(uno::Any(sal_Int32(42)), xSequence[0]); CPPUNIT_ASSERT_EQUAL(uno::Any(sal_Int32(42)), xSequence[1]); @@ -1735,7 +1604,7 @@ void Chart2ImportTest::testInternalDataProvider() { CPPUNIT_ASSERT_EQUAL(uno::Any(sal_Int32(42)), xSequence[3]); // Parse empty first and last - xDataSeq = rxDataProvider->createDataSequenceByValueArray("values-y", "{\"\";42;42;\"\"}"); + xDataSeq = rxDataProvider->createDataSequenceByValueArray("values-y", "{\"\";42;42;\"\"}", ""); xSequence = xDataSeq->getData(); CPPUNIT_ASSERT( std::isnan( *static_cast<const double*>(xSequence[0].getValue()))); CPPUNIT_ASSERT_EQUAL(uno::Any(sal_Int32(42)), xSequence[1]); @@ -1743,7 +1612,7 @@ void Chart2ImportTest::testInternalDataProvider() { CPPUNIT_ASSERT( std::isnan( *static_cast<const double*>(xSequence[3].getValue()))); // Parse empty middle - xDataSeq = rxDataProvider->createDataSequenceByValueArray("values-y", "{42;\"\";\"\";42}"); + xDataSeq = rxDataProvider->createDataSequenceByValueArray("values-y", "{42;\"\";\"\";42}", ""); xSequence = xDataSeq->getData(); CPPUNIT_ASSERT_EQUAL(uno::Any(sal_Int32(42)), xSequence[0]); CPPUNIT_ASSERT( std::isnan( *static_cast<const double*>(xSequence[1].getValue())) ); @@ -1751,7 +1620,7 @@ void Chart2ImportTest::testInternalDataProvider() { CPPUNIT_ASSERT_EQUAL(uno::Any(sal_Int32(42)), xSequence[3]); // Parse mixed types, numeric only role - xDataSeq = rxDataProvider->createDataSequenceByValueArray("values-y", "{42;\"hello\";0;\"world\"}"); + xDataSeq = rxDataProvider->createDataSequenceByValueArray("values-y", "{42;\"hello\";0;\"world\"}", ""); xSequence = xDataSeq->getData(); CPPUNIT_ASSERT_EQUAL(uno::Any(sal_Int32(42)), xSequence[0]); CPPUNIT_ASSERT_EQUAL(uno::Any(sal_Int32(0)), xSequence[1]); @@ -1759,7 +1628,7 @@ void Chart2ImportTest::testInternalDataProvider() { CPPUNIT_ASSERT_EQUAL(uno::Any(sal_Int32(0)), xSequence[3]); // Parse mixed types, mixed role - xDataSeq = rxDataProvider->createDataSequenceByValueArray("categories", "{42;\"hello\";0;\"world\"}"); + xDataSeq = rxDataProvider->createDataSequenceByValueArray("categories", "{42;\"hello\";0;\"world\"}", ""); xSequence = xDataSeq->getData(); CPPUNIT_ASSERT_EQUAL(uno::Any(OUString("Row 1 42")), xSequence[0]); CPPUNIT_ASSERT_EQUAL(uno::Any(OUString("Row 2 hello")), xSequence[1]); @@ -1767,10 +1636,11 @@ void Chart2ImportTest::testInternalDataProvider() { CPPUNIT_ASSERT_EQUAL(uno::Any(OUString("Row 4 world")), xSequence[3]); } -void Chart2ImportTest::testTdf90510() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testTdf90510) { - load(u"/chart2/qa/extras/data/xls/", "piechart_outside.xls"); - uno::Reference< chart::XChartDocument > xChart1Doc( getChartCompFromSheet( 0, mxComponent ), UNO_QUERY_THROW ); + // Pie chart label placement settings(XLS) + loadFromFile(u"xls/piechart_outside.xls"); + uno::Reference< chart::XChartDocument > xChart1Doc( getChartCompFromSheet( 0, 0, mxComponent ), UNO_QUERY_THROW ); Reference<beans::XPropertySet> xPropSet( xChart1Doc->getDiagram()->getDataPointProperties( 0, 0 ), uno::UNO_SET_THROW ); uno::Any aAny = xPropSet->getPropertyValue( "LabelPlacement" ); CPPUNIT_ASSERT( aAny.hasValue() ); @@ -1779,10 +1649,11 @@ void Chart2ImportTest::testTdf90510() CPPUNIT_ASSERT_EQUAL_MESSAGE( "Data labels should be placed outside", chart::DataLabelPlacement::OUTSIDE, nLabelPlacement ); } -void Chart2ImportTest::testTdf109858() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testTdf109858) { - load(u"/chart2/qa/extras/data/xlsx/", "piechart_outside.xlsx"); - uno::Reference< chart::XChartDocument > xChart1Doc( getChartCompFromSheet( 0, mxComponent ), UNO_QUERY_THROW ); + // Pie chart label placement settings(XLSX) + loadFromFile(u"xlsx/piechart_outside.xlsx"); + uno::Reference< chart::XChartDocument > xChart1Doc( getChartCompFromSheet( 0, 0, mxComponent ), UNO_QUERY_THROW ); // test data point labels position Reference<beans::XPropertySet> xDataPointPropSet( xChart1Doc->getDiagram()->getDataPointProperties( 0, 0 ), uno::UNO_SET_THROW ); @@ -1799,9 +1670,9 @@ void Chart2ImportTest::testTdf109858() CPPUNIT_ASSERT_EQUAL_MESSAGE( "Data series labels should be placed outside", chart::DataLabelPlacement::OUTSIDE, nLabelPlacement ); } -void Chart2ImportTest::testTdf130105() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testTdf130105) { - load(u"/chart2/qa/extras/data/xlsx/", "barchart_outend.xlsx"); + loadFromFile(u"xlsx/barchart_outend.xlsx"); uno::Reference< chart2::XChartDocument > xChartDoc = getChartDocFromSheet(0, mxComponent); CPPUNIT_ASSERT(xChartDoc.is()); uno::Reference<chart2::XDataSeries> xDataSeries(getDataSeriesFromDoc(xChartDoc, 0)); @@ -1815,15 +1686,15 @@ void Chart2ImportTest::testTdf130105() CPPUNIT_ASSERT_EQUAL_MESSAGE("Data label should be placed outend", chart::DataLabelPlacement::OUTSIDE, nLabelPlacement); } -void Chart2ImportTest::testTdf111173() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testTdf111173) { - load(u"/chart2/qa/extras/data/xlsx/", "tdf111173.xlsx"); - uno::Reference< chart::XChartDocument > xChart1Doc( getChartCompFromSheet( 0, mxComponent ), UNO_QUERY_THROW ); + loadFromFile(u"xlsx/tdf111173.xlsx"); + uno::Reference< chart::XChartDocument > xChart1Doc( getChartCompFromSheet( 0, 0, mxComponent ), UNO_QUERY_THROW ); } -void Chart2ImportTest::testTdf122226() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testTdf122226) { - load( u"/chart2/qa/extras/data/docx/", "testTdf122226.docx" ); + loadFromFile(u"docx/testTdf122226.docx" ); uno::Reference< chart2::XChartDocument > xChartDoc ( getChartDocFromWriter(0), uno::UNO_QUERY); CPPUNIT_ASSERT( xChartDoc.is() ); @@ -1839,9 +1710,10 @@ void Chart2ImportTest::testTdf122226() CPPUNIT_ASSERT_EQUAL_MESSAGE( "Data labels should be separated into new lines", OUString("\n"), nLabelSeparator ); } -void Chart2ImportTest::testTdf115107() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testTdf115107) { - load(u"/chart2/qa/extras/data/pptx/", "tdf115107.pptx"); + // import complex data point labels + loadFromFile(u"pptx/tdf115107.pptx"); Reference<chart2::XChartDocument> xChartDoc(getChartDocFromDrawImpress(0, 0), uno::UNO_QUERY); CPPUNIT_ASSERT(xChartDoc.is()); @@ -1930,9 +1802,10 @@ void Chart2ImportTest::testTdf115107() CPPUNIT_ASSERT_EQUAL(OUString(" <CELLREF"), aFields[1]->getString()); } -void Chart2ImportTest::testTdf115107_2() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testTdf115107_2) { - load(u"/chart2/qa/extras/data/pptx/", "tdf115107-2.pptx"); + // import complex data point labels in cobo charts with multiple data series + loadFromFile(u"pptx/tdf115107-2.pptx"); Reference<chart2::XChartDocument> xChartDoc(getChartDocFromDrawImpress(0, 0), uno::UNO_QUERY); CPPUNIT_ASSERT(xChartDoc.is()); @@ -1985,9 +1858,9 @@ void Chart2ImportTest::testTdf115107_2() } -void Chart2ImportTest::testTdf116163() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testTdf116163) { - load(u"/chart2/qa/extras/data/pptx/", "tdf116163.pptx"); + loadFromFile(u"pptx/tdf116163.pptx"); Reference<chart2::XChartDocument> xChartDoc(getChartDocFromDrawImpress(0, 0), uno::UNO_QUERY); CPPUNIT_ASSERT(xChartDoc.is()); @@ -2008,7 +1881,7 @@ void Chart2ImportTest::testTdf116163() CPPUNIT_ASSERT(xTextualDataSequence.is()); std::vector<OUString> aCategories; - Sequence<OUString> aTextData(xTextualDataSequence->getTextualData()); + const Sequence<OUString> aTextData(xTextualDataSequence->getTextualData()); ::std::copy(aTextData.begin(), aTextData.end(), ::std::back_inserter(aCategories)); @@ -2050,9 +1923,9 @@ void Chart2ImportTest::testTdf116163() CPPUNIT_ASSERT_EQUAL(OUString("Dddd..."), xLabel3->getString()); } -void Chart2ImportTest::testTdf48041() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testTdf48041) { - load(u"/chart2/qa/extras/data/pptx/", "tdf48041.pptx"); + loadFromFile(u"pptx/tdf48041.pptx"); Reference<chart2::XChartDocument> xChartDoc(getChartDocFromDrawImpress(0, 0), uno::UNO_QUERY); CPPUNIT_ASSERT(xChartDoc.is()); @@ -2100,9 +1973,9 @@ void Chart2ImportTest::testTdf48041() CPPUNIT_ASSERT_EQUAL(OUString("5"), xLabel5->getString()); } -void Chart2ImportTest::testTdf121205() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testTdf121205) { - load(u"/chart2/qa/extras/data/pptx/", "tdf121205.pptx"); + loadFromFile(u"pptx/tdf121205.pptx"); Reference<chart2::XChartDocument> xChartDoc(getChartDocFromDrawImpress(0, 0), uno::UNO_QUERY); uno::Reference<chart2::XTitled> xTitled(xChartDoc, uno::UNO_QUERY_THROW); @@ -2113,718 +1986,310 @@ void Chart2ImportTest::testTdf121205() CPPUNIT_ASSERT_EQUAL(OUString("Firstline\nSecondline\nThirdline"), aTitle); } -void Chart2ImportTest::testTdf114179() -{ - load( u"/chart2/qa/extras/data/docx/", "testTdf114179.docx" ); - uno::Reference< chart2::XChartDocument > xChartDoc ( getChartDocFromWriter(0), uno::UNO_QUERY); - CPPUNIT_ASSERT( xChartDoc.is() ); - css::uno::Reference<chart2::XDiagram> xDiagram; - xDiagram.set( xChartDoc->getFirstDiagram() ); - CPPUNIT_ASSERT_MESSAGE( "There is a Diagram." , xDiagram.is() ); - awt::Size aPage = getPageSize( xChartDoc ); - awt::Size aSize = getSize( xDiagram,aPage ); - CPPUNIT_ASSERT( aSize.Width > 0); - CPPUNIT_ASSERT( aSize.Height > 0); -} - -void Chart2ImportTest::testTdf124243() -{ - load(u"/chart2/qa/extras/data/docx/", "tdf124243.docx"); - uno::Reference< chart2::XChartDocument > xChartDoc(getChartDocFromWriter(0), uno::UNO_QUERY); - CPPUNIT_ASSERT_MESSAGE("failed to load chart", xChartDoc.is()); - - Reference<chart2::XAxis> xAxis = getAxisFromDoc(xChartDoc, 0, 0, 0); - CPPUNIT_ASSERT(xAxis.is()); - - Reference<beans::XPropertySet> xPS(xAxis, uno::UNO_QUERY_THROW); - bool bShow = true; - // test X Axis is not visible. - bool bSuccess = xPS->getPropertyValue("Show") >>= bShow; - CPPUNIT_ASSERT(bSuccess); - CPPUNIT_ASSERT(!bShow); -} - -void Chart2ImportTest::testTdf127393() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testTdf146487) { - load(u"/chart2/qa/extras/data/pptx/", "tdf127393.pptx"); - - // 1st chart + loadFromFile(u"pptx/tdf146487.pptx"); Reference<chart2::XChartDocument> xChartDoc(getChartDocFromDrawImpress(0, 0), uno::UNO_QUERY); - CPPUNIT_ASSERT(xChartDoc.is()); - - Reference<chart2::XAxis> xAxis = getAxisFromDoc(xChartDoc, 0, 0, 0); - CPPUNIT_ASSERT(xAxis.is()); - - chart2::ScaleData aScaleData1 = xAxis->getScaleData(); - CPPUNIT_ASSERT(aScaleData1.Categories.is()); - CPPUNIT_ASSERT(aScaleData1.ShiftedCategoryPosition); - - // 2nd chart - xChartDoc.set(getChartDocFromDrawImpress(1, 0), uno::UNO_QUERY); - CPPUNIT_ASSERT(xChartDoc.is()); - - xAxis.set(getAxisFromDoc(xChartDoc, 0, 0, 0)); - CPPUNIT_ASSERT(xAxis.is()); - - chart2::ScaleData aScaleData2 = xAxis->getScaleData(); - CPPUNIT_ASSERT(aScaleData2.Categories.is()); - CPPUNIT_ASSERT(!aScaleData2.ShiftedCategoryPosition); -} - -void Chart2ImportTest::testTdf128733() -{ - load(u"/chart2/qa/extras/data/odt/", "tdf128733.odt"); - - Reference<chart2::XChartDocument> xChartDoc(getChartDocFromWriter(0), uno::UNO_QUERY); - CPPUNIT_ASSERT(xChartDoc.is()); - // test secondary X axis ShiftedCategoryPosition value - Reference<chart2::XAxis> xAxis = getAxisFromDoc(xChartDoc, 0, 0, 1); - CPPUNIT_ASSERT(xAxis.is()); - - chart2::ScaleData aScaleData = xAxis->getScaleData(); - CPPUNIT_ASSERT(aScaleData.Categories.is()); - CPPUNIT_ASSERT(aScaleData.ShiftedCategoryPosition); -} - -void Chart2ImportTest::testTdf128432() -{ - load(u"/chart2/qa/extras/data/ods/", "tdf128432.ods"); - - uno::Reference< chart2::XChartDocument > xChartDoc = getChartDocFromSheet(0, mxComponent); - CPPUNIT_ASSERT(xChartDoc.is()); - - Reference<chart2::XAxis> xAxis = getAxisFromDoc(xChartDoc, 0, 0, 0); - CPPUNIT_ASSERT(xAxis.is()); - - chart2::ScaleData aScaleData = xAxis->getScaleData(); - CPPUNIT_ASSERT(aScaleData.Categories.is()); - CPPUNIT_ASSERT(aScaleData.ShiftedCategoryPosition); -} - -void Chart2ImportTest::testTdf128627() -{ - load(u"/chart2/qa/extras/data/xlsx/", "tdf128627.xlsx"); - // Test ShiftedCategoryPosition for Radar Chart - uno::Reference<chart2::XChartDocument> xChartDoc = getChartDocFromSheet(0, mxComponent); - CPPUNIT_ASSERT_MESSAGE("failed to load chart", xChartDoc.is()); - - Reference<chart2::XAxis> xAxis = getAxisFromDoc(xChartDoc, 0, 0, 0); - CPPUNIT_ASSERT(xAxis.is()); - - chart2::ScaleData aScaleData = xAxis->getScaleData(); - CPPUNIT_ASSERT(aScaleData.Categories.is()); - CPPUNIT_ASSERT(!aScaleData.ShiftedCategoryPosition); -} - -void Chart2ImportTest::testTdf128634() -{ - load(u"/chart2/qa/extras/data/xlsx/", "tdf128634.xlsx"); - // Test ShiftedCategoryPosition for 3D Charts - uno::Reference<chart2::XChartDocument> xChartDoc = getChartDocFromSheet(0, mxComponent); CPPUNIT_ASSERT_MESSAGE("failed to load chart", xChartDoc.is()); - Reference<chart2::XAxis> xAxis = getAxisFromDoc(xChartDoc, 0, 0, 0); - CPPUNIT_ASSERT(xAxis.is()); - - chart2::ScaleData aScaleData = xAxis->getScaleData(); - CPPUNIT_ASSERT(aScaleData.Categories.is()); - CPPUNIT_ASSERT(aScaleData.ShiftedCategoryPosition); -} - -void Chart2ImportTest::testTdf130657() -{ - load(u"/chart2/qa/extras/data/xlsx/", "tdf130657.xlsx"); - // Test ShiftedCategoryPosition for charts which is not contain a "crossbetween" OOXML tag. - uno::Reference<chart2::XChartDocument> xChartDoc = getChartDocFromSheet(0, mxComponent); - CPPUNIT_ASSERT_MESSAGE("failed to load chart", xChartDoc.is()); - - Reference<chart2::XAxis> xAxis = getAxisFromDoc(xChartDoc, 0, 0, 0); - CPPUNIT_ASSERT(xAxis.is()); - - chart2::ScaleData aScaleData = xAxis->getScaleData(); - CPPUNIT_ASSERT(aScaleData.Categories.is()); - CPPUNIT_ASSERT(aScaleData.ShiftedCategoryPosition); -} - -namespace { - -void checkDataLabelProperties(const Reference<chart2::XDataSeries>& xDataSeries, sal_Int32 nDataPointIndex, bool bValueVisible) -{ - uno::Reference<beans::XPropertySet> xPropertySet(xDataSeries->getDataPointByIndex(nDataPointIndex), uno::UNO_SET_THROW); - chart2::DataPointLabel aLabel; - xPropertySet->getPropertyValue("Label") >>= aLabel; - CPPUNIT_ASSERT_EQUAL(bValueVisible, static_cast<bool>(aLabel.ShowNumber)); - CPPUNIT_ASSERT_EQUAL(false, static_cast<bool>(aLabel.ShowNumberInPercent)); -} - -} - -void Chart2ImportTest::testDeletedDataLabel() -{ - load(u"/chart2/qa/extras/data/xlsx/", "deleted_data_labels.xlsx"); - uno::Reference< chart2::XChartDocument > xChartDoc( getChartCompFromSheet( 0, mxComponent ), UNO_QUERY_THROW ); - Reference<chart2::XDataSeries> xDataSeries0 = getDataSeriesFromDoc(xChartDoc, 0); - CPPUNIT_ASSERT(xDataSeries0.is()); - checkDataLabelProperties(xDataSeries0, 0, true); - checkDataLabelProperties(xDataSeries0, 1, false); - checkDataLabelProperties(xDataSeries0, 2, true); - Reference<chart2::XDataSeries> xDataSeries1 = getDataSeriesFromDoc(xChartDoc, 1); - CPPUNIT_ASSERT(xDataSeries1.is()); - checkDataLabelProperties(xDataSeries1, 0, false); - checkDataLabelProperties(xDataSeries1, 1, false); - checkDataLabelProperties(xDataSeries1, 2, false); -} - -void Chart2ImportTest::testDataPointInheritedColorDOCX() -{ - load( u"/chart2/qa/extras/data/docx/", "data_point_inherited_color.docx" ); - uno::Reference< chart2::XChartDocument > xChartDoc ( getChartDocFromWriter(0), uno::UNO_QUERY); - CPPUNIT_ASSERT( xChartDoc.is() ); - css::uno::Reference<chart2::XDiagram> xDiagram(xChartDoc->getFirstDiagram(), UNO_SET_THROW); + Reference<chart2::XTitled> xTitled(xChartDoc, uno::UNO_QUERY_THROW); + uno::Reference<chart2::XTitle> xTitle = xTitled->getTitleObject(); + CPPUNIT_ASSERT_MESSAGE("chart doc should not have a title", !xTitle.is()); - Reference<chart2::XDataSeries> xDataSeries = getDataSeriesFromDoc(xChartDoc, 0); - uno::Reference<beans::XPropertySet> xPropertySet(xDataSeries->getDataPointByIndex(0), uno::UNO_SET_THROW); - CPPUNIT_ASSERT(xPropertySet.is()); - sal_Int32 nColor = xPropertySet->getPropertyValue("FillColor").get<sal_Int32>(); - CPPUNIT_ASSERT_EQUAL(sal_Int32(16776960), nColor); + // tdf#146756 use manualLayout Width that was provided (so Green; $7,654,321 is not wrapped + if (!IsDefaultDPI()) + return; + uno::Reference<chart::XChartDocument> xDoc = getChartDocFromDrawImpress(0, 0); + OString aXmlDump = OUStringToOString(getShapeDump(xDoc), RTL_TEXTENCODING_UTF8); + xmlDocUniquePtr pXmlDoc(xmlParseDoc(reinterpret_cast<const xmlChar*>(aXmlDump.getStr()))); + OString aPath("//XShape[@text='Green; $7,654,321 ']"_ostr); + assertXPath(pXmlDoc, aPath, 1); + // Expected - 1 line tall(371), not 4 lines(1481). + CPPUNIT_ASSERT_EQUAL(OUString("371"), getXPath(pXmlDoc, aPath, "sizeY"_ostr)); } -void Chart2ImportTest::testExternalStrRefsXLSX() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testTdf146756) { - load(u"/chart2/qa/extras/data/xlsx/", "external_str_ref.xlsx"); - uno::Reference< chart2::XChartDocument > xChartDoc( getChartCompFromSheet( 0, mxComponent ), UNO_QUERY_THROW ); - CPPUNIT_ASSERT(xChartDoc.is()); + // FIXME: the DPI check should be removed when either (1) the test is fixed to work with + // non-default DPI; or (2) unit tests on Windows are made to use svp VCL plugin. + if (!IsDefaultDPI()) + return; - Reference<chart2::XAxis> xAxis = getAxisFromDoc(xChartDoc, 0, 0, 0); - chart2::ScaleData aScaleData = xAxis->getScaleData(); - css::uno::Sequence<css::uno::Any> aValues = aScaleData.Categories->getValues()->getData(); - CPPUNIT_ASSERT_EQUAL(OUString("test1"), aValues[0].get<OUString>()); - CPPUNIT_ASSERT_EQUAL(OUString("test2"), aValues[1].get<OUString>()); + // given a chart on page 2 + loadFromFile(u"pptx/tdf146756_bestFit.pptx"); + Reference<chart::XChartDocument> xChartDoc = getChartDocFromDrawImpress(1, 0); + OString aXmlDump = OUStringToOString(getShapeDump(xChartDoc), RTL_TEXTENCODING_UTF8); + xmlDocUniquePtr pXmlDoc(xmlParseDoc(reinterpret_cast<const xmlChar*>(aXmlDump.getStr()))); + OString aPath("//XShape[@text='New service request and approval; 18%']"_ostr); + assertXPath(pXmlDoc, aPath, 1); + // Expected something like 4 lines tall(1697), not 11 lines(3817). + CPPUNIT_ASSERT_EQUAL(OUString("1697"), getXPath(pXmlDoc, aPath, "sizeY"_ostr)); + // Expected some reasonable maximum text length for the label like 2350, not 881. + sal_Int32 nTextLength = getXPath(pXmlDoc, aPath, "textMaximumFrameWidth"_ostr).toInt32(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2350), nTextLength); + // MSO doesn't allow much more than 1/5 of the total chart width, so never go higher than that + CPPUNIT_ASSERT_LESS(sal_Int32(2370.6), nTextLength); } -void Chart2ImportTest::testSourceNumberFormatComplexCategoriesXLS() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testFixedSizeBarChartVeryLongLabel) { - load(u"/chart2/qa/extras/data/xls/", "source_number_format_axis.xls"); - uno::Reference< chart2::XChartDocument > xChartDoc( getChartCompFromSheet( 0, mxComponent ), UNO_QUERY_THROW ); - CPPUNIT_ASSERT(xChartDoc.is()); + // Bar chart area size is fixed (not automatic) so we can't resize + // the chart area to let the label break into multiple lines. In this + // case the best course of action is to just crop the label text. This + // test checks that the rendered text is actually cropped. - Reference<chart2::XAxis> xAxis = getAxisFromDoc(xChartDoc, 0, 0, 0); - chart2::ScaleData aScaleData = xAxis->getScaleData(); - sal_Int32 nNumberFormat = aScaleData.Categories->getValues()->getNumberFormatKeyByIndex(-1); - CPPUNIT_ASSERT(nNumberFormat != 0); -} + loadFromFile(u"odp/BarChartVeryLongLabel.odp"); -void Chart2ImportTest::testSimpleCategoryAxis() -{ - load(u"/chart2/qa/extras/data/docx/", "testSimpleCategoryAxis.docx"); - uno::Reference< chart2::XChartDocument > xChartDoc(getChartDocFromWriter(0), uno::UNO_QUERY); + // Select shape 0 which has fixed size chart + Reference<chart2::XChartDocument> xChartDoc(getChartDocFromDrawImpress(0, 0), uno::UNO_QUERY); CPPUNIT_ASSERT(xChartDoc.is()); - // Test the internal data. - CPPUNIT_ASSERT(xChartDoc->hasInternalDataProvider()); - - Reference<chart2::XInternalDataProvider> xInternalProvider(xChartDoc->getDataProvider(), uno::UNO_QUERY); - CPPUNIT_ASSERT(xInternalProvider.is()); - - Reference<chart::XComplexDescriptionAccess> xDescAccess(xInternalProvider, uno::UNO_QUERY); - CPPUNIT_ASSERT(xDescAccess.is()); - - // Get the category labels. - Sequence<Sequence<OUString> > aCategories = xDescAccess->getComplexRowDescriptions(); - CPPUNIT_ASSERT_EQUAL(sal_Int32(1), aCategories[0].getLength()); - CPPUNIT_ASSERT(aCategories[0][0].endsWith("ria 1")); - CPPUNIT_ASSERT_EQUAL(sal_Int32(1), aCategories[1].getLength()); - CPPUNIT_ASSERT(aCategories[1][0].endsWith("ria 2")); - CPPUNIT_ASSERT_EQUAL(sal_Int32(1), aCategories[2].getLength()); - CPPUNIT_ASSERT(aCategories[2][0].endsWith("ria 3")); - CPPUNIT_ASSERT_EQUAL(sal_Int32(1), aCategories[3].getLength()); - CPPUNIT_ASSERT(aCategories[3][0].endsWith("ria 4")); -} - -void Chart2ImportTest::testMultilevelCategoryAxis() -{ - load(u"/chart2/qa/extras/data/docx/", "testMultilevelCategoryAxis.docx"); - uno::Reference< chart2::XChartDocument > xChartDoc(getChartDocFromWriter(0), uno::UNO_QUERY); - CPPUNIT_ASSERT(xChartDoc.is()); + Reference<chart2::XAxis> xHAxis = getAxisFromDoc(xChartDoc, 0, 0, 0); + CPPUNIT_ASSERT(xHAxis.is()); - // Test the internal data. - CPPUNIT_ASSERT(xChartDoc->hasInternalDataProvider()); + chart2::ScaleData aScaleData = xHAxis->getScaleData(); + CPPUNIT_ASSERT(aScaleData.Categories.is()); - Reference<chart2::XInternalDataProvider> xInternalProvider(xChartDoc->getDataProvider(), uno::UNO_QUERY); - CPPUNIT_ASSERT(xInternalProvider.is()); + Reference<chart2::data::XLabeledDataSequence> xLabeledDataSequence = aScaleData.Categories; + CPPUNIT_ASSERT(xLabeledDataSequence.is()); - Reference<chart::XComplexDescriptionAccess> xDescAccess(xInternalProvider, uno::UNO_QUERY); - CPPUNIT_ASSERT(xDescAccess.is()); + Reference<chart2::data::XDataSequence> xDataSequence = xLabeledDataSequence->getValues(); + CPPUNIT_ASSERT(xDataSequence.is()); - // Get the complex category labels. - Sequence<Sequence<OUString> > aCategories = xDescAccess->getComplexRowDescriptions(); - CPPUNIT_ASSERT_EQUAL(sal_Int32(4), aCategories.getLength()); - CPPUNIT_ASSERT_EQUAL(OUString("2011"), aCategories[0][0]); - CPPUNIT_ASSERT_EQUAL(OUString(""), aCategories[1][0]); - CPPUNIT_ASSERT_EQUAL(OUString("2012"), aCategories[2][0]); - CPPUNIT_ASSERT_EQUAL(OUString(""), aCategories[3][0]); - CPPUNIT_ASSERT_EQUAL(OUString("Categoria 1"), aCategories[0][1]); - CPPUNIT_ASSERT_EQUAL(OUString("Categoria 2"), aCategories[1][1]); - CPPUNIT_ASSERT_EQUAL(OUString("Categoria 3"), aCategories[2][1]); - CPPUNIT_ASSERT_EQUAL(OUString("Categoria 4"), aCategories[3][1]); -} + Reference<chart2::data::XTextualDataSequence> xTextualDataSequence(xDataSequence, uno::UNO_QUERY); + CPPUNIT_ASSERT(xTextualDataSequence.is()); -void Chart2ImportTest::testXaxisValues() -{ - load(u"/chart2/qa/extras/data/docx/", "tdf124083.docx"); - uno::Reference< chart2::XChartDocument > xChartDoc(getChartDocFromWriter(0), uno::UNO_QUERY); - CPPUNIT_ASSERT(xChartDoc.is()); + std::vector<OUString> aCategories; + const Sequence<OUString> aTextData(xTextualDataSequence->getTextualData()); + ::std::copy(aTextData.begin(), aTextData.end(), + ::std::back_inserter(aCategories)); - const uno::Reference< chart2::data::XDataSequence > xDataSeq = getDataSequenceFromDocByRole(xChartDoc, u"values-x"); - Sequence<uno::Any> xSequence = xDataSeq->getData(); - // test X values - CPPUNIT_ASSERT_EQUAL(uno::Any(0.04), xSequence[0]); - CPPUNIT_ASSERT(std::isnan(*static_cast<const double*>(xSequence[1].getValue()))); - CPPUNIT_ASSERT_EQUAL(uno::Any(0.16), xSequence[2]); - CPPUNIT_ASSERT_EQUAL(uno::Any(0.11), xSequence[3]); - CPPUNIT_ASSERT(std::isnan(*static_cast<const double*>(xSequence[4].getValue()))); -} + // Check that we have a very very long label text + CPPUNIT_ASSERT_EQUAL(OUString("Very very very very very very very very very very very loooooooooooong label"), aCategories[0]); -void Chart2ImportTest::testTdf123504() -{ - load(u"/chart2/qa/extras/data/ods/", "pie_chart_100_and_0.ods"); - Reference<chart::XChartDocument> xChartDoc(getChartDocFromSheet(0, mxComponent), - UNO_QUERY_THROW); + // Check visible text + uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(xChartDoc, uno::UNO_QUERY); + uno::Reference<drawing::XDrawPage> xDrawPage = xDrawPageSupplier->getDrawPage(); + uno::Reference<drawing::XShapes> xShapes(xDrawPage->getByIndex(0), uno::UNO_QUERY); + CPPUNIT_ASSERT(xShapes.is()); - Reference<chart2::XChartDocument> xChartDoc2(xChartDoc, UNO_QUERY_THROW); - Reference<chart2::XChartType> xChartType(getChartTypeFromDoc(xChartDoc2, 0), UNO_SET_THROW); - std::vector aDataSeriesYValues = getDataSeriesYValuesFromChartType(xChartType); - CPPUNIT_ASSERT_EQUAL(size_t(1), aDataSeriesYValues.size()); + uno::Reference<drawing::XShape> xXAxis = getShapeByName(xShapes, "CID/D=0:CS=0:Axis=0,0", + // Axis occurs twice in chart xshape representation so need to get the one related to labels + [](const uno::Reference<drawing::XShape>& rXShape) -> bool + { + uno::Reference<drawing::XShapes> xAxisShapes(rXShape, uno::UNO_QUERY); + CPPUNIT_ASSERT(xAxisShapes.is()); + uno::Reference<drawing::XShape> xChildShape(xAxisShapes->getByIndex(0), uno::UNO_QUERY); + uno::Reference< drawing::XShapeDescriptor > xShapeDescriptor(xChildShape, uno::UNO_QUERY_THROW); + return (xShapeDescriptor->getShapeType() == "com.sun.star.drawing.TextShape"); + }); + CPPUNIT_ASSERT(xXAxis.is()); - Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(xChartDoc, UNO_QUERY_THROW); - Reference<drawing::XDrawPage> xDrawPage(xDrawPageSupplier->getDrawPage(), UNO_SET_THROW); - Reference<drawing::XShapes> xShapes(xDrawPage->getByIndex(0), UNO_QUERY_THROW); - Reference<drawing::XShape> xSeriesSlices(getShapeByName(xShapes, "CID/D=0:CS=0:CT=0:Series=0"), - UNO_SET_THROW); - - Reference<container::XIndexAccess> xIndexAccess(xSeriesSlices, UNO_QUERY_THROW); - CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount()); - Reference<drawing::XShape> xSlice(xIndexAccess->getByIndex(0), UNO_QUERY_THROW); - - // Check size and position of the only slice in the chart (100%) - // In the regressed state, it used to be 0-sized at position 0,0 - awt::Point aSlicePosition = xSlice->getPosition(); - CPPUNIT_ASSERT_GREATER(sal_Int32(3000), aSlicePosition.X); - CPPUNIT_ASSERT_GREATER(sal_Int32(150), aSlicePosition.Y); - awt::Size aSliceSize = xSlice->getSize(); - CPPUNIT_ASSERT_GREATER(sal_Int32(8500), aSliceSize.Height); - CPPUNIT_ASSERT_GREATER(sal_Int32(8500), aSliceSize.Width); -} - -void Chart2ImportTest::testTdf122765() -{ - // The horizontal position of the slices was wrong. - load(u"/chart2/qa/extras/data/pptx/", "tdf122765.pptx"); - Reference<chart::XChartDocument> xChartDoc = getChartDocFromDrawImpress(0, 0); - Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(xChartDoc, UNO_QUERY_THROW); - Reference<drawing::XDrawPage> xDrawPage(xDrawPageSupplier->getDrawPage(), UNO_SET_THROW); - Reference<drawing::XShapes> xShapes(xDrawPage->getByIndex(0), UNO_QUERY_THROW); - Reference<drawing::XShape> xSeriesSlices(getShapeByName(xShapes, "CID/D=0:CS=0:CT=0:Series=0"), - UNO_SET_THROW); - - Reference<container::XIndexAccess> xIndexAccess(xSeriesSlices, UNO_QUERY_THROW); - CPPUNIT_ASSERT_EQUAL(sal_Int32(9), xIndexAccess->getCount()); - Reference<drawing::XShape> xSlice(xIndexAccess->getByIndex(0), UNO_QUERY_THROW); - - // Check position of the first slice, all slices move together, so enough to check only one. - // Wrong position was around 5856. - awt::Point aSlicePosition = xSlice->getPosition(); - CPPUNIT_ASSERT_GREATER(sal_Int32(7000), aSlicePosition.X); -} - -void Chart2ImportTest::testTdf123206CustomLabelField() -{ - // File contains the deprecated "custom-label-field" attribute of the - // "data-point" element. It should be interpreted and stored as a data point - // property. - uno::Reference< chart2::XChartDocument > xChartDoc(getChartDocFromImpress(u"/chart2/qa/extras/data/odp/", "tdf123206.odp"), uno::UNO_QUERY_THROW); - CPPUNIT_ASSERT_MESSAGE("failed to load chart", xChartDoc.is()); - CPPUNIT_ASSERT(xChartDoc.is()); - Reference<chart2::XDataSeries> xDataSeries = getDataSeriesFromDoc(xChartDoc, 0); - CPPUNIT_ASSERT(xDataSeries.is()); - Reference<beans::XPropertySet> xDp = xDataSeries->getDataPointByIndex(1); - Sequence<Reference<chart2::XDataPointCustomLabelField>> aLabelFields; - CPPUNIT_ASSERT(xDp->getPropertyValue("CustomLabelFields") >>= aLabelFields); - CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1), aLabelFields.getLength()); - CPPUNIT_ASSERT_EQUAL(OUString("Kiskacsa"), aLabelFields[0]->getString()); + uno::Reference<container::XIndexAccess> xIndexAccess(xXAxis, UNO_QUERY_THROW); -} + // Check text is actually cropped. Depending on DPI, + // it may be "Very very very very very very..." or "Very very very very very ver..." + uno::Reference<text::XTextRange> xLabel(xIndexAccess->getByIndex(0), uno::UNO_QUERY_THROW); + const OUString aLabelString = xLabel->getString(); + CPPUNIT_ASSERT_LESSEQUAL(sal_Int32(32), aLabelString.getLength()); + CPPUNIT_ASSERT(aLabelString.endsWith(u"...")); -void Chart2ImportTest::testTdf125444PercentageCustomLabel() -{ - load(u"/chart2/qa/extras/data/pptx/", "tdf125444.pptx"); + uno::Reference<drawing::XShape> xChartWall = getShapeByName(xShapes, "CID/DiagramWall="); + CPPUNIT_ASSERT(xChartWall.is()); - // 1st chart - Reference<chart2::XChartDocument> xChartDoc(getChartDocFromDrawImpress(0, 0), uno::UNO_QUERY); - CPPUNIT_ASSERT(xChartDoc.is()); + // The text shape width should be smaller than the chart wall + CPPUNIT_ASSERT_LESS(xChartWall->getSize().Width, xXAxis->getSize().Width); - uno::Reference<chart2::XDataSeries> xDataSeries(getDataSeriesFromDoc(xChartDoc, 0)); - CPPUNIT_ASSERT(xDataSeries.is()); - Reference<beans::XPropertySet> xDp = xDataSeries->getDataPointByIndex(1); - Sequence<Reference<chart2::XDataPointCustomLabelField>> aLabelFields; - CPPUNIT_ASSERT(xDp->getPropertyValue("CustomLabelFields") >>= aLabelFields); - // There are three label field: a value label, a newline and a percentage label. We want - // to assert the latter. - CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(3), aLabelFields.getLength()); - CPPUNIT_ASSERT_EQUAL(chart2::DataPointCustomLabelFieldType_PERCENTAGE, aLabelFields[2]->getFieldType()); + CPPUNIT_ASSERT_DOUBLES_EQUAL(7113, xChartWall->getSize().Height, 100); + CPPUNIT_ASSERT_DOUBLES_EQUAL(398, xXAxis->getSize().Height, 100); } -void Chart2ImportTest::testDataPointLabelCustomPos() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testAutomaticSizeBarChartVeryLongLabel) { - // test CustomLabelPosition on Bar chart - load(u"/chart2/qa/extras/data/xlsx/", "testDataPointLabelCustomPos.xlsx"); - uno::Reference< chart2::XChartDocument > xChartDoc = getChartDocFromSheet(0, mxComponent); - CPPUNIT_ASSERT(xChartDoc.is()); - uno::Reference<chart2::XDataSeries> xDataSeries(getDataSeriesFromDoc(xChartDoc, 0)); - CPPUNIT_ASSERT(xDataSeries.is()); - - uno::Reference<beans::XPropertySet> xPropertySet(xDataSeries->getDataPointByIndex(0), uno::UNO_SET_THROW); - CPPUNIT_ASSERT(xPropertySet.is()); - - chart2::RelativePosition aCustomLabelPosition; - xPropertySet->getPropertyValue("CustomLabelPosition") >>= aCustomLabelPosition; - CPPUNIT_ASSERT_DOUBLES_EQUAL(aCustomLabelPosition.Primary, -0.14621409921671025, 1e-7); - CPPUNIT_ASSERT_DOUBLES_EQUAL(aCustomLabelPosition.Secondary, -5.2887961029923464E-2, 1e-7); + // Bar chart area size is automatic so we expect the label to be broken + // into multiple lines. - sal_Int32 aPlacement; - xPropertySet->getPropertyValue("LabelPlacement") >>= aPlacement; - CPPUNIT_ASSERT_EQUAL(chart::DataLabelPlacement::OUTSIDE, aPlacement); -} + loadFromFile(u"odp/BarChartVeryLongLabel.odp"); -void Chart2ImportTest::testTdf130032() -{ - // test CustomLabelPosition on Line chart - load(u"/chart2/qa/extras/data/xlsx/", "testTdf130032.xlsx"); - uno::Reference< chart2::XChartDocument > xChartDoc = getChartDocFromSheet(0, mxComponent); + // Select shape 1, which has an automatic sized chart + Reference<chart2::XChartDocument> xChartDoc(getChartDocFromDrawImpress(0, 1), uno::UNO_QUERY); CPPUNIT_ASSERT(xChartDoc.is()); - uno::Reference<chart2::XDataSeries> xDataSeries(getDataSeriesFromDoc(xChartDoc, 0)); - CPPUNIT_ASSERT(xDataSeries.is()); - uno::Reference<beans::XPropertySet> xPropertySet(xDataSeries->getDataPointByIndex(1), uno::UNO_SET_THROW); - CPPUNIT_ASSERT(xPropertySet.is()); - - chart2::RelativePosition aCustomLabelPosition; - xPropertySet->getPropertyValue("CustomLabelPosition") >>= aCustomLabelPosition; - CPPUNIT_ASSERT_DOUBLES_EQUAL(aCustomLabelPosition.Primary, -0.0438333333333334, 1e-7); - CPPUNIT_ASSERT_DOUBLES_EQUAL(aCustomLabelPosition.Secondary, 0.086794050743657, 1e-7); - - sal_Int32 aPlacement; - xPropertySet->getPropertyValue("LabelPlacement") >>= aPlacement; - CPPUNIT_ASSERT_EQUAL(chart::DataLabelPlacement::RIGHT, aPlacement); -} + Reference<chart2::XAxis> xHAxis = getAxisFromDoc(xChartDoc, 0, 0, 0); + CPPUNIT_ASSERT(xHAxis.is()); -void Chart2ImportTest::testTdf134978() -{ - // test CustomLabelPosition on Pie chart - load(u"/chart2/qa/extras/data/xlsx/", "tdf134978.xlsx"); - uno::Reference<chart2::XChartDocument> xChartDoc = getChartDocFromSheet(0, mxComponent); - CPPUNIT_ASSERT(xChartDoc.is()); - uno::Reference<chart2::XDataSeries> xDataSeries(getDataSeriesFromDoc(xChartDoc, 0)); - CPPUNIT_ASSERT(xDataSeries.is()); + chart2::ScaleData aScaleData = xHAxis->getScaleData(); + CPPUNIT_ASSERT(aScaleData.Categories.is()); - uno::Reference<beans::XPropertySet> xPropertySet(xDataSeries->getDataPointByIndex(2), - uno::UNO_SET_THROW); - CPPUNIT_ASSERT(xPropertySet.is()); + Reference<chart2::data::XLabeledDataSequence> xLabeledDataSequence = aScaleData.Categories; + CPPUNIT_ASSERT(xLabeledDataSequence.is()); - chart2::RelativePosition aCustomLabelPosition; - xPropertySet->getPropertyValue("CustomLabelPosition") >>= aCustomLabelPosition; - CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.040273622047244093, aCustomLabelPosition.Primary, 1e-7); - CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.25635352872557599, aCustomLabelPosition.Secondary, 1e-7); -} + Reference<chart2::data::XDataSequence> xDataSequence = xLabeledDataSequence->getValues(); + CPPUNIT_ASSERT(xDataSequence.is()); -void Chart2ImportTest::testTdf119138MissingAutoTitleDeleted() -{ - load(u"/chart2/qa/extras/data/xlsx/", "tdf119138-missing-autotitledeleted.xlsx"); - Reference<chart2::XChartDocument> xChartDoc = getChartDocFromSheet(0, mxComponent); - CPPUNIT_ASSERT_MESSAGE("failed to load chart", xChartDoc.is()); + Reference<chart2::data::XTextualDataSequence> xTextualDataSequence(xDataSequence, uno::UNO_QUERY); + CPPUNIT_ASSERT(xTextualDataSequence.is()); - Reference<chart2::XTitled> xTitled(xChartDoc, uno::UNO_QUERY_THROW); - uno::Reference<chart2::XTitle> xTitle = xTitled->getTitleObject(); - CPPUNIT_ASSERT_MESSAGE("Missing autoTitleDeleted is implied to be True if title text is present", xTitle.is()); -} + std::vector<OUString> aCategories; + const Sequence<OUString> aTextData(xTextualDataSequence->getTextualData()); + ::std::copy(aTextData.begin(), aTextData.end(), + ::std::back_inserter(aCategories)); -void Chart2ImportTest::testStockChartShiftedCategoryPosition() -{ - load(u"/chart2/qa/extras/data/odt/", "stock_chart_LO_6_2.odt"); + // Check that we have a very very long label text + CPPUNIT_ASSERT_EQUAL(OUString("Very very very very very very very very very very very loooooooooooong label"), aCategories[0]); - uno::Reference<chart2::XChartDocument> xChartDoc(getChartDocFromWriter(0), uno::UNO_QUERY); - CPPUNIT_ASSERT(xChartDoc.is()); + // Check visible text + uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(xChartDoc, uno::UNO_QUERY); + uno::Reference<drawing::XDrawPage> xDrawPage = xDrawPageSupplier->getDrawPage(); + uno::Reference<drawing::XShapes> xShapes(xDrawPage->getByIndex(0), uno::UNO_QUERY); + CPPUNIT_ASSERT(xShapes.is()); - Reference<chart2::XAxis> xAxis = getAxisFromDoc(xChartDoc, 0, 0, 0); - CPPUNIT_ASSERT(xAxis.is()); + uno::Reference<drawing::XShape> xXAxis = getShapeByName(xShapes, "CID/D=0:CS=0:Axis=0,0", + // Axis occurs twice in chart xshape representation so need to get the one related to labels + [](const uno::Reference<drawing::XShape>& rXShape) -> bool + { + uno::Reference<drawing::XShapes> xAxisShapes(rXShape, uno::UNO_QUERY); + CPPUNIT_ASSERT(xAxisShapes.is()); + uno::Reference<drawing::XShape> xChildShape(xAxisShapes->getByIndex(0), uno::UNO_QUERY); + uno::Reference< drawing::XShapeDescriptor > xShapeDescriptor(xChildShape, uno::UNO_QUERY_THROW); + return (xShapeDescriptor->getShapeType() == "com.sun.star.drawing.TextShape"); + }); + CPPUNIT_ASSERT(xXAxis.is()); - chart2::ScaleData aScaleData = xAxis->getScaleData(); - CPPUNIT_ASSERT(aScaleData.Categories.is()); - CPPUNIT_ASSERT(aScaleData.ShiftedCategoryPosition); -} + uno::Reference<container::XIndexAccess> xIndexAccess(xXAxis, UNO_QUERY_THROW); -void Chart2ImportTest::testTdf133376() -{ - // FIXME: the DPI check should be removed when either (1) the test is fixed to work with - // non-default DPI; or (2) unit tests on Windows are made to use svp VCL plugin. - if (!IsDefaultDPI()) - return; + // Check text is unmodified + uno::Reference<text::XTextRange> xLabel(xIndexAccess->getByIndex(0), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Very very very very very very very very very very very loooooooooooong label"), xLabel->getString()); - load(u"/chart2/qa/extras/data/xlsx/", "tdf133376.xlsx"); - Reference<chart::XChartDocument> xChartDoc(getChartDocFromSheet(0, mxComponent), - UNO_QUERY_THROW); + uno::Reference<drawing::XShape> xChartWall = getShapeByName(xShapes, "CID/DiagramWall="); + CPPUNIT_ASSERT(xChartWall.is()); - Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(xChartDoc, UNO_QUERY_THROW); - Reference<drawing::XDrawPage> xDrawPage(xDrawPageSupplier->getDrawPage(), UNO_SET_THROW); - Reference<drawing::XShapes> xShapes(xDrawPage->getByIndex(0), UNO_QUERY_THROW); - Reference<drawing::XShape> xDataPointLabel(getShapeByName(xShapes, - "CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=2"), UNO_SET_THROW); + // The text shape width should be smaller than the chart wall + CPPUNIT_ASSERT_LESS(xChartWall->getSize().Width, xXAxis->getSize().Width); - CPPUNIT_ASSERT(xDataPointLabel.is()); - // Check the position of the 3rd data point label, which is out from the pie slice - awt::Point aLabelPosition = xDataPointLabel->getPosition(); - CPPUNIT_ASSERT_DOUBLES_EQUAL(1082, aLabelPosition.X, 30); - CPPUNIT_ASSERT_DOUBLES_EQUAL(5462, aLabelPosition.Y, 30); + CPPUNIT_ASSERT_DOUBLES_EQUAL(7200, xChartWall->getSize().Height, 100); + CPPUNIT_ASSERT_DOUBLES_EQUAL(1192, xXAxis->getSize().Height, 100); } -void Chart2ImportTest::testTdf134225() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testTotalsRowIgnored) { - load(u"/chart2/qa/extras/data/xlsx/", "tdf134225.xlsx"); - Reference<chart::XChartDocument> xChartDoc(getChartDocFromSheet(0, mxComponent), - UNO_QUERY_THROW); - - Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(xChartDoc, UNO_QUERY_THROW); - Reference<drawing::XDrawPage> xDrawPage(xDrawPageSupplier->getDrawPage(), UNO_SET_THROW); - Reference<drawing::XShapes> xShapes(xDrawPage->getByIndex(0), UNO_QUERY_THROW); - Reference<drawing::XShape> xDataPointLabel1(getShapeByName(xShapes, - "CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=0"), UNO_SET_THROW); - CPPUNIT_ASSERT(xDataPointLabel1.is()); - - Reference<drawing::XShape> xDataPointLabel2(getShapeByName(xShapes, - "CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=1"), UNO_SET_THROW); - CPPUNIT_ASSERT(xDataPointLabel2.is()); - -#if defined(_WIN32) - // font is MS Comic Sans which we can only assume is available under windows - awt::Point aLabelPosition1 = xDataPointLabel1->getPosition(); - awt::Point aLabelPosition2 = xDataPointLabel2->getPosition(); + loadFromFile(u"xlsx/barchart_totalsrow.xlsx"); + { + uno::Reference<chart2::XChartDocument> xChartDoc = getChartDocFromSheet(0, mxComponent); + CPPUNIT_ASSERT(xChartDoc.is()); - // Check the distance between the position of the 1st data point label and the second one - CPPUNIT_ASSERT_DOUBLES_EQUAL(1669, sal_Int32(aLabelPosition2.X - aLabelPosition1.X), 30); - CPPUNIT_ASSERT_DOUBLES_EQUAL(2166, sal_Int32(aLabelPosition2.Y - aLabelPosition1.Y), 30); -#endif -} + Reference<chart2::data::XDataSequence> xDataSeq = + getDataSequenceFromDocByRole(xChartDoc, u"values-y"); + CPPUNIT_ASSERT(xDataSeq.is()); -void Chart2ImportTest::testTdf136105() -{ - // FIXME: the DPI check should be removed when either (1) the test is fixed to work with - // non-default DPI; or (2) unit tests on Windows are made to use svp VCL plugin. - if (!IsDefaultDPI()) - return; - - load(u"/chart2/qa/extras/data/xlsx/", "tdf136105.xlsx"); - // 1st chart with fix inner position and size - { - Reference<chart::XChartDocument> xChartDoc(getChartDocFromSheet(0, mxComponent), - UNO_QUERY_THROW); - - Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(xChartDoc, UNO_QUERY_THROW); - Reference<drawing::XDrawPage> xDrawPage(xDrawPageSupplier->getDrawPage(), UNO_SET_THROW); - Reference<drawing::XShapes> xShapes(xDrawPage->getByIndex(0), UNO_QUERY_THROW); - Reference<drawing::XShape> xDataPointLabel(getShapeByName(xShapes, - "CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=0"), UNO_SET_THROW); - - CPPUNIT_ASSERT(xDataPointLabel.is()); - // Check the position of the 1st data point label, which is out from the pie slice - awt::Point aLabelPosition = xDataPointLabel->getPosition(); - CPPUNIT_ASSERT_DOUBLES_EQUAL(8797, aLabelPosition.X, 500); - CPPUNIT_ASSERT_DOUBLES_EQUAL(1374, aLabelPosition.Y, 500); + // Table data range is D2:D9 (8 rows) but because last row is totals row it is ignored + CPPUNIT_ASSERT_EQUAL(static_cast<sal_uInt32>(7u), xDataSeq->getData().size()); } - // 2nd chart with auto inner position and size { - Reference<chart::XChartDocument> xChartDoc(getChartDocFromSheet(1, mxComponent), - UNO_QUERY_THROW); - - Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(xChartDoc, UNO_QUERY_THROW); - Reference<drawing::XDrawPage> xDrawPage(xDrawPageSupplier->getDrawPage(), UNO_SET_THROW); - Reference<drawing::XShapes> xShapes(xDrawPage->getByIndex(0), UNO_QUERY_THROW); - Reference<drawing::XShape> xDataPointLabel(getShapeByName(xShapes, - "CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=0"), UNO_SET_THROW); - - CPPUNIT_ASSERT(xDataPointLabel.is()); - // Check the position of the 1st data point label, which is out from the pie slice - awt::Point aLabelPosition = xDataPointLabel->getPosition(); - CPPUNIT_ASSERT_DOUBLES_EQUAL(7978, aLabelPosition.X, 500); - CPPUNIT_ASSERT_DOUBLES_EQUAL(1048, aLabelPosition.Y, 500); - } -} - -void Chart2ImportTest::testTdf91250() -{ - load(u"/chart2/qa/extras/data/docx/", "tdf91250.docx"); - uno::Reference< chart2::XChartDocument > xChartDoc(getChartDocFromWriter(0), uno::UNO_QUERY); - CPPUNIT_ASSERT(xChartDoc.is()); - Reference<chart2::XInternalDataProvider> xInternalProvider(xChartDoc->getDataProvider(), uno::UNO_QUERY); - CPPUNIT_ASSERT(xInternalProvider.is()); - - Reference<chart::XComplexDescriptionAccess> xDescAccess(xInternalProvider, uno::UNO_QUERY); - CPPUNIT_ASSERT(xDescAccess.is()); - - // Get the category labels. - Sequence<OUString> aCategories = xDescAccess->getRowDescriptions(); - CPPUNIT_ASSERT_EQUAL(sal_Int32(4), aCategories.getLength()); - CPPUNIT_ASSERT_EQUAL(OUString("12.3254"), aCategories[0]); - CPPUNIT_ASSERT_EQUAL(OUString("11.62315"), aCategories[1]); - CPPUNIT_ASSERT_EQUAL(OUString("9.26"), aCategories[2]); - CPPUNIT_ASSERT_EQUAL(OUString("8.657"), aCategories[3]); -} - -void Chart2ImportTest::testTdf134111() -{ - // tdf134111 : To check TextBreak value is true - load(u"/chart2/qa/extras/data/docx/", "tdf134111.docx"); - uno::Reference< chart::XChartDocument > xChartDoc = getChartDocFromWriter(0); - CPPUNIT_ASSERT_MESSAGE("failed to load chart", xChartDoc.is()); - uno::Reference< chart::XDiagram > mxDiagram(xChartDoc->getDiagram()); - CPPUNIT_ASSERT(mxDiagram.is()); - uno::Reference< chart::XAxisXSupplier > xAxisXSupp(mxDiagram, uno::UNO_QUERY); - CPPUNIT_ASSERT(xAxisXSupp.is()); - uno::Reference< beans::XPropertySet > xAxisProp(xAxisXSupp->getXAxis()); - bool bTextBreak = false; - xAxisProp->getPropertyValue("TextBreak") >>= bTextBreak; - // Expected value of 'TextBreak' is true - CPPUNIT_ASSERT(bTextBreak); -} - -void Chart2ImportTest::testTdf136752() -{ - load(u"/chart2/qa/extras/data/xlsx/", "tdf136752.xlsx"); - Reference<chart::XChartDocument> xChartDoc(getChartDocFromSheet(0, mxComponent), - UNO_QUERY_THROW); - - Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(xChartDoc, UNO_QUERY_THROW); - Reference<drawing::XDrawPage> xDrawPage(xDrawPageSupplier->getDrawPage(), UNO_SET_THROW); - Reference<drawing::XShapes> xShapes(xDrawPage->getByIndex(0), UNO_QUERY_THROW); - Reference<drawing::XShape> xDataPointLabel(getShapeByName(xShapes, - "CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=0"), UNO_SET_THROW); - - CPPUNIT_ASSERT(xDataPointLabel.is()); - // Check the position of the 1st data point label, which is out from the pie slice - awt::Point aLabelPosition = xDataPointLabel->getPosition(); - CPPUNIT_ASSERT_DOUBLES_EQUAL(8675, aLabelPosition.X, 500); - CPPUNIT_ASSERT_DOUBLES_EQUAL(1458, aLabelPosition.Y, 500); -} - -void Chart2ImportTest::testTdf137505() -{ - load(u"/chart2/qa/extras/data/xlsx/", "tdf137505.xlsx"); - Reference<chart::XChartDocument> xChartDoc(getChartDocFromSheet(0, mxComponent), - UNO_QUERY_THROW); + uno::Reference<chart2::XChartDocument> xChartDoc = getChartDocFromSheet(1, mxComponent); + CPPUNIT_ASSERT(xChartDoc.is()); - Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(xChartDoc, UNO_QUERY_THROW); - Reference<drawing::XDrawPage> xDrawPage(xDrawPageSupplier->getDrawPage(), UNO_SET_THROW); - Reference<drawing::XShape> xCustomShape(xDrawPage->getByIndex(1), UNO_QUERY_THROW); - CPPUNIT_ASSERT(xCustomShape.is()); + Reference<chart2::data::XDataSequence> xDataSeq = + getDataSequenceFromDocByRole(xChartDoc, u"values-y"); + CPPUNIT_ASSERT(xDataSeq.is()); - float nFontSize; - Reference< text::XText > xRange(xCustomShape, uno::UNO_QUERY_THROW); - Reference < text::XTextCursor > xAt = xRange->createTextCursor(); - Reference< beans::XPropertySet > xProps(xAt, UNO_QUERY); - // check the text size of custom shape, inside the chart. - CPPUNIT_ASSERT(xProps->getPropertyValue("CharHeight") >>= nFontSize); - CPPUNIT_ASSERT_EQUAL(float(12), nFontSize); + // Table data range is D2:D10 (9 rows) and totals row isn't the last row so it's not ignored + CPPUNIT_ASSERT_EQUAL(static_cast<sal_uInt32>(9u), xDataSeq->getData().size()); + } } -void Chart2ImportTest::testTdf137734() +CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testPieChartPlotAreaMarginWithAutomaticLayout) { - load(u"/chart2/qa/extras/data/xlsx/", "tdf137734.xlsx"); - Reference<chart2::XChartDocument> xChartDoc = getChartDocFromSheet(0, mxComponent); - CPPUNIT_ASSERT_MESSAGE("failed to load chart", xChartDoc.is()); - CPPUNIT_ASSERT(xChartDoc.is()); - Reference<chart2::XDataSeries> xDataSeries = getDataSeriesFromDoc(xChartDoc, 0); - CPPUNIT_ASSERT(xDataSeries.is()); - Reference<beans::XPropertySet> xPropSet(xDataSeries, uno::UNO_QUERY_THROW); - uno::Any aAny = xPropSet->getPropertyValue("VaryColorsByPoint"); - bool bVaryColor = true; - CPPUNIT_ASSERT(aAny >>= bVaryColor); - CPPUNIT_ASSERT(!bVaryColor); + // tdf#91265 + // Checks the margin and calculation of the plot area for the pie chart inside the chart area. - // tdf#126133 Test primary X axis Rotation value - Reference<chart2::XAxis> xXAxis = getAxisFromDoc(xChartDoc, 0, 0, 0); - CPPUNIT_ASSERT(xXAxis.is()); - Reference<chart2::XTitled> xTitled(xXAxis, uno::UNO_QUERY_THROW); - Reference<chart2::XTitle> xTitle = xTitled->getTitleObject(); - CPPUNIT_ASSERT(xTitle.is()); - Reference<beans::XPropertySet> xTitlePropSet(xTitle, uno::UNO_QUERY_THROW); - uno::Any aAny2 = xTitlePropSet->getPropertyValue("TextRotation"); - double nRotation = -1; - CPPUNIT_ASSERT(aAny2 >>= nRotation); - CPPUNIT_ASSERT_EQUAL(0.0, nRotation); -} + loadFromFile(u"pptx/PieChartWithAutomaticLayout_SizeAndPosition.pptx"); -void Chart2ImportTest::testTdf137874() -{ - load(u"/chart2/qa/extras/data/xlsx/", "piechart_legend.xlsx"); - Reference<chart::XChartDocument> xChartDoc(getChartDocFromSheet(0, mxComponent), - UNO_QUERY_THROW); - Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(xChartDoc, UNO_QUERY_THROW); - Reference<drawing::XDrawPage> xDrawPage(xDrawPageSupplier->getDrawPage(), UNO_SET_THROW); - Reference<drawing::XShapes> xShapes(xDrawPage->getByIndex(0), UNO_QUERY_THROW); - Reference<drawing::XShape> xLegendEntry; - xLegendEntry - = getShapeByName(xShapes, "CID/MultiClick/D=0:CS=0:CT=0:Series=0:Point=0:LegendEntry=0"); - CPPUNIT_ASSERT(xLegendEntry.is()); -} - -void Chart2ImportTest::testTdfCustomShapePos() -{ - load(u"/chart2/qa/extras/data/docx/", "testcustomshapepos.docx"); - Reference< chart2::XChartDocument > xChartDoc(getChartDocFromWriter(0), UNO_QUERY_THROW); - Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(xChartDoc, UNO_QUERY_THROW); - Reference<drawing::XDrawPage> xDrawPage(xDrawPageSupplier->getDrawPage(), UNO_SET_THROW); - // test position and size of a custom shape within a chart, rotated by 0 degree. + OUString aCheckShapeName = "CID/D=0:CS=0:CT=0:Series=0"; + // Chart Wuse case Width == Height { - Reference<drawing::XShape> xCustomShape(xDrawPage->getByIndex(0), UNO_QUERY_THROW); - awt::Point aPosition = xCustomShape->getPosition(); - CPPUNIT_ASSERT_DOUBLES_EQUAL(8845, aPosition.X, 300); - CPPUNIT_ASSERT_DOUBLES_EQUAL(855, aPosition.Y, 300); - awt::Size aSize = xCustomShape->getSize(); - CPPUNIT_ASSERT_DOUBLES_EQUAL(4831, aSize.Width, 300); - CPPUNIT_ASSERT_DOUBLES_EQUAL(1550, aSize.Height, 300); + // Load chart Chart_2_2 - 2cm x 2cm - + auto xDocument = getChartDocFromDrawImpressNamed(0, u"Chart_2_2"); + CPPUNIT_ASSERT(xDocument.is()); + + uno::Reference<chart2::XChartDocument>xChartDocument(xDocument, uno::UNO_QUERY); + CPPUNIT_ASSERT(xChartDocument.is()); + + // Get the shape of the diagram / chart + uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(xChartDocument, uno::UNO_QUERY); + CPPUNIT_ASSERT(xDrawPageSupplier.is()); + uno::Reference<drawing::XDrawPage> xDrawPage = xDrawPageSupplier->getDrawPage(); + uno::Reference<drawing::XShapes> xShapes(xDrawPage->getByIndex(0), uno::UNO_QUERY); + CPPUNIT_ASSERT(xShapes.is()); + + uno::Reference<drawing::XShape> xChartDiagramShape = getShapeByName(xShapes, aCheckShapeName); + CPPUNIT_ASSERT(xChartDiagramShape.is()); + + // Size + CPPUNIT_ASSERT_DOUBLES_EQUAL(1300, xChartDiagramShape->getSize().Width, 5); // calculated chart area size - 2 * margin + CPPUNIT_ASSERT_DOUBLES_EQUAL(1300, xChartDiagramShape->getSize().Height, 5); // calculated chart area size - 2 * margin + // Position + CPPUNIT_ASSERT_DOUBLES_EQUAL(350, xChartDiagramShape->getPosition().X, 5); // margin + CPPUNIT_ASSERT_DOUBLES_EQUAL(350, xChartDiagramShape->getPosition().Y, 5); // margin } - // test position and size of a custom shape within a chart, rotated by 90 degree. + + // Chart use case - Width < Height { - Reference<drawing::XShape> xCustomShape(xDrawPage->getByIndex(1), UNO_QUERY_THROW); - awt::Point aPosition = xCustomShape->getPosition(); - CPPUNIT_ASSERT_DOUBLES_EQUAL(1658, aPosition.X, 300); - CPPUNIT_ASSERT_DOUBLES_EQUAL(6119, aPosition.Y, 300); - awt::Size aSize = xCustomShape->getSize(); - CPPUNIT_ASSERT_DOUBLES_EQUAL(4165, aSize.Width, 300); - CPPUNIT_ASSERT_DOUBLES_EQUAL(1334, aSize.Height, 300); + // Load chart Chart_3_4 - 3cm x 4cm + auto xDocument = getChartDocFromDrawImpressNamed(0, u"Chart_3_4"); + CPPUNIT_ASSERT(xDocument.is()); + + uno::Reference<chart2::XChartDocument>xChartDocument(xDocument, uno::UNO_QUERY); + CPPUNIT_ASSERT(xChartDocument.is()); + + // Get the shape of the diagram / chart + uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(xChartDocument, uno::UNO_QUERY); + CPPUNIT_ASSERT(xDrawPageSupplier.is()); + uno::Reference<drawing::XDrawPage> xDrawPage = xDrawPageSupplier->getDrawPage(); + uno::Reference<drawing::XShapes> xShapes(xDrawPage->getByIndex(0), uno::UNO_QUERY); + CPPUNIT_ASSERT(xShapes.is()); + + uno::Reference<drawing::XShape> xChartDiagramShape = getShapeByName(xShapes, aCheckShapeName); + CPPUNIT_ASSERT(xChartDiagramShape.is()); + + // Size + CPPUNIT_ASSERT_DOUBLES_EQUAL(2300, xChartDiagramShape->getSize().Width, 5); // calculated chart area size - 2 * margin + CPPUNIT_ASSERT_DOUBLES_EQUAL(2300, xChartDiagramShape->getSize().Height, 5); // calculated chart area size - 2 * margin + // Position + CPPUNIT_ASSERT_DOUBLES_EQUAL(350, xChartDiagramShape->getPosition().X, 5); // margin + CPPUNIT_ASSERT_DOUBLES_EQUAL(850, xChartDiagramShape->getPosition().Y, 5); // margin + calculated centering } -} -void Chart2ImportTest::testTdf121281() -{ - load(u"/chart2/qa/extras/data/xlsx/", "incorrect_label_position.xlsx"); - Reference<chart::XChartDocument> xChartDoc(getChartDocFromSheet(0, mxComponent), - UNO_QUERY_THROW); - Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(xChartDoc, UNO_QUERY_THROW); - Reference<drawing::XDrawPage> xDrawPage(xDrawPageSupplier->getDrawPage(), UNO_SET_THROW); - Reference<drawing::XShapes> xShapes(xDrawPage->getByIndex(0), UNO_QUERY_THROW); - Reference<drawing::XShape> xDataPointLabel( - getShapeByName(xShapes, - "CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=0"), - UNO_SET_THROW); - - CPPUNIT_ASSERT(xDataPointLabel.is()); - awt::Point aLabelPosition = xDataPointLabel->getPosition(); - // This failed, if the data label flowed out of the chart area. - CPPUNIT_ASSERT_GREATEREQUAL(static_cast<sal_Int32>(0), aLabelPosition.Y); + // Chart use case - Width > Height + { + // Load chart Chart_3_2 - 3cm x 2cm + auto xDocument = getChartDocFromDrawImpressNamed(0, u"Chart_3_2"); + CPPUNIT_ASSERT(xDocument.is()); + + uno::Reference<chart2::XChartDocument>xChartDocument(xDocument, uno::UNO_QUERY); + CPPUNIT_ASSERT(xChartDocument.is()); + + // Get the shape of the diagram / chart + uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(xChartDocument, uno::UNO_QUERY); + CPPUNIT_ASSERT(xDrawPageSupplier.is()); + uno::Reference<drawing::XDrawPage> xDrawPage = xDrawPageSupplier->getDrawPage(); + uno::Reference<drawing::XShapes> xShapes(xDrawPage->getByIndex(0), uno::UNO_QUERY); + CPPUNIT_ASSERT(xShapes.is()); + + uno::Reference<drawing::XShape> xChartDiagramShape = getShapeByName(xShapes, aCheckShapeName); + CPPUNIT_ASSERT(xChartDiagramShape.is()); + + // Size + CPPUNIT_ASSERT_DOUBLES_EQUAL(1300, xChartDiagramShape->getSize().Width, 5); // calculated chart area size - 2 * margin + CPPUNIT_ASSERT_DOUBLES_EQUAL(1300, xChartDiagramShape->getSize().Height, 5); // calculated chart area size - 2 * margin + // Position + CPPUNIT_ASSERT_DOUBLES_EQUAL(850, xChartDiagramShape->getPosition().X, 5); // margin + calculated centering + CPPUNIT_ASSERT_DOUBLES_EQUAL(350, xChartDiagramShape->getPosition().Y, 5); // margin + } } -CPPUNIT_TEST_SUITE_REGISTRATION(Chart2ImportTest); - +} // end of anonymous namespace CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |