/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * This file is part of the LibreOffice project. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "charttest.hxx" #include #include #include #include using uno::Reference; using beans::XPropertySet; class Chart2ExportTest3 : public ChartTest { public: Chart2ExportTest3() : ChartTest(u"/chart2/qa/extras/data/"_ustr) {} }; CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testTdf108107) { loadFromFile(u"xlsx/tdf108107.xlsx"); // FIXME: validation error in OOXML export: Errors: 1 skipValidation(); save(u"Calc Office Open XML"_ustr); xmlDocUniquePtr pXmlDoc = parseExport(u"xl/charts/chart1.xml"_ustr); CPPUNIT_ASSERT(pXmlDoc); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:lineChart/c:ser/c:dLbls/c:dLbl[1]/c:idx", "val", u"1"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:lineChart/c:ser/c:dLbls/c:dLbl[1]/c:txPr/a:p/a:pPr/a:defRPr", "b", u"1"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:lineChart/c:ser/c:dLbls/c:dLbl[1]/c:txPr/a:p/a:pPr/a:defRPr", "sz", u"2000"); } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testTdf114139) { loadFromFile(u"xlsx/tdf114139.xlsx"); save(u"Calc Office Open XML"_ustr); xmlDocUniquePtr pXmlDoc = parseExport(u"xl/charts/chart1.xml"_ustr); CPPUNIT_ASSERT(pXmlDoc); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:pie3DChart", 1); //no fill assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:spPr", 0); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:spPr/a:solidFill", 0); } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testTdf64224) { loadFromFile(u"ods/tdf64224.ods"); save(u"Calc Office Open XML"_ustr); xmlDocUniquePtr pXmlDoc = parseExport(u"xl/charts/chart1.xml"_ustr); CPPUNIT_ASSERT(pXmlDoc); //no fill assertXPath(pXmlDoc, "/c:chartSpace/c:spPr/a:noFill", 1); assertXPath(pXmlDoc, "/c:chartSpace/c:spPr/a:solidFill", 0); } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testChartTitlePropertiesColorFillDOCX) { loadFromFile(u"docx/testChartTitlePropertiesColorFill.docx"); save(u"Office Open XML Text"_ustr); xmlDocUniquePtr pXmlDoc = parseExport(u"word/charts/chart1.xml"_ustr); CPPUNIT_ASSERT(pXmlDoc); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:spPr/a:solidFill/a:srgbClr", "val", u"ff0000"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:spPr/a:ln/a:noFill", 1); } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testChartTitlePropertiesGradientFillDOCX) { loadFromFile(u"docx/testChartTitlePropertiesGradientFill.docx"); save(u"Office Open XML Text"_ustr); xmlDocUniquePtr pXmlDoc = parseExport(u"word/charts/chart1.xml"_ustr); CPPUNIT_ASSERT(pXmlDoc); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:spPr/a:gradFill/a:gsLst/a:gs[1]/a:srgbClr", "val", u"cccccc"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:spPr/a:gradFill/a:gsLst/a:gs[2]/a:srgbClr", "val", u"666666"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:spPr/a:ln/a:noFill", 1); } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testChartTitlePropertiesBitmapFillDOCX) { loadFromFile(u"docx/testChartTitlePropertiesBitmapFill.docx"); save(u"Office Open XML Text"_ustr); xmlDocUniquePtr pXmlDoc = parseExport(u"word/charts/chart1.xml"_ustr); CPPUNIT_ASSERT(pXmlDoc); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:spPr/a:blipFill/a:blip", "embed", u"rId1"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:spPr/a:ln/a:noFill", 1); } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testColorGradientWithTransparencyDOCX) { // Test color gradient (two color) with gradient transparency loadFromFile(u"docx/testColorGradientWithTransparency.docx"); save(u"Office Open XML Text"_ustr); xmlDocUniquePtr pXmlDoc = parseExport(u"word/charts/chart1.xml"_ustr); CPPUNIT_ASSERT(pXmlDoc); // Test the transparency of the first color assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:spPr/a:gradFill/a:gsLst/a:gs[1]/a:srgbClr/a:alpha", "val", u"60000"); // Test the transparency of the second color assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:spPr/a:gradFill/a:gsLst/a:gs[2]/a:srgbClr/a:alpha", "val", u"90000"); } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testColorGradientWithTransparencyODS) { // Test color gradient (two color) with simple transparency loadFromFile(u"ods/testColorGradientWithTransparency.ods"); save(u"Calc Office Open XML"_ustr); xmlDocUniquePtr pXmlDoc = parseExport(u"xl/charts/chart1.xml"_ustr); CPPUNIT_ASSERT(pXmlDoc); // Test the transparency of the first color assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:spPr/a:gradFill/a:gsLst/a:gs[1]/a:srgbClr/a:alpha", "val", u"60000"); // Test the transparency of the second color assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:spPr/a:gradFill/a:gsLst/a:gs[2]/a:srgbClr/a:alpha", "val", u"60000"); } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testColorGradientStopXLSX) { // Test color gradient (two color) stop of the first color loadFromFile(u"xlsx/tdf128619.xlsx"); save(u"Calc Office Open XML"_ustr); xmlDocUniquePtr pXmlDoc = parseExport(u"xl/charts/chart1.xml"_ustr); CPPUNIT_ASSERT(pXmlDoc); // Test the position of the first color assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:spPr/a:gradFill/a:gsLst/a:gs[1]", "pos", u"45000"); // Test the position of the second color assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:spPr/a:gradFill/a:gsLst/a:gs[2]", "pos", u"100000"); } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testRadialColorGradientDOCX) { loadFromFile(u"docx/tdf128794.docx"); save(u"Office Open XML Text"_ustr); xmlDocUniquePtr pXmlDoc = parseExport(u"word/charts/chart1.xml"_ustr); CPPUNIT_ASSERT(pXmlDoc); // Test the gradient style (if there is no 'a:path' attribute, it is a linear gradient) assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:spPr/a:gradFill/a:path", 0); // Test the linear gradient angle assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:spPr/a:gradFill/a:lin", "ang", u"13500000"); } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testBarChartDataPointPropDOCX) { loadFromFile(u"docx/testBarChartDataPointPropDOCX.docx"); save(u"Office Open XML Text"_ustr); xmlDocUniquePtr pXmlDoc = parseExport(u"word/charts/chart1.xml"_ustr); CPPUNIT_ASSERT(pXmlDoc); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:varyColors", "val", u"0"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dPt[1]/c:idx", "val", u"1"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dPt[1]/c:spPr/a:gradFill/a:gsLst/a:gs[1]/a:srgbClr", "val", u"f6f8fc"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dPt[1]/c:spPr/a:gradFill/a:gsLst/a:gs[2]/a:srgbClr", "val", u"c7d5ed"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dPt[1]/c:spPr/a:ln/a:solidFill/a:srgbClr", "val", u"70ad47"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dPt[2]/c:idx", "val", u"2"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dPt[2]/c:spPr/a:solidFill/a:srgbClr", "val", u"ff0000"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dPt[2]/c:spPr/a:ln/a:solidFill/a:srgbClr", "val", u"000000"); } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testFdo83058dlblPos) { loadFromFile(u"docx/fdo83058_dlblPos.docx"); // FIXME: validation error in OOXML export: Errors: 1 skipValidation(); save(u"Office Open XML Text"_ustr); xmlDocUniquePtr pXmlDoc = parseExport(u"word/charts/chart1.xml"_ustr); CPPUNIT_ASSERT(pXmlDoc); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser[1]/c:dLbls[1]/c:dLbl[2]/c:dLblPos", "val", u"outEnd"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser[1]/c:dLbls[1]/c:dLbl[3]/c:dLblPos", "val", u"outEnd"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser[1]/c:dLbls[1]/c:dLbl[4]/c:dLblPos", "val", u"outEnd"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser[1]/c:dLbls[1]/c:dLbl[5]/c:dLblPos", "val", u"outEnd"); } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testAutoTitleDelXLSX) { loadFromFile(u"xlsx/autotitledel_2007.xlsx"); save(u"Calc Office Open XML"_ustr); xmlDocUniquePtr pXmlDoc = parseExport(u"xl/charts/chart1.xml"_ustr); CPPUNIT_ASSERT(pXmlDoc); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:autoTitleDeleted", "val", u"0"); } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testDispBlanksAsXLSX) { loadFromFile(u"xlsx/dispBlanksAs_2007.xlsx"); save(u"Calc Office Open XML"_ustr); xmlDocUniquePtr pXmlDoc = parseExport(u"xl/charts/chart1.xml"_ustr); CPPUNIT_ASSERT(pXmlDoc); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:dispBlanksAs", "val", u"gap"); } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testMarkerColorXLSX) { loadFromFile(u"xlsx/markerColor.xlsx"); save(u"Calc Office Open XML"_ustr); xmlDocUniquePtr pXmlDoc = parseExport(u"xl/charts/chart1.xml"_ustr); CPPUNIT_ASSERT(pXmlDoc); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:scatterChart/c:ser/c:marker/c:spPr/a:solidFill/a:srgbClr", "val", u"92d050"); } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testRoundedCornersXLSX) { loadFromFile(u"xlsx/markerColor.xlsx"); save(u"Calc Office Open XML"_ustr); xmlDocUniquePtr pXmlDoc = parseExport(u"xl/charts/chart1.xml"_ustr); CPPUNIT_ASSERT(pXmlDoc); assertXPath(pXmlDoc, "/c:chartSpace/c:roundedCorners", "val", u"0"); } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testAxisNumberFormatXLSX) { loadFromFile(u"ods/axis_number_format.ods"); save(u"Calc Office Open XML"_ustr); xmlDocUniquePtr pXmlDoc = parseExport(u"xl/charts/chart1.xml"_ustr); CPPUNIT_ASSERT(pXmlDoc); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:valAx", 2); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:valAx[1]/c:numFmt", "formatCode", u"0.00E+000"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:valAx[1]/c:numFmt", "sourceLinked", u"0"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:valAx[2]/c:numFmt", "formatCode", u"[$$-409]#,##0;\\-[$$-409]#,##0"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:valAx[2]/c:numFmt", "sourceLinked", u"1"); } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testDataPointLabelNumberFormatXLSX) { // FIXME: validation error in OOXML export: Errors: 1 skipValidation(); loadFromFile(u"ods/tdf123774.ods"); { save(u"Calc Office Open XML"_ustr); xmlDocUniquePtr pXmlDoc = parseExport(u"xl/charts/chart1.xml"_ustr); CPPUNIT_ASSERT(pXmlDoc); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:pieChart/c:ser/c:dLbls/c:numFmt", "formatCode", u"[$-40E]0.00%"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:pieChart/c:ser/c:dLbls/c:numFmt", "sourceLinked", u"0"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:pieChart/c:ser/c:dLbls/c:dLbl[1]/c:numFmt", "formatCode", u"[$-40E]0.00%"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:pieChart/c:ser/c:dLbls/c:dLbl[1]/c:numFmt", "sourceLinked", u"0"); } loadFromFile(u"xlsx/tdf130986.xlsx"); { save(u"Calc Office Open XML"_ustr); xmlDocUniquePtr pXmlDoc = parseExport(u"xl/charts/chart1.xml"_ustr); CPPUNIT_ASSERT(pXmlDoc); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dLbls/c:dLbl/c:idx", "val", u"1"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dLbls/c:dLbl/c:numFmt", "formatCode", u"0.00E+00"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dLbls/c:dLbl/c:numFmt", "sourceLinked", u"0"); } } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testDataLabelDefaultValuesXLSX) { loadFromFile(u"xlsx/data_label.xlsx"); Reference< chart2::XChartDocument> xDoc = getChartDocFromSheet(0); Reference xSeries = getDataSeriesFromDoc(xDoc, 0); Reference xPropSet(xSeries, uno::UNO_QUERY_THROW); uno::Any aAny = xPropSet->getPropertyValue(u"Label"_ustr); chart2::DataPointLabel aLabel; CPPUNIT_ASSERT(aAny >>= aLabel); CPPUNIT_ASSERT(aLabel.ShowNumber); save(u"Calc Office Open XML"_ustr); xmlDocUniquePtr pXmlDoc = parseExport(u"xl/charts/chart1.xml"_ustr); CPPUNIT_ASSERT(pXmlDoc); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dLbls/c:showVal", "val", u"1"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dLbls/c:dLblPos", "val", u"outEnd"); } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testDataLabelFillColor) { loadFromFile(u"xlsx/data_labels_fill_color.xlsx"); Reference< chart2::XChartDocument> xDoc = getChartDocFromSheet(0); Reference xSeries = getDataSeriesFromDoc(xDoc, 0); Reference xPropSet(xSeries, uno::UNO_QUERY_THROW); uno::Any aAny = xPropSet->getPropertyValue(u"LabelFillColor"_ustr); sal_Int32 nLabelFillColor; CPPUNIT_ASSERT(aAny >>= nLabelFillColor); save(u"Calc Office Open XML"_ustr); xmlDocUniquePtr pXmlDoc = parseExport(u"xl/charts/chart1.xml"_ustr); CPPUNIT_ASSERT(pXmlDoc); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dLbls/c:spPr/a:solidFill/a:srgbClr", "val", u"F79646"); } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testTitleOverlayXLSX) { loadFromFile(u"xlsx/chart_title.xlsx"); save(u"Calc Office Open XML"_ustr); xmlDocUniquePtr pXmlDoc = parseExport(u"xl/charts/chart1.xml"_ustr); CPPUNIT_ASSERT(pXmlDoc); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:overlay", "val", u"0"); } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testInvertIfNegativeXLSX) { loadFromFile(u"xlsx/bar_chart_simple.xlsx"); save(u"Calc Office Open XML"_ustr); xmlDocUniquePtr pXmlDoc = parseExport(u"xl/charts/chart1.xml"_ustr); CPPUNIT_ASSERT(pXmlDoc); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:invertIfNegative", "val", u"0"); } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testBubble3DXLSX) { loadFromFile(u"xlsx/bubble_chart_simple.xlsx"); save(u"Calc Office Open XML"_ustr); xmlDocUniquePtr pXmlDoc = parseExport(u"xl/charts/chart1.xml"_ustr); CPPUNIT_ASSERT(pXmlDoc); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:bubbleChart/c:ser[1]/c:bubble3D", "val", u"0"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:bubbleChart/c:ser[2]/c:bubble3D", "val", u"0"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:bubbleChart/c:ser[3]/c:bubble3D", "val", u"0"); } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testNoMarkerXLSX) { loadFromFile(u"xlsx/no_marker.xlsx"); save(u"Calc Office Open XML"_ustr); xmlDocUniquePtr pXmlDoc = parseExport(u"xl/charts/chart1.xml"_ustr); CPPUNIT_ASSERT(pXmlDoc); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:lineChart/c:ser[1]/c:marker/c:symbol", "val", u"none"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:lineChart/c:ser[2]/c:marker/c:symbol", "val", u"none"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:lineChart/c:marker", "val", u"0"); } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testTitleManualLayoutXLSX) { loadFromFile(u"xlsx/title_manual_layout.xlsx"); save(u"Calc Office Open XML"_ustr); xmlDocUniquePtr pXmlDoc = parseExport(u"xl/charts/chart1.xml"_ustr); CPPUNIT_ASSERT(pXmlDoc); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:layout/c:manualLayout/c:layoutTarget", 0); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:layout/c:manualLayout/c:xMode", "val", u"edge"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:layout/c:manualLayout/c:yMode", "val", u"edge"); OUString aXVal = getXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:layout/c:manualLayout/c:x", "val"); double nX = aXVal.toDouble(); CPPUNIT_ASSERT(nX > 0); CPPUNIT_ASSERT(nX < 1); OUString aYVal = getXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:layout/c:manualLayout/c:y", "val"); double nY = aYVal.toDouble(); CPPUNIT_ASSERT(nY > 0); CPPUNIT_ASSERT(nY < 1); CPPUNIT_ASSERT(nX != nY); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:bodyPr", "rot", u"1200000"); } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testPlotAreaManualLayoutXLSX) { loadFromFile(u"xlsx/plot_area_manual_layout.xlsx"); save(u"Calc Office Open XML"_ustr); xmlDocUniquePtr pXmlDoc = parseExport(u"xl/charts/chart1.xml"_ustr); CPPUNIT_ASSERT(pXmlDoc); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:layout/c:manualLayout/c:layoutTarget", "val", u"inner"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:layout/c:manualLayout/c:xMode", "val", u"edge"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:layout/c:manualLayout/c:yMode", "val", u"edge"); OUString aXVal = getXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:layout/c:manualLayout/c:x", "val"); double nX = aXVal.toDouble(); CPPUNIT_ASSERT(nX > 0); CPPUNIT_ASSERT(nX < 1); OUString aYVal = getXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:layout/c:manualLayout/c:y", "val"); double nY = aYVal.toDouble(); CPPUNIT_ASSERT(nY > 0); CPPUNIT_ASSERT(nY < 1); CPPUNIT_ASSERT(nX != nY); OUString aWVal = getXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:layout/c:manualLayout/c:w", "val"); double nW = aWVal.toDouble(); CPPUNIT_ASSERT(nW > 0); CPPUNIT_ASSERT(nW < 1); OUString aHVal = getXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:layout/c:manualLayout/c:h", "val"); double nH = aHVal.toDouble(); CPPUNIT_ASSERT(nH > 0); CPPUNIT_ASSERT(nH < 1); CPPUNIT_ASSERT(nH != nW); } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testLegendManualLayoutXLSX) { loadFromFile(u"xlsx/legend_manual_layout.xlsx"); save(u"Calc Office Open XML"_ustr); xmlDocUniquePtr pXmlDoc = parseExport(u"xl/charts/chart1.xml"_ustr); CPPUNIT_ASSERT(pXmlDoc); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:layout/c:manualLayout/c:layoutTarget", 0); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:legend/c:layout/c:manualLayout/c:xMode", "val", u"edge"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:legend/c:layout/c:manualLayout/c:yMode", "val", u"edge"); OUString aXVal = getXPath(pXmlDoc, "/c:chartSpace/c:chart/c:legend/c:layout/c:manualLayout/c:x", "val"); double nX = aXVal.toDouble(); CPPUNIT_ASSERT(nX > 0); CPPUNIT_ASSERT(nX < 1); OUString aYVal = getXPath(pXmlDoc, "/c:chartSpace/c:chart/c:legend/c:layout/c:manualLayout/c:y", "val"); double nY = aYVal.toDouble(); CPPUNIT_ASSERT(nY > 0); CPPUNIT_ASSERT(nY < 1); CPPUNIT_ASSERT(nX != nY); OUString aWVal = getXPath(pXmlDoc, "/c:chartSpace/c:chart/c:legend/c:layout/c:manualLayout/c:w", "val"); double nW = aWVal.toDouble(); CPPUNIT_ASSERT(nW > 0); CPPUNIT_ASSERT(nW < 1); OUString aHVal = getXPath(pXmlDoc, "/c:chartSpace/c:chart/c:legend/c:layout/c:manualLayout/c:h", "val"); double nH = aHVal.toDouble(); CPPUNIT_ASSERT(nH > 0); CPPUNIT_ASSERT(nH < 1); CPPUNIT_ASSERT(nH != nW); // Make sure that default text font size is preserved after export assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:legend/c:txPr/a:p/a:pPr/a:defRPr", "sz", u"900"); } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testChartSubTitle) { loadFromFile(u"ods/testChartSubTitle.ods"); save(u"Calc Office Open XML"_ustr); xmlDocUniquePtr pXmlDoc = parseExport(u"xl/charts/chart1.xml"_ustr); CPPUNIT_ASSERT(pXmlDoc); // test properties of subtitle // paragraph props assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p/a:pPr/a:defRPr", "sz", u"1100"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p/a:pPr/a:defRPr", "b", u"1"); // run props assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p/a:r/a:rPr", "sz", u"1100"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p/a:r/a:rPr", "b", u"1"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p/a:r/a:rPr/a:solidFill/a:srgbClr", "val", u"00a933"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p/a:r/a:rPr/a:latin", "typeface", u"Times New Roman"); // text assertXPathContent(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p/a:r/a:t", u"It is a Subtitle"); // shape props assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:spPr/a:solidFill/a:srgbClr", "val", u"b2b2b2"); } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testChartMainWithSubTitle) { loadFromFile(u"ods/testChartMainWithSubTitle.ods"); save(u"Calc Office Open XML"_ustr); xmlDocUniquePtr pXmlDoc = parseExport(u"xl/charts/chart1.xml"_ustr); CPPUNIT_ASSERT(pXmlDoc); // test properties of title // paragraph props assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p[1]/a:pPr/a:defRPr", "sz", u"1300"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p[1]/a:pPr/a:defRPr", "b", u"0"); // run props assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p[1]/a:r/a:rPr", "sz", u"1300"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p[1]/a:r/a:rPr", "b", u"0"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p[1]/a:r/a:rPr", "i", u"1"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p[1]/a:r/a:rPr/a:solidFill/a:srgbClr", "val", u"f10d0c"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p[1]/a:r/a:rPr/a:latin", "typeface", u"Arial"); // text assertXPathContent(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p[1]/a:r/a:t", u"It is a Maintitle"); assertXPathContent(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p[2]/a:r/a:t", u"It is a Subtitle"); // shape props assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:spPr/a:solidFill/a:srgbClr", "val", u"81d41a"); } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testAutoTitleDeleted) { loadFromFile(u"xlsx/testAutoTitleDeleted.xlsx"); save(u"Calc Office Open XML"_ustr); xmlDocUniquePtr pXmlDoc = parseExport(u"xl/charts/chart1.xml"_ustr); CPPUNIT_ASSERT(pXmlDoc); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:autoTitleDeleted", "val", u"1"); } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testChartTitlePropertiesColorFillXLSX) { loadFromFile(u"xlsx/testChartTitlePropertiesColorFill.xlsx"); save(u"Calc Office Open XML"_ustr); xmlDocUniquePtr pXmlDoc = parseExport(u"xl/charts/chart1.xml"_ustr); CPPUNIT_ASSERT(pXmlDoc); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:spPr/a:solidFill/a:srgbClr", "val", u"ff0000"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:spPr/a:ln/a:noFill", 1); } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testChartTitlePropertiesGradientFillXLSX) { loadFromFile(u"xlsx/testChartTitlePropertiesGradientFill.xlsx"); save(u"Calc Office Open XML"_ustr); xmlDocUniquePtr pXmlDoc = parseExport(u"xl/charts/chart1.xml"_ustr); CPPUNIT_ASSERT(pXmlDoc); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:spPr/a:gradFill/a:gsLst/a:gs[1]/a:srgbClr", "val", u"cccccc"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:spPr/a:gradFill/a:gsLst/a:gs[2]/a:srgbClr", "val", u"666666"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:spPr/a:ln/a:noFill", 1); } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testChartTitlePropertiesBitmapFillXLSX) { loadFromFile(u"xlsx/testChartTitlePropertiesBitmapFill.xlsx"); save(u"Calc Office Open XML"_ustr); xmlDocUniquePtr pXmlDoc = parseExport(u"xl/charts/chart1.xml"_ustr); CPPUNIT_ASSERT(pXmlDoc); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:spPr/a:blipFill/a:blip", "embed", u"rId1"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:spPr/a:ln/a:noFill", 1); } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testBarChartDataPointPropXLSX) { loadFromFile(u"xlsx/testBarChartDataPointPropXLSX.xlsx"); save(u"Calc Office Open XML"_ustr); xmlDocUniquePtr pXmlDoc = parseExport(u"xl/charts/chart1.xml"_ustr); CPPUNIT_ASSERT(pXmlDoc); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:varyColors", "val", u"0"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dPt[1]/c:idx", "val", u"1"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dPt[1]/c:spPr/a:solidFill/a:srgbClr", "val", u"ff0000"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dPt[1]/c:spPr/a:ln/a:solidFill/a:srgbClr", "val", u"000000"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dPt[2]/c:idx", "val", u"2"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dPt[2]/c:spPr/a:gradFill/a:gsLst/a:gs[1]/a:srgbClr", "val", u"f6f8fc"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dPt[2]/c:spPr/a:gradFill/a:gsLst/a:gs[2]/a:srgbClr", "val", u"c7d5ed"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dPt[2]/c:spPr/a:ln/a:solidFill/a:srgbClr", "val", u"70ad47"); } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testAxisCharacterPropertiesXLSX) { loadFromFile(u"xlsx/axis_character_properties.xlsx"); save(u"Calc Office Open XML"_ustr); xmlDocUniquePtr pXmlDoc = parseExport(u"xl/charts/chart1.xml"_ustr); CPPUNIT_ASSERT(pXmlDoc); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:catAx/c:txPr/a:p/a:pPr/a:defRPr", "sz", u"1000"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:catAx/c:txPr/a:p/a:pPr/a:defRPr", "b", u"1"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:catAx/c:txPr/a:p/a:pPr/a:defRPr", "i", u"1"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:catAx/c:txPr/a:p/a:pPr/a:defRPr", "u", u"sng"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:valAx/c:txPr/a:p/a:pPr/a:defRPr", "sz", u"900"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:valAx/c:txPr/a:p/a:pPr/a:defRPr", "b", u"1"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:valAx/c:txPr/a:p/a:pPr/a:defRPr", "strike", u"sngStrike"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:valAx/c:txPr/a:p/a:pPr/a:defRPr/a:solidFill/a:srgbClr", "val", u"ff0000"); } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testTitleCharacterPropertiesXLSX) { loadFromFile(u"xlsx/title_character_properties.xlsx"); save(u"Calc Office Open XML"_ustr); xmlDocUniquePtr pXmlDoc = parseExport(u"xl/charts/chart1.xml"_ustr); CPPUNIT_ASSERT(pXmlDoc); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p/a:pPr/a:defRPr", "sz", u"1300"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p/a:pPr/a:defRPr", "b", u"0"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p/a:r/a:rPr", "sz", u"2400"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p/a:r/a:rPr", "b", u"1"); } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testPlotVisOnlyXLSX) { loadFromFile(u"xlsx/hidden_cells.xlsx"); save(u"Calc Office Open XML"_ustr); xmlDocUniquePtr pXmlDoc = parseExport(u"xl/charts/chart1.xml"_ustr); CPPUNIT_ASSERT(pXmlDoc); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotVisOnly", "val", u"0"); } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testBarChartVaryColorsXLSX) { loadFromFile(u"xlsx/tdf90876.xlsx"); save(u"Calc Office Open XML"_ustr); xmlDocUniquePtr pXmlDoc = parseExport(u"xl/charts/chart1.xml"_ustr); CPPUNIT_ASSERT(pXmlDoc); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:varyColors", "val", u"0"); } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testTdf96161) { loadFromFile(u"ods/tdf96161.ods"); save(u"Calc Office Open XML"_ustr); xmlDocUniquePtr pXmlDoc = parseExport(u"xl/charts/chart1.xml"_ustr); CPPUNIT_ASSERT(pXmlDoc); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:lineChart/c:varyColors", "val", u"0"); } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testTableOnPage3) { loadFromFile(u"docx/TableOnPage3.docx"); // FIXME: validation error in OOXML export: Errors: 2 skipValidation(); saveAndReload(u"Office Open XML Text"_ustr); Reference xChartDoc(getChartDocFromWriter(0), uno::UNO_QUERY); CPPUNIT_ASSERT(xChartDoc.is()); uno::Reference< chart::XChartDataArray > xDataArray(xChartDoc->getDataProvider(), UNO_QUERY_THROW); Sequence aColumnDesc = xDataArray->getColumnDescriptions(); CPPUNIT_ASSERT_EQUAL_MESSAGE("There must be 4 columns and descriptions", static_cast(4), aColumnDesc.getLength()); CPPUNIT_ASSERT_EQUAL(u"If oversubscription relative to allowance increases at the same average rate B15-B17"_ustr, aColumnDesc[0]); CPPUNIT_ASSERT_EQUAL(u"Known requirements"_ustr, aColumnDesc[1]); CPPUNIT_ASSERT_EQUAL(u"Allowance"_ustr, aColumnDesc[2]); CPPUNIT_ASSERT_EQUAL(u"If oversubscription relative to allowance holds steady at average oversubscription level B15-B17"_ustr, aColumnDesc[3]); } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, tdf137691) { // given a doc where the banana negative data formats as ($123) and the pineapple data as $(123) loadFromFile(u"pptx/tdf137691_dataTable.pptx"); saveAndReload(u"Impress MS PowerPoint 2007 XML"_ustr); Reference xChartDoc(getChartDocFromDrawImpress(0, 0), uno::UNO_QUERY); Reference< chart2::data::XDataSequence > xDataSeq; xDataSeq.set(getDataSequenceFromDocByRole(xChartDoc, u"values-y", 0)); const sal_Int32 nKey_bananas = xDataSeq->getNumberFormatKeyByIndex(-1); // This should not be General format (0), but a defined format (129) CPPUNIT_ASSERT(nKey_bananas); xDataSeq.set(getDataSequenceFromDocByRole(xChartDoc, u"values-y", 1)); const sal_Int32 nKey_pineapples = xDataSeq->getNumberFormatKeyByIndex(-1); // This should not be General format (0), but a defined format (130) CPPUNIT_ASSERT(nKey_pineapples); CPPUNIT_ASSERT(nKey_pineapples != nKey_bananas); } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testMultipleAxisXLSX) { loadFromFile(u"ods/multiple_axis.ods"); save(u"Calc Office Open XML"_ustr); xmlDocUniquePtr pXmlDoc = parseExport(u"xl/charts/chart1.xml"_ustr); CPPUNIT_ASSERT(pXmlDoc); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:scatterChart", 2); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:scatterChart[1]/c:ser", 1); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:scatterChart[2]/c:ser", 1); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:valAx", 4); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:valAx/c:delete[@val='1']", 1); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:valAx/c:axPos[@val='l']", 1); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:valAx/c:axPos[@val='r']", 1); } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testSecondaryAxisXLSX) { loadFromFile(u"ods/secondary_axis.ods"); save(u"Calc Office Open XML"_ustr); xmlDocUniquePtr pXmlDoc = parseExport(u"xl/charts/chart1.xml"_ustr); CPPUNIT_ASSERT(pXmlDoc); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:lineChart", 2); // test there is just those series in the first tag which are attached to the primary axis assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:lineChart[1]/c:ser", 2); assertXPathContent(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:lineChart[1]/c:ser[1]/c:tx/c:strRef/c:strCache/c:pt/c:v", u"b"); assertXPathContent(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:lineChart[1]/c:ser[2]/c:tx/c:strRef/c:strCache/c:pt/c:v", u"c"); // test there is just those series in the second tag which are attached to the secondary axis assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:lineChart[2]/c:ser", 1); assertXPathContent(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:lineChart[2]/c:ser[1]/c:tx/c:strRef/c:strCache/c:pt/c:v", u"a"); } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testBarChartSecondaryAxisXLSX) { loadFromFile(u"xlsx/testSecondaryAxis.xlsx"); save(u"Calc Office Open XML"_ustr); xmlDocUniquePtr pXmlDoc = parseExport(u"xl/charts/chart1.xml"_ustr); CPPUNIT_ASSERT(pXmlDoc); // Collect barchart axID on primary Axis OUString XValueIdOf1Barchart = getXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart[1]/c:axId[1]", "val"); OUString YValueIdOf1Barchart = getXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart[1]/c:axId[2]", "val"); // Collect barchart axID on secondary Axis OUString XValueIdOf2Barchart = getXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart[2]/c:axId[1]", "val"); OUString YValueIdOf2Barchart = getXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart[2]/c:axId[2]", "val"); // Check which c:catAx and c:valAx contain the AxisId of barcharts assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:catAx[1]/c:axId", "val", XValueIdOf1Barchart); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:valAx[1]/c:axId", "val", YValueIdOf1Barchart); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:catAx[2]/c:axId", "val", XValueIdOf2Barchart); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:valAx[2]/c:axId", "val", YValueIdOf2Barchart); } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testTdf148142) { // The document contains a line chart with "Between tick marks" X axis position. loadFromFile(u"ods/tdf148142.ods"); Reference xChartDoc = getChartDocFromSheet(0); CPPUNIT_ASSERT(xChartDoc.is()); Reference xAxis = getAxisFromDoc(xChartDoc, 0, 0, 0); CPPUNIT_ASSERT(xAxis.is()); chart2::ScaleData aScaleData = xAxis->getScaleData(); CPPUNIT_ASSERT(aScaleData.ShiftedCategoryPosition); // Set the X axis position to "On tick marks". aScaleData.ShiftedCategoryPosition = false; xAxis->setScaleData(aScaleData); // Check the X axis position after export. saveAndReload(u"calc8"_ustr); Reference xChartDoc2 = getChartDocFromSheet(0); CPPUNIT_ASSERT(xChartDoc2.is()); Reference xAxis2 = getAxisFromDoc(xChartDoc2, 0, 0, 0); CPPUNIT_ASSERT(xAxis2.is()); chart2::ScaleData aScaleData2 = xAxis2->getScaleData(); CPPUNIT_ASSERT(!aScaleData2.ShiftedCategoryPosition); } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testFormattedChartTitles) { loadFromFile(u"xlsx/tdf39052.xlsx"); save(u"Calc Office Open XML"_ustr); xmlDocUniquePtr pXmlDoc = parseExport(u"xl/charts/chart1.xml"_ustr); CPPUNIT_ASSERT(pXmlDoc); // Check run level properties [1] - first paragraph assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p[1]/a:r[1]/a:rPr", "b", u"1"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p[1]/a:r[1]/a:rPr", "sz", u"1400"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p[1]/a:r[1]/a:rPr/a:solidFill/a:srgbClr", "val", u"ff0000"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p[1]/a:r[1]/a:rPr/a:latin", "typeface", u"Aptos Narrow"); assertXPathContent(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p[1]/a:r[1]/a:t", u"This"); // Check run level properties [2] assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p[1]/a:r[2]/a:rPr", "b", u"0"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p[1]/a:r[2]/a:rPr", "sz", u"1400"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p[1]/a:r[2]/a:rPr/a:solidFill/a:srgbClr", "val", u"595959"); assertXPathContent(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p[1]/a:r[2]/a:t", u" is"); // Check run level properties [3] assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p[1]/a:r[3]/a:rPr", "b", u"0"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p[1]/a:r[3]/a:rPr", "sz", u"1400"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p[1]/a:r[3]/a:rPr", "baseline", u"30000"); assertXPathContent(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p[1]/a:r[3]/a:t", u"3"); // Check run level properties [4] assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p[1]/a:r[4]/a:rPr", "b", u"0"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p[1]/a:r[4]/a:rPr", "sz", u"1400"); assertXPathContent(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p[1]/a:r[4]/a:t", u" a "); // Check run level properties [5] assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p[1]/a:r[5]/a:rPr", "b", u"0"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p[1]/a:r[5]/a:rPr", "i", u"1"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p[1]/a:r[5]/a:rPr", "sz", u"2000"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p[1]/a:r[5]/a:rPr", "u", u"sng"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p[1]/a:r[5]/a:rPr/a:solidFill/a:srgbClr", "val", u"4ea72e"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p[1]/a:r[5]/a:rPr/a:uFillTx", 1); assertXPathContent(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p[1]/a:r[5]/a:t", u"custom"); // Check run level properties [6] assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p[1]/a:r[6]/a:rPr", "b", u"0"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p[1]/a:r[6]/a:rPr", "sz", u"1400"); assertXPathContent(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p[1]/a:r[6]/a:t", u" erte1"); // Check run level properties [1] - second paragraph assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p[2]/a:r[1]/a:rPr", "b", u"0"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p[2]/a:r[1]/a:rPr", "sz", u"1400"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p[2]/a:r[1]/a:rPr/a:solidFill/a:srgbClr", "val", u"595959"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p[2]/a:r[1]/a:rPr/a:latin", "typeface", u"Aptos Narrow"); assertXPathContent(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p[2]/a:r[1]/a:t", u"2dfgd ch"); // Check run level properties [2] assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p[2]/a:r[2]/a:rPr", "b", u"1"); assertXPathContent(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p[2]/a:r[2]/a:t", u"ar"); // Check run level properties [3] assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p[2]/a:r[3]/a:rPr", "b", u"0");; assertXPathContent(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p[2]/a:r[3]/a:t", u"t "); // Check run level properties [4] assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p[2]/a:r[4]/a:rPr", "b", u"0"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p[2]/a:r[4]/a:rPr", "strike", u"sngStrike"); assertXPathContent(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p[2]/a:r[4]/a:t", u"title"); } namespace { void checkCharacterProps(Reference const & xTitleProp) { Sequence< uno::Reference< chart2::XFormattedString > > xFormattedSubTitle; CPPUNIT_ASSERT(xTitleProp->getPropertyValue(u"FormattedStrings"_ustr) >>= xFormattedSubTitle); CPPUNIT_ASSERT_EQUAL(sal_Int32(10), xFormattedSubTitle.getLength()); // check texts std::vector aValues = { u"This"_ustr, u" is"_ustr, u"3"_ustr, u" a "_ustr, u"custom"_ustr, u" erte1\n"_ustr, u"2dfgd ch"_ustr, u"ar"_ustr, u"t "_ustr, u"title"_ustr }; for (sal_Int32 i = 0; i < xFormattedSubTitle.getLength(); i++) { const OUString aText = xFormattedSubTitle[i]->getString(); CPPUNIT_ASSERT_EQUAL(aValues[i], aText); Reference< beans::XPropertySet > xRunPropSet(xFormattedSubTitle[i], uno::UNO_QUERY); // common props uno::Any aAny = xRunPropSet->getPropertyValue(u"CharFontName"_ustr); CPPUNIT_ASSERT_EQUAL(uno::Any(u"Aptos Narrow"_ustr), aAny); // unique props if (aText == aValues[0]) { aAny = xRunPropSet->getPropertyValue(u"CharWeight"_ustr); CPPUNIT_ASSERT_EQUAL(uno::Any(awt::FontWeight::BOLD), aAny); aAny = xRunPropSet->getPropertyValue(u"CharHeight"_ustr); CPPUNIT_ASSERT_EQUAL(uno::Any(14.0f), aAny); aAny = xRunPropSet->getPropertyValue(u"CharColor"_ustr); CPPUNIT_ASSERT_EQUAL(uno::Any(Color(0xff0000)), aAny); aAny = xRunPropSet->getPropertyValue(u"CharEscapement"_ustr); CPPUNIT_ASSERT_EQUAL(uno::Any(short(0)), aAny); aAny = xRunPropSet->getPropertyValue(u"CharEscapementHeight"_ustr); CPPUNIT_ASSERT_EQUAL(uno::Any(short(100)), aAny); } else if (aText == aValues[1] || aText == aValues[3] || aText == aValues[5] || aText == aValues[6] || aText == aValues[8]) { aAny = xRunPropSet->getPropertyValue(u"CharWeight"_ustr); CPPUNIT_ASSERT_EQUAL(uno::Any(awt::FontWeight::NORMAL), aAny); aAny = xRunPropSet->getPropertyValue(u"CharHeight"_ustr); CPPUNIT_ASSERT_EQUAL(uno::Any(14.0f), aAny); aAny = xRunPropSet->getPropertyValue(u"CharColor"_ustr); CPPUNIT_ASSERT_EQUAL(uno::Any(Color(0x595959)), aAny); } else if (aText == aValues[2]) { aAny = xRunPropSet->getPropertyValue(u"CharWeight"_ustr); CPPUNIT_ASSERT_EQUAL(uno::Any(awt::FontWeight::NORMAL), aAny); aAny = xRunPropSet->getPropertyValue(u"CharHeight"_ustr); CPPUNIT_ASSERT_EQUAL(uno::Any(14.0f), aAny); aAny = xRunPropSet->getPropertyValue(u"CharColor"_ustr); CPPUNIT_ASSERT_EQUAL(uno::Any(Color(0x595959)), aAny); aAny = xRunPropSet->getPropertyValue(u"CharEscapement"_ustr); CPPUNIT_ASSERT_EQUAL(uno::Any(short(30)), aAny); aAny = xRunPropSet->getPropertyValue(u"CharEscapementHeight"_ustr); CPPUNIT_ASSERT_EQUAL(uno::Any(short(58)), aAny); } else if (aText == aValues[4]) { aAny = xRunPropSet->getPropertyValue(u"CharWeight"_ustr); CPPUNIT_ASSERT_EQUAL(uno::Any(awt::FontWeight::NORMAL), aAny); aAny = xRunPropSet->getPropertyValue(u"CharHeight"_ustr); CPPUNIT_ASSERT_EQUAL(uno::Any(20.0f), aAny); aAny = xRunPropSet->getPropertyValue(u"CharColor"_ustr); CPPUNIT_ASSERT_EQUAL(uno::Any(Color(0x4ea72e)), aAny); aAny = xRunPropSet->getPropertyValue(u"CharPosture"_ustr); CPPUNIT_ASSERT_EQUAL(uno::Any(awt::FontSlant_ITALIC), aAny); aAny = xRunPropSet->getPropertyValue(u"CharUnderline"_ustr); CPPUNIT_ASSERT_EQUAL(uno::Any(awt::FontUnderline::SINGLE), aAny); } else if (aText == aValues[7]) { aAny = xRunPropSet->getPropertyValue(u"CharWeight"_ustr); CPPUNIT_ASSERT_EQUAL(uno::Any(awt::FontWeight::BOLD), aAny); aAny = xRunPropSet->getPropertyValue(u"CharHeight"_ustr); CPPUNIT_ASSERT_EQUAL(uno::Any(14.0f), aAny); aAny = xRunPropSet->getPropertyValue(u"CharColor"_ustr); CPPUNIT_ASSERT_EQUAL(uno::Any(Color(0x595959)), aAny); aAny = xRunPropSet->getPropertyValue(u"CharPosture"_ustr); CPPUNIT_ASSERT_EQUAL(uno::Any(awt::FontSlant_NONE), aAny); } else // aText == aValues[9] { aAny = xRunPropSet->getPropertyValue(u"CharWeight"_ustr); CPPUNIT_ASSERT_EQUAL(uno::Any(awt::FontWeight::NORMAL), aAny); aAny = xRunPropSet->getPropertyValue(u"CharHeight"_ustr); CPPUNIT_ASSERT_EQUAL(uno::Any(14.0f), aAny); aAny = xRunPropSet->getPropertyValue(u"CharColor"_ustr); CPPUNIT_ASSERT_EQUAL(uno::Any(Color(0x595959)), aAny); aAny = xRunPropSet->getPropertyValue(u"CharPosture"_ustr); CPPUNIT_ASSERT_EQUAL(uno::Any(awt::FontSlant_ITALIC), aAny); aAny = xRunPropSet->getPropertyValue(u"CharOverline"_ustr); CPPUNIT_ASSERT_EQUAL(uno::Any(awt::FontUnderline::NONE), aAny); } } } } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testODSFormattedChartTitles) { // The document contains a line chart with "Between tick marks" X axis position. loadFromFile(u"ods/tdf39052.ods"); // Check formatted strings after export. saveAndReload(u"calc8"_ustr); Reference xChart2Doc = getChartDocFromSheet(0); CPPUNIT_ASSERT(xChart2Doc.is()); Reference< chart::XChartDocument > xChartDoc(xChart2Doc, uno::UNO_QUERY); CPPUNIT_ASSERT(xChartDoc.is()); uno::Reference< beans::XPropertySet > xTitleProp(xChartDoc->getTitle(), uno::UNO_QUERY); CPPUNIT_ASSERT(xTitleProp.is()); checkCharacterProps(xTitleProp); } CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */