/* -*- 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 <com/sun/star/chart2/DataPointLabel.hpp>
#include <com/sun/star/awt/FontWeight.hpp>
#include <com/sun/star/awt/FontSlant.hpp>
#include <com/sun/star/awt/FontUnderline.hpp>
#include <com/sun/star/text/XTextRange.hpp>
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" , "path" , u"circle" );
// Test the linear gradient angle
assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:spPr/a:gradFill/a:gsLst/a:gs[1]" , "pos" , u"0" );
assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:spPr/a:gradFill/a:gsLst/a:gs[1]/a:srgbClr" , "val" , u"ffffff" );
assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:spPr/a:gradFill/a:gsLst/a:gs[2]" , "pos" , u"100000" );
assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:spPr/a:gradFill/a:gsLst/a:gs[2]/a:srgbClr" , "val" , u"5b9bd5" );
}
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<chart2::XDataSeries> xSeries = getDataSeriesFromDoc(xDoc, 0);
Reference<beans::XPropertySet> 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<chart2::XDataSeries> xSeries = getDataSeriesFromDoc(xDoc, 0);
Reference<beans::XPropertySet> 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<chart2::XChartDocument> xChartDoc(getChartDocFromWriter(0), uno::UNO_QUERY);
CPPUNIT_ASSERT(xChartDoc.is());
uno::Reference< chart::XChartDataArray > xDataArray(xChartDoc->getDataProvider(), UNO_QUERY_THROW);
Sequence<OUString> aColumnDesc = xDataArray->getColumnDescriptions();
CPPUNIT_ASSERT_EQUAL_MESSAGE("There must be 4 columns and descriptions" , static_cast <sal_Int32>(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<chart2::XChartDocument> 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 <lineChart> 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 <lineChart> 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, testEmptyCharts)
{
loadFromFile(u"odt/testEmptyCharts.odt" );
save(u"Office Open XML Text" _ustr);
// Make sure each chart exists in the respective XML
xmlDocUniquePtr pXmlDoc = parseExport(u"word/charts/chart1.xml" _ustr);
assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart" );
pXmlDoc = parseExport(u"word/charts/chart2.xml" _ustr);
assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:areaChart" );
pXmlDoc = parseExport(u"word/charts/chart3.xml" _ustr);
assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:bubbleChart" );
pXmlDoc = parseExport(u"word/charts/chart4.xml" _ustr);
assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:lineChart" );
pXmlDoc = parseExport(u"word/charts/chart5.xml" _ustr);
assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:stockChart" );
}
CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testTdf148142)
{
// The document contains a line chart with "Between tick marks" X axis position.
loadFromFile(u"ods/tdf148142.ods" );
Reference<chart2::XChartDocument> xChartDoc = getChartDocFromSheet(0);
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.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<chart2::XChartDocument> xChartDoc2 = getChartDocFromSheet(0);
CPPUNIT_ASSERT(xChartDoc2.is());
Reference<chart2::XAxis> 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<beans::XPropertySet> 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<OUString> 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<chart2::XChartDocument> 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_TEST_FIXTURE(Chart2ExportTest3, testTdf148117)
{
loadFromFile(u"pptx/tdf148117.pptx" );
save(u"Impress MS PowerPoint 2007 XML" _ustr);
xmlDocUniquePtr pXmlDoc = parseExport(u"ppt/charts/chart1.xml" _ustr);
assertXPath(pXmlDoc, "/c:chartSpace/c:date1904" , "val" , u"0" );
}
CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, test1904NullDate)
{
loadFromFile(u"pptx/1904NullDate.pptx" );
saveAndReload(u"Impress MS PowerPoint 2007 XML" _ustr);
Reference<chart2::XChartDocument> xChartDoc(getChartDocFromDrawImpress(0, 0), uno::UNO_QUERY);
Reference<beans::XPropertySet> xPropSet(xChartDoc, uno::UNO_QUERY);
util::DateTime aDateTime;
xPropSet->getPropertyValue("NullDate" ) >>= aDateTime;
CPPUNIT_ASSERT_EQUAL(1904, static_cast <int >(aDateTime.Year));
CPPUNIT_ASSERT_EQUAL(1, static_cast <int >(aDateTime.Month));
CPPUNIT_ASSERT_EQUAL(1, static_cast <int >(aDateTime.Day));
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());
OUString sAxisShapeName = u"CID/D=0:CS=0:Axis=0,0" _ustr;
uno::Reference<drawing::XShape> xXAxis = getShapeByName(xShapes, sAxisShapeName,
// 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());
uno::Reference<container::XIndexAccess> xIndexAccess(xXAxis, UNO_QUERY_THROW);
sal_Int32 nAxisLabelsCount = xIndexAccess->getCount();
// Check axis labels's text
std::vector<OUString> aExpectedLabels = {
u"1/1/2006" _ustr,
u"1/1/2007" _ustr,
u"1/1/2008" _ustr,
u"1/1/2009" _ustr,
};
for (sal_Int32 nLabelIndex = 0; nLabelIndex < nAxisLabelsCount; ++nLabelIndex)
{
// Check text
uno::Reference<text::XTextRange> xLabel(xIndexAccess->getByIndex(nLabelIndex), uno::UNO_QUERY);
OUString aLabelName = xLabel->getString();
CPPUNIT_ASSERT_EQUAL(aExpectedLabels[nLabelIndex], aLabelName);
}
}
CPPUNIT_PLUGIN_IMPLEMENT();
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
Messung V0.5 C=94 H=92 G=92
¤ Dauer der Verarbeitung: 0.13 Sekunden
(vorverarbeitet)
¤
*© Formatika GbR, Deutschland