summaryrefslogtreecommitdiff
path: root/chart2/qa/extras
diff options
context:
space:
mode:
authorTamás Zolnai <tamas.zolnai@collabora.com>2017-02-12 16:04:58 +0100
committerTamás Zolnai <tamas.zolnai@collabora.com>2017-02-12 16:43:06 +0000
commit49d7bdea17f6468b0c5c9f425f4432e2ad7e1ace (patch)
treedebd11744617476d9dfa2add377359b15a43c88c /chart2/qa/extras
parent8aff36d87f83fa2c86515f106c1e579b0903421a (diff)
ChartDumpTest: A new chart test suite for a more sistematic testing
A hibrid of dumper tests (xmlDump) and simple CppUnit tests. Advantages: * Easy to add a new test case ** Add a new test file and generate the reference ** Similar to dumper tests * Easy to find out the root of the problem when test fails ** Assertion is not coming somewhere from an XML file ** Assertion are placed in the code, so if you read and understand that code, you can find out easier why the test fails. ** Similar to simple CppUnit tests. * One test checks only one smaller part of the whole document ** e.g. legend, chart data, grid Change-Id: I7bba5a37efcc62d6358c84acece91963243a914f Reviewed-on: https://gerrit.libreoffice.org/34154 Reviewed-by: Tamás Zolnai <tamas.zolnai@collabora.com> Tested-by: Tamás Zolnai <tamas.zolnai@collabora.com>
Diffstat (limited to 'chart2/qa/extras')
-rwxr-xr-xchart2/qa/extras/chart2dump/chart2dump.cxx748
-rwxr-xr-xchart2/qa/extras/chart2dump/data/axis_special_positioning.odsbin0 -> 29428 bytes
-rwxr-xr-xchart2/qa/extras/chart2dump/data/column_chart_small_spacing.odsbin0 -> 29860 bytes
-rwxr-xr-xchart2/qa/extras/chart2dump/data/custom_legend_position.odsbin0 -> 13980 bytes
-rwxr-xr-xchart2/qa/extras/chart2dump/data/default_formated_axis.odsbin0 -> 29985 bytes
-rwxr-xr-xchart2/qa/extras/chart2dump/data/formated_axis_labels.odsbin0 -> 29437 bytes
-rwxr-xr-xchart2/qa/extras/chart2dump/data/formated_axis_lines.odsbin0 -> 30220 bytes
-rwxr-xr-xchart2/qa/extras/chart2dump/data/formated_grid_line.odsbin0 -> 30376 bytes
-rwxr-xr-xchart2/qa/extras/chart2dump/data/horizontal_grid.odsbin0 -> 30064 bytes
-rwxr-xr-xchart2/qa/extras/chart2dump/data/legend_on_bottom.odsbin0 -> 14040 bytes
-rwxr-xr-xchart2/qa/extras/chart2dump/data/legend_on_left_side.odsbin0 -> 14004 bytes
-rwxr-xr-xchart2/qa/extras/chart2dump/data/legend_on_right_side.odsbin0 -> 13455 bytes
-rwxr-xr-xchart2/qa/extras/chart2dump/data/legend_on_top.odsbin0 -> 14012 bytes
-rwxr-xr-xchart2/qa/extras/chart2dump/data/many_legend_entries.odsbin0 -> 15835 bytes
-rwxr-xr-xchart2/qa/extras/chart2dump/data/minor_grid.odsbin0 -> 30515 bytes
-rwxr-xr-xchart2/qa/extras/chart2dump/data/multiple_categories.odsbin0 -> 35766 bytes
-rwxr-xr-xchart2/qa/extras/chart2dump/data/normal_column_chart.odsbin0 -> 29763 bytes
-rwxr-xr-xchart2/qa/extras/chart2dump/data/percent_stacked_column_chart.odsbin0 -> 31433 bytes
-rwxr-xr-xchart2/qa/extras/chart2dump/data/rotated_axis_labels.odsbin0 -> 30370 bytes
-rwxr-xr-xchart2/qa/extras/chart2dump/data/simple_chart.odsbin0 -> 30066 bytes
-rwxr-xr-xchart2/qa/extras/chart2dump/data/stacked_column_chart.odsbin0 -> 31402 bytes
-rwxr-xr-xchart2/qa/extras/chart2dump/data/vertical_grid.odsbin0 -> 31422 bytes
-rwxr-xr-xchart2/qa/extras/chart2dump/reference/axisgeometrytest/axis_special_positioning.txt38
-rwxr-xr-xchart2/qa/extras/chart2dump/reference/axisgeometrytest/default_formated_axis.txt38
-rwxr-xr-xchart2/qa/extras/chart2dump/reference/axisgeometrytest/formated_axis_lines.txt38
-rwxr-xr-xchart2/qa/extras/chart2dump/reference/axisgeometrytest/rotated_axis_labels.txt38
-rwxr-xr-xchart2/qa/extras/chart2dump/reference/axislabeltest/default_formated_axis.txt198
-rwxr-xr-xchart2/qa/extras/chart2dump/reference/axislabeltest/formated_axis_labels.txt198
-rwxr-xr-xchart2/qa/extras/chart2dump/reference/axislabeltest/rotated_axis_labels.txt150
-rwxr-xr-xchart2/qa/extras/chart2dump/reference/chartdatatest/multiple_categories.txt70
-rwxr-xr-xchart2/qa/extras/chart2dump/reference/chartdatatest/simple_chart.txt50
-rwxr-xr-xchart2/qa/extras/chart2dump/reference/columncharttest/column_chart_small_spacing.txt162
-rwxr-xr-xchart2/qa/extras/chart2dump/reference/columncharttest/normal_column_chart.txt162
-rwxr-xr-xchart2/qa/extras/chart2dump/reference/columncharttest/percent_stacked_column_chart.txt162
-rwxr-xr-xchart2/qa/extras/chart2dump/reference/columncharttest/stacked_column_chart.txt162
-rwxr-xr-xchart2/qa/extras/chart2dump/reference/gridtest/formated_grid_line.txt17
-rwxr-xr-xchart2/qa/extras/chart2dump/reference/gridtest/horizontal_grid.txt17
-rwxr-xr-xchart2/qa/extras/chart2dump/reference/gridtest/minor_grid.txt68
-rwxr-xr-xchart2/qa/extras/chart2dump/reference/gridtest/vertical_grid.txt17
-rwxr-xr-xchart2/qa/extras/chart2dump/reference/legendtest/custom_legend_position.txt98
-rwxr-xr-xchart2/qa/extras/chart2dump/reference/legendtest/legend_on_bottom.txt98
-rwxr-xr-xchart2/qa/extras/chart2dump/reference/legendtest/legend_on_left_side.txt98
-rwxr-xr-xchart2/qa/extras/chart2dump/reference/legendtest/legend_on_right_side.txt46
-rwxr-xr-xchart2/qa/extras/chart2dump/reference/legendtest/legend_on_top.txt98
-rwxr-xr-xchart2/qa/extras/chart2dump/reference/legendtest/many_legend_entries.txt340
-rwxr-xr-xchart2/qa/extras/chart2dump/reference/legendtest/multiple_categories.txt154
-rw-r--r--chart2/qa/extras/charttest.hxx4
47 files changed, 3267 insertions, 2 deletions
diff --git a/chart2/qa/extras/chart2dump/chart2dump.cxx b/chart2/qa/extras/chart2dump/chart2dump.cxx
new file mode 100755
index 000000000000..0c69aeb51c27
--- /dev/null
+++ b/chart2/qa/extras/chart2dump/chart2dump.cxx
@@ -0,0 +1,748 @@
+/* -*- 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/XChartDocument.hpp>
+#include <com/sun/star/chart/XChartDocument.hpp>
+#include <com/sun/star/chart/XComplexDescriptionAccess.hpp>
+#include <com/sun/star/container/XNamed.hpp>
+#include <com/sun/star/text/WritingMode.hpp>
+#include <com/sun/star/text/XText.hpp>
+#include <com/sun/star/drawing/HomogenMatrix3.hpp>
+#include <com/sun/star/drawing/LineDash.hpp>
+
+#include <editeng/unoprnms.hxx>
+#include <test/xmltesttools.hxx>
+#include <rtl/strbuf.hxx>
+#include <rtl/ustring.hxx>
+
+#include <fstream>
+
+#define EPS 1E-12
+
+#define DECLARE_DUMP_TEST(TestName, BaseClass, DumpMode) \
+ class TestName : public BaseClass { \
+ protected:\
+ virtual OUString getTestName() override { return OUString(#TestName); } \
+ public:\
+ TestName() : BaseClass(DumpMode) {}; \
+ CPPUNIT_TEST_SUITE(TestName); \
+ CPPUNIT_TEST(verify); \
+ CPPUNIT_TEST_SUITE_END(); \
+ virtual void verify() override;\
+ };\
+ CPPUNIT_TEST_SUITE_REGISTRATION(TestName); \
+ void TestName::verify()
+
+
+#define CPPUNIT_DUMP_ASSERT_NUMBERS_EQUAL(aActual) \
+ if(isInDumpMode()) \
+ writeActual(OUString::number(aActual), #aActual); \
+ else \
+ { \
+ OString sTestFileName = OUStringToOString(getTestFileName(), RTL_TEXTENCODING_UTF8); \
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(OString("Failing test file is: " + sTestFileName).getStr(), readExpected(#aActual), OUString::number(aActual)); \
+ }
+
+#define CPPUNIT_DUMP_ASSERT_DOUBLES_EQUAL(aActual, EPS_) \
+ if(isInDumpMode()) \
+ writeActual(OUString::number(aActual), #aActual); \
+ else \
+ { \
+ OString sTestFileName = OUStringToOString(getTestFileName(), RTL_TEXTENCODING_UTF8); \
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(OString("Failing test file is: " + sTestFileName).getStr(), readExpectedDouble(#aActual), aActual, EPS_); \
+ }
+
+#define CPPUNIT_DUMP_ASSERT_STRINGS_EQUAL(aActual) \
+ if(isInDumpMode()) \
+ writeActual(aActual, #aActual); \
+ else \
+ { \
+ OString sTestFileName = OUStringToOString(getTestFileName(), RTL_TEXTENCODING_UTF8); \
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(OString("Failing test file is: " + sTestFileName).getStr(), readExpected(#aActual), aActual.trim()); \
+ }
+
+#define CPPUNIT_DUMP_ASSERT_NOTE(Note) \
+ if(isInDumpMode()) \
+ writeNote(OUString(Note)); \
+ else \
+ readNote(OUString(Note));\
+
+
+class Chart2DumpTest : public ChartTest, public XmlTestTools
+{
+protected:
+ Chart2DumpTest(bool bDumpMode)
+ {
+ m_bDumpMode = bDumpMode;
+ }
+
+ virtual ~Chart2DumpTest() override
+ {
+ }
+
+ bool isInDumpMode () const {return m_bDumpMode;}
+
+ virtual OUString getTestName() { return OUString(); }
+ OUString getTestFileName() { return m_sTestFileName; }
+ OUString getTestFileDirName() { return OUString("/chart2/qa/extras/chart2dump/data/"); }
+ OUString getReferenceDirName()
+ {
+ return "/chart2/qa/extras/chart2dump/reference/" + getTestName().toAsciiLowerCase() + "/";
+ }
+
+ void setTestFileName (const OUString& sName)
+ {
+ m_sTestFileName = sName;
+
+ OUString sFileName = m_sTestFileName;
+ assert(sFileName.lastIndexOf('.') < sFileName.getLength());
+ sFileName = sFileName.copy(0, sFileName.lastIndexOf('.')) + ".txt";
+ if (!m_bDumpMode)
+ {
+ if (m_aReferenceFile.is_open())
+ m_aReferenceFile.close();
+ OString sReferenceFile = OUStringToOString(m_directories.getPathFromSrc(getReferenceDirName()) + sFileName, RTL_TEXTENCODING_UTF8);
+ m_aReferenceFile.open(sReferenceFile.getStr(), std::ios_base::in);
+ CPPUNIT_ASSERT_MESSAGE(OString("Can't open reference file: " + sReferenceFile).getStr(), m_aReferenceFile.is_open());
+ }
+ else
+ {
+ if (m_aDumpFile.is_open())
+ m_aDumpFile.close();
+ OString sDumpFile = OUStringToOString(m_directories.getPathFromSrc(getReferenceDirName()) + sFileName, RTL_TEXTENCODING_UTF8);
+ m_aDumpFile.open(sDumpFile.getStr(), std::ios_base::out | std::ofstream::binary | std::ofstream::trunc);
+ CPPUNIT_ASSERT_MESSAGE(OString("Can't open dump file: " + sDumpFile).getStr(), m_aDumpFile.is_open());
+ }
+ }
+
+ virtual void verify()
+ {
+ CPPUNIT_FAIL("verify method must be overridden");
+ }
+
+ OUString readExpected(const OUString& sCheck)
+ {
+ assert(!m_bDumpMode);
+ assert(m_aReferenceFile.is_open());
+ std::string sTemp;
+ getline(m_aReferenceFile, sTemp);
+ OString sAssertMessage =
+ OString("The reference file does not contain the right content. Maybe it needs an update:")
+ + OUStringToOString(m_sTestFileName, RTL_TEXTENCODING_UTF8);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(sAssertMessage.getStr(), OUString("// " + sCheck), OUString(sTemp.data(), sTemp.length(), RTL_TEXTENCODING_UTF8));
+ getline(m_aReferenceFile, sTemp);
+ return OUString(sTemp.data(), sTemp.length(), RTL_TEXTENCODING_UTF8);
+ }
+
+ void writeActual(const OUString& sActualValue, const OUString& sCheck)
+ {
+ assert(m_bDumpMode);
+ assert(m_aDumpFile.is_open());
+ m_aDumpFile << "// " << OUStringToOString(sCheck, RTL_TEXTENCODING_UTF8).getStr() << "\n"; // Add check string to make dump file readable
+ m_aDumpFile << OUStringToOString(sActualValue.trim(), RTL_TEXTENCODING_UTF8).getStr() << "\n"; // Write out the checked value, will be used as reference later
+ }
+
+ void readNote(const OUString& sNote)
+ {
+ assert(!m_bDumpMode);
+ assert(m_aReferenceFile.is_open());
+ std::string sTemp;
+ getline(m_aReferenceFile, sTemp);
+ OString sAssertMessage =
+ OString("The reference file does not contain the right content. Maybe it needs an update:")
+ + OUStringToOString(m_sTestFileName, RTL_TEXTENCODING_UTF8);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(sAssertMessage.getStr(), OUString("/// " + sNote), OUString(sTemp.data(), sTemp.length(), RTL_TEXTENCODING_UTF8));
+ }
+
+ void writeNote(const OUString& sNote)
+ {
+ assert(m_bDumpMode);
+ assert(m_aDumpFile.is_open());
+ m_aDumpFile << "/// " << OUStringToOString(sNote, RTL_TEXTENCODING_UTF8).getStr() << "\n";
+ }
+
+ double readExpectedDouble(const OUString& sCheck)
+ {
+ OUString sExpected = readExpected(sCheck);
+ return sExpected.toDouble();
+ }
+
+ OUString sequenceToOneLineString(uno::Sequence<OUString>& rSeq)
+ {
+ OUStringBuffer aBufer;
+ for (const OUString& seqItem : rSeq)
+ {
+ aBufer.append(seqItem + ";");
+ }
+ return aBufer.makeStringAndClear();
+ }
+
+ OUString doubleVectorToOneLineString(const std::vector<double>& rVector)
+ {
+ OUStringBuffer aBufer;
+ for (const double& vectorItem : rVector)
+ {
+ aBufer.append(OUString::number(vectorItem) + ";");
+ }
+ return aBufer.makeStringAndClear();
+ }
+
+ OUString transformationToOneLineString(const drawing::HomogenMatrix3& rTransform)
+ {
+ return OUString::number(rTransform.Line1.Column1) + ";" + OUString::number(rTransform.Line1.Column2) + ";" + OUString::number(rTransform.Line1.Column3) +
+ OUString::number(rTransform.Line2.Column1) + ";" + OUString::number(rTransform.Line2.Column2) + ";" + OUString::number(rTransform.Line2.Column3) +
+ OUString::number(rTransform.Line3.Column1) + ";" + OUString::number(rTransform.Line3.Column2) + ";" + OUString::number(rTransform.Line3.Column3);
+ }
+
+ uno::Reference<drawing::XShape> getShapeByName(const uno::Reference<drawing::XShapes>& rShapes, const OUString& rName, bool (*pCondition)(const uno::Reference<drawing::XShape>&) = nullptr)
+ {
+ uno::Reference<container::XIndexAccess> XIndexAccess(rShapes, uno::UNO_QUERY);
+ for (sal_Int32 i = 0; i < XIndexAccess->getCount(); ++i)
+ {
+ uno::Reference<drawing::XShapes> xShapes(XIndexAccess->getByIndex(i), uno::UNO_QUERY);
+ if (xShapes.is())
+ {
+ uno::Reference<drawing::XShape> xRet = getShapeByName(xShapes, rName, pCondition);
+ if (xRet.is())
+ return xRet;
+ }
+ uno::Reference<container::XNamed> xNamedShape(XIndexAccess->getByIndex(i), uno::UNO_QUERY);
+ if (xNamedShape->getName() == rName)
+ {
+ uno::Reference<drawing::XShape> xShape(xNamedShape, uno::UNO_QUERY);
+ if (pCondition == nullptr || (*pCondition)(xShape))
+ return xShape;
+ }
+ }
+ return uno::Reference<drawing::XShape>();
+ }
+
+private:
+ OUString m_sTestFileName;
+ bool m_bDumpMode;
+ std::ifstream m_aReferenceFile;
+ std::ofstream m_aDumpFile;
+};
+
+DECLARE_DUMP_TEST(ChartDataTest, Chart2DumpTest, false)
+{
+ const std::vector<OUString> aTestFiles =
+ {
+ "simple_chart.ods",
+ "multiple_categories.ods"
+ };
+
+ for (const OUString& aTestFile : aTestFiles)
+ {
+ setTestFileName(aTestFile);
+ load(getTestFileDirName(), getTestFileName());
+ uno::Reference< chart::XChartDocument > xChartDoc (getChartDocFromSheet(0, mxComponent), UNO_QUERY_THROW);
+ CPPUNIT_ASSERT(xChartDoc.is());
+
+ // Check title
+ uno::Reference< chart2::XChartDocument > xChartDoc2(xChartDoc, UNO_QUERY_THROW);
+ Reference<chart2::XTitled> xTitled(xChartDoc, uno::UNO_QUERY_THROW);
+ uno::Reference<chart2::XTitle> xTitle = xTitled->getTitleObject();
+ if(xTitle.is())
+ {
+ OUString sChartTitle = getTitleString(xTitled);
+ CPPUNIT_DUMP_ASSERT_STRINGS_EQUAL(sChartTitle);
+ }
+
+ // Check chart type
+ Reference<chart2::XChartType> xChartType = getChartTypeFromDoc(xChartDoc2, 0);
+ CPPUNIT_ASSERT(xChartType.is());
+ OUString sChartType = xChartType->getChartType();
+ CPPUNIT_DUMP_ASSERT_STRINGS_EQUAL(sChartType);
+
+ // Check axis titles and number format
+ // x Axis
+ Reference<chart2::XAxis> xAxis = getAxisFromDoc(xChartDoc2, 0, 0, 0);
+ Reference<chart2::XTitled> xAxisTitled(xAxis, UNO_QUERY_THROW);
+ uno::Reference<chart2::XTitle> xAxisTitle = xAxisTitled->getTitleObject();
+ if (xAxisTitle.is())
+ {
+ OUString sXAxisTitle = getTitleString(xAxisTitled);
+ CPPUNIT_DUMP_ASSERT_STRINGS_EQUAL(sXAxisTitle);
+ }
+ sal_Int32 nXAxisNumberFormat = getNumberFormatFromAxis(xAxis);
+ CPPUNIT_DUMP_ASSERT_NUMBERS_EQUAL(nXAxisNumberFormat);
+ sal_Int16 nXAxisNumberType = getNumberFormatType(xChartDoc2, nXAxisNumberFormat);
+ CPPUNIT_DUMP_ASSERT_NUMBERS_EQUAL(nXAxisNumberType);
+
+ // y Axis
+ xAxis.set(getAxisFromDoc(xChartDoc2, 0, 1, 0));
+ xAxisTitled.set(xAxis, UNO_QUERY_THROW);
+ xAxisTitle.set(xAxisTitled->getTitleObject());
+ if (xAxisTitle.is())
+ {
+ OUString sYAxisTitle = getTitleString(xAxisTitled);
+ CPPUNIT_DUMP_ASSERT_STRINGS_EQUAL(sYAxisTitle);
+ }
+ sal_Int32 nYAxisNumberFormat = getNumberFormatFromAxis(xAxis);
+ CPPUNIT_DUMP_ASSERT_NUMBERS_EQUAL(nYAxisNumberFormat);
+ sal_Int16 nYAxisNumberType = getNumberFormatType(xChartDoc2, nYAxisNumberFormat);
+ CPPUNIT_DUMP_ASSERT_NUMBERS_EQUAL(nYAxisNumberType);
+
+ // Check column labels
+ uno::Reference< chart::XChartDataArray > xChartData(xChartDoc->getData(), UNO_QUERY_THROW);
+ CPPUNIT_ASSERT(xChartData.is());
+ uno::Sequence < OUString > aColumnLabels = xChartData->getColumnDescriptions();
+ CPPUNIT_DUMP_ASSERT_NUMBERS_EQUAL(aColumnLabels.getLength());
+ OUString sColumnLabels = sequenceToOneLineString(aColumnLabels);
+ CPPUNIT_DUMP_ASSERT_STRINGS_EQUAL(sColumnLabels);
+
+ // Check row labels
+ uno::Sequence< OUString > aRowLabels = xChartData->getRowDescriptions();
+ CPPUNIT_DUMP_ASSERT_NUMBERS_EQUAL(aRowLabels.getLength());
+ OUString sRowLabels = sequenceToOneLineString(aRowLabels);
+ CPPUNIT_DUMP_ASSERT_STRINGS_EQUAL(sRowLabels);
+
+ // Check Y values
+ std::vector<std::vector<double> > aDataSeriesYValues = getDataSeriesYValuesFromChartType(xChartType);
+ CPPUNIT_DUMP_ASSERT_NUMBERS_EQUAL(aDataSeriesYValues.size());
+ for (const std::vector<double>& aYValuesOfSeries : aDataSeriesYValues)
+ {
+ CPPUNIT_DUMP_ASSERT_NUMBERS_EQUAL(aYValuesOfSeries.size());
+ OUString sYValuesOfSeries = doubleVectorToOneLineString(aYValuesOfSeries);
+ CPPUNIT_DUMP_ASSERT_STRINGS_EQUAL(sYValuesOfSeries);
+ }
+
+ // Check source ranges
+ for (size_t nIndex = 0; nIndex < aDataSeriesYValues.size(); ++nIndex)
+ {
+ Reference< chart2::data::XDataSequence > xDataSeq = getDataSequenceFromDocByRole(xChartDoc2, "values-x", nIndex);
+ if (xDataSeq.is())
+ {
+ OUString aXValuesSourceRange = xDataSeq->getSourceRangeRepresentation();
+ CPPUNIT_DUMP_ASSERT_STRINGS_EQUAL(aXValuesSourceRange);
+ }
+ xDataSeq.set(getDataSequenceFromDocByRole(xChartDoc2, "values-y", nIndex));
+ if (xDataSeq.is())
+ {
+ OUString aYValuesSourceRange = xDataSeq->getSourceRangeRepresentation();
+ CPPUNIT_DUMP_ASSERT_STRINGS_EQUAL(aYValuesSourceRange);
+ }
+ xDataSeq.set(getDataSequenceFromDocByRole(xChartDoc2, "categories", nIndex));
+ if (xDataSeq.is())
+ {
+ OUString aCategoriesSourceRange = xDataSeq->getSourceRangeRepresentation();
+ CPPUNIT_DUMP_ASSERT_STRINGS_EQUAL(aCategoriesSourceRange);
+ }
+ }
+ }
+}
+
+DECLARE_DUMP_TEST(LegendTest, Chart2DumpTest, false)
+{
+ const std::vector<OUString> aTestFiles =
+ {
+ "legend_on_right_side.ods",
+ "legend_on_bottom.ods",
+ "legend_on_left_side.ods",
+ "legend_on_top.ods",
+ "many_legend_entries.ods",
+ "custom_legend_position.ods",
+ "multiple_categories.ods"
+ };
+
+ for (const OUString& aTestFile : aTestFiles)
+ {
+ setTestFileName(aTestFile);
+ load(getTestFileDirName(), getTestFileName());
+ uno::Reference< chart::XChartDocument > xChartDoc(getChartDocFromSheet(0, mxComponent), UNO_QUERY_THROW);
+ 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());
+
+ // Get legend shape
+ uno::Reference<drawing::XShape> xLegend = getShapeByName(xShapes, "CID/D=0:Legend=");
+ CPPUNIT_ASSERT(xLegend.is());
+
+ // Check legend position and size
+ awt::Point aLegendPosition = xLegend->getPosition();
+ CPPUNIT_DUMP_ASSERT_NUMBERS_EQUAL(aLegendPosition.X);
+ CPPUNIT_DUMP_ASSERT_NUMBERS_EQUAL(aLegendPosition.Y);
+ awt::Size aLegendSize = xLegend->getSize();
+ CPPUNIT_DUMP_ASSERT_NUMBERS_EQUAL(aLegendSize.Width);
+ CPPUNIT_DUMP_ASSERT_NUMBERS_EQUAL(aLegendSize.Height);
+
+ // Check legend entries
+ uno::Reference< chart2::XChartDocument > xChartDoc2(xChartDoc, UNO_QUERY_THROW);
+ Reference<chart2::XChartType> xChartType = getChartTypeFromDoc(xChartDoc2, 0);
+ CPPUNIT_ASSERT(xChartType.is());
+ std::vector<std::vector<double> > aDataSeriesYValues = getDataSeriesYValuesFromChartType(xChartType);
+ size_t nLegendEntryCount = aDataSeriesYValues.size();
+ CPPUNIT_DUMP_ASSERT_NUMBERS_EQUAL(nLegendEntryCount);
+ // Check legend entries geometry
+ for (size_t nSeriesIndex = 0; nSeriesIndex < nLegendEntryCount; ++nSeriesIndex)
+ {
+ uno::Reference<drawing::XShape> xLegendEntry = getShapeByName(xShapes, "CID/MultiClick/D=0:CS=0:CT=0:Series=" + OUString::number(nSeriesIndex) + ":LegendEntry=0");
+ CPPUNIT_ASSERT(xLegendEntry.is());
+
+ // Check position and size
+ awt::Point aLegendEntryPosition = xLegendEntry->getPosition();
+ CPPUNIT_DUMP_ASSERT_NUMBERS_EQUAL(aLegendEntryPosition.X);
+ CPPUNIT_DUMP_ASSERT_NUMBERS_EQUAL(aLegendEntryPosition.Y);
+ awt::Size aLegendEntrySize = xLegendEntry->getSize();
+ CPPUNIT_DUMP_ASSERT_NUMBERS_EQUAL(aLegendEntrySize.Height);
+ CPPUNIT_DUMP_ASSERT_NUMBERS_EQUAL(aLegendEntrySize.Width);
+
+ // Check transformation
+ Reference< beans::XPropertySet > xLegendEntryPropSet(xLegendEntry, UNO_QUERY_THROW);
+ CPPUNIT_ASSERT(xLegendEntryPropSet.is());
+ drawing::HomogenMatrix3 aTransform;
+ xLegendEntryPropSet->getPropertyValue("Transformation") >>= aTransform;
+ OUString sLegendEntryTransformation = transformationToOneLineString(aTransform);
+ CPPUNIT_DUMP_ASSERT_STRINGS_EQUAL(sLegendEntryTransformation);
+
+ uno::Reference<container::XIndexAccess> xLegendEntryContainer(xLegendEntry, UNO_QUERY_THROW);
+ CPPUNIT_DUMP_ASSERT_NUMBERS_EQUAL(xLegendEntryContainer->getCount());
+ for (sal_Int32 nEntryGeometryElement = 1; nEntryGeometryElement < xLegendEntryContainer->getCount(); ++nEntryGeometryElement)
+ {
+ uno::Reference<drawing::XShape> xLegendEntryGeom(xLegendEntryContainer->getByIndex(nEntryGeometryElement), UNO_QUERY_THROW);
+
+ // Check geometry
+ uno::Reference< drawing::XShapeDescriptor > xShapeDescriptor(xLegendEntryGeom, uno::UNO_QUERY_THROW);
+ OUString sEntryGeomShapeType = xShapeDescriptor->getShapeType();
+ CPPUNIT_DUMP_ASSERT_STRINGS_EQUAL(sEntryGeomShapeType);
+
+ // Check display color
+ Reference< beans::XPropertySet > xPropSet(xLegendEntryGeom, UNO_QUERY_THROW);
+ CPPUNIT_ASSERT(xPropSet.is());
+ util::Color aEntryGeomColor = 0;
+ xPropSet->getPropertyValue(UNO_NAME_FILLCOLOR) >>= aEntryGeomColor;
+ CPPUNIT_DUMP_ASSERT_NUMBERS_EQUAL(static_cast<sal_Int32>(aEntryGeomColor));
+ }
+ }
+ // Check legend entries' text
+ uno::Reference<container::XIndexAccess> xLegendContainer(xLegend, UNO_QUERY_THROW);
+ for (sal_Int32 i = 0; i < xLegendContainer->getCount(); ++i)
+ {
+ uno::Reference<drawing::XShape> xShape(xLegendContainer->getByIndex(i), uno::UNO_QUERY);
+ uno::Reference< drawing::XShapeDescriptor > xShapeDescriptor(xShape, uno::UNO_QUERY_THROW);
+ OUString sShapeType = xShapeDescriptor->getShapeType();
+
+ if (sShapeType == "com.sun.star.drawing.TextShape")
+ {
+ uno::Reference<text::XText> xLegendEntryText = uno::Reference<text::XTextRange>(xShape, uno::UNO_QUERY)->getText();
+ CPPUNIT_DUMP_ASSERT_STRINGS_EQUAL(xLegendEntryText->getString());
+ }
+ }
+ }
+}
+
+DECLARE_DUMP_TEST(GridTest, Chart2DumpTest, false)
+{
+ const std::vector<OUString> aTestFiles =
+ {
+ "vertical_grid.ods",
+ "horizontal_grid.ods",
+ "minor_grid.ods",
+ "formated_grid_line.ods"
+ };
+
+ for (const OUString& sTestFile : aTestFiles)
+ {
+ setTestFileName(sTestFile);
+ load(getTestFileDirName(), getTestFileName());
+ uno::Reference< chart::XChartDocument > xChartDoc(getChartDocFromSheet(0, mxComponent), UNO_QUERY_THROW);
+ 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());
+
+ const std::vector<OUString> aGridShapeNames =
+ {
+ "CID/D=0:CS=0:Axis=1,0:Grid=0", // Major vertical grid
+ "CID/D=0:CS=0:Axis=0,0:Grid=0", // Major horizontal grid
+ "CID/D=0:CS=0:Axis=1,0:Grid=0:SubGrid=0", // Minor vertical grid
+ "CID/D=0:CS=0:Axis=0,0:Grid=0:SubGrid=0" // Minor horizontal grid
+ };
+
+ for (const OUString& sGridShapeName : aGridShapeNames)
+ {
+ uno::Reference<drawing::XShape> xGrid = getShapeByName(xShapes, sGridShapeName);
+ if (xGrid.is())
+ {
+ CPPUNIT_DUMP_ASSERT_NOTE(sGridShapeName);
+ // Check position and size
+ awt::Point aGridPosition = xGrid->getPosition();
+ CPPUNIT_DUMP_ASSERT_NUMBERS_EQUAL(aGridPosition.X);
+ CPPUNIT_DUMP_ASSERT_NUMBERS_EQUAL(aGridPosition.Y);
+ awt::Size aGridSize = xGrid->getSize();
+ CPPUNIT_DUMP_ASSERT_NUMBERS_EQUAL(aGridSize.Height);
+ CPPUNIT_DUMP_ASSERT_NUMBERS_EQUAL(aGridSize.Width);
+
+ // Check transformation
+ Reference< beans::XPropertySet > xPropSet(xGrid, UNO_QUERY_THROW);
+ CPPUNIT_ASSERT(xPropSet.is());
+ drawing::HomogenMatrix3 aTransform;
+ xPropSet->getPropertyValue("Transformation") >>= aTransform;
+ OUString sGridTransformation = transformationToOneLineString(aTransform);
+ CPPUNIT_DUMP_ASSERT_STRINGS_EQUAL(sGridTransformation);
+
+ // Check line properties
+ uno::Reference<container::XIndexAccess> xIndexAccess(xGrid, UNO_QUERY_THROW);
+ uno::Reference<drawing::XShape> xGridLine(xIndexAccess->getByIndex(0), UNO_QUERY_THROW);
+ Reference< beans::XPropertySet > xGridLinePropSet(xGridLine, UNO_QUERY_THROW);
+ CPPUNIT_ASSERT(xGridLinePropSet.is());
+ // Line type
+ drawing::LineDash aLineDash;
+ xGridLinePropSet->getPropertyValue("LineDash") >>= aLineDash;
+ OUString sGridLineDash =
+ OUString::number(static_cast<sal_Int32>(aLineDash.Style)) + ";" + OUString::number(aLineDash.Dots) + ";" + OUString::number(aLineDash.DotLen) +
+ OUString::number(aLineDash.Dashes) + ";" + OUString::number(aLineDash.DashLen) + ";" + OUString::number(aLineDash.Distance);
+ CPPUNIT_DUMP_ASSERT_STRINGS_EQUAL(sGridLineDash);
+ // Line color
+ util::Color aLineColor = 0;
+ xGridLinePropSet->getPropertyValue("LineColor") >>= aLineColor;
+ CPPUNIT_DUMP_ASSERT_NUMBERS_EQUAL(static_cast<sal_Int32>(aLineColor));
+ // Line width
+ sal_Int32 nLineWidth = 0;
+ xGridLinePropSet->getPropertyValue("LineWidth") >>= nLineWidth;
+ CPPUNIT_DUMP_ASSERT_NUMBERS_EQUAL(nLineWidth);
+ }
+ }
+ }
+}
+
+DECLARE_DUMP_TEST(AxisGeometryTest, Chart2DumpTest, false)
+{
+ const std::vector<OUString> aTestFiles =
+ {
+ "default_formated_axis.ods",
+ "axis_special_positioning.ods",
+ "formated_axis_lines.ods",
+ "rotated_axis_labels.ods"
+ };
+
+ for (const OUString& sTestFile : aTestFiles)
+ {
+ setTestFileName(sTestFile);
+ load(getTestFileDirName(), getTestFileName());
+ uno::Reference< chart::XChartDocument > xChartDoc(getChartDocFromSheet(0, mxComponent), UNO_QUERY_THROW);
+ 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());
+
+ const std::vector<OUString> aAxisShapeNames =
+ {
+ "CID/D=0:CS=0:Axis=0,0", // X Axis
+ "CID/D=0:CS=0:Axis=1,0", // Y Axis
+ };
+
+ for (const OUString& sAxisShapeName : aAxisShapeNames)
+ {
+ uno::Reference<drawing::XShape> xXAxis = getShapeByName(xShapes, sAxisShapeName);
+ CPPUNIT_ASSERT(xXAxis.is());
+
+ CPPUNIT_DUMP_ASSERT_NOTE(sAxisShapeName);
+ // Check position and size
+ awt::Point aAxisPosition = xXAxis->getPosition();
+ CPPUNIT_DUMP_ASSERT_NUMBERS_EQUAL(aAxisPosition.X);
+ CPPUNIT_DUMP_ASSERT_NUMBERS_EQUAL(aAxisPosition.Y);
+ awt::Size aAxisSize = xXAxis->getSize();
+ CPPUNIT_DUMP_ASSERT_NUMBERS_EQUAL(aAxisSize.Height);
+ CPPUNIT_DUMP_ASSERT_NUMBERS_EQUAL(aAxisSize.Width);
+
+ // Check transformation
+ Reference< beans::XPropertySet > xPropSet(xXAxis, UNO_QUERY_THROW);
+ CPPUNIT_ASSERT(xPropSet.is());
+ drawing::HomogenMatrix3 aTransform;
+ xPropSet->getPropertyValue("Transformation") >>= aTransform;
+ OUString sAxisTransformation = transformationToOneLineString(aTransform);
+ CPPUNIT_DUMP_ASSERT_STRINGS_EQUAL(sAxisTransformation);
+
+ // Check line properties
+ uno::Reference<container::XIndexAccess> xIndexAccess(xXAxis, UNO_QUERY_THROW);
+ sal_Int32 nAxisGeometriesCount = xIndexAccess->getCount();
+ CPPUNIT_DUMP_ASSERT_NUMBERS_EQUAL(nAxisGeometriesCount);
+ uno::Reference<drawing::XShape> xAxisLine(xIndexAccess->getByIndex(0), UNO_QUERY_THROW);
+ Reference< beans::XPropertySet > xAxisLinePropSet(xAxisLine, UNO_QUERY_THROW);
+ CPPUNIT_ASSERT(xAxisLinePropSet.is());
+ // Line type
+ drawing::LineDash aLineDash;
+ xAxisLinePropSet->getPropertyValue("LineDash") >>= aLineDash;
+ OUString sAxisLineDash =
+ OUString::number(static_cast<sal_Int32>(aLineDash.Style)) + ";" + OUString::number(aLineDash.Dots) + ";" + OUString::number(aLineDash.DotLen) +
+ OUString::number(aLineDash.Dashes) + ";" + OUString::number(aLineDash.DashLen) + ";" + OUString::number(aLineDash.Distance);
+ CPPUNIT_DUMP_ASSERT_STRINGS_EQUAL(sAxisLineDash);
+ // Line color
+ util::Color aAxisLineColor = 0;
+ xAxisLinePropSet->getPropertyValue("LineColor") >>= aAxisLineColor;
+ CPPUNIT_DUMP_ASSERT_NUMBERS_EQUAL(static_cast<sal_Int32>(aAxisLineColor));
+ // Line width
+ sal_Int32 nAxisLineWidth = 0;
+ xAxisLinePropSet->getPropertyValue("LineWidth") >>= nAxisLineWidth;
+ CPPUNIT_DUMP_ASSERT_NUMBERS_EQUAL(nAxisLineWidth);
+ }
+ }
+}
+
+DECLARE_DUMP_TEST(AxisLabelTest, Chart2DumpTest, false)
+{
+ const std::vector<OUString> aTestFiles =
+ {
+ "default_formated_axis.ods",
+ "rotated_axis_labels.ods",
+ "formated_axis_labels.ods"
+ };
+
+ for (const OUString& sTestFile : aTestFiles)
+ {
+ setTestFileName(sTestFile);
+ load(getTestFileDirName(), getTestFileName());
+ uno::Reference< chart::XChartDocument > xChartDoc(getChartDocFromSheet(0, mxComponent), UNO_QUERY_THROW);
+ 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());
+
+ const std::vector<OUString> aAxisShapeNames =
+ {
+ "CID/D=0:CS=0:Axis=0,0", // X Axis
+ "CID/D=0:CS=0:Axis=1,0", // Y Axis
+ };
+
+ for (const OUString& sAxisShapeName : aAxisShapeNames)
+ {
+ uno::Reference<drawing::XShape> xXAxis = getShapeByName(xShapes, sAxisShapeName,
+ // Axis occures 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());
+ CPPUNIT_DUMP_ASSERT_NOTE(sAxisShapeName);
+
+ // Check label count
+ uno::Reference<container::XIndexAccess> xIndexAccess(xXAxis, UNO_QUERY_THROW);
+ sal_Int32 nAxisLabelsCount = xIndexAccess->getCount();
+ CPPUNIT_DUMP_ASSERT_NUMBERS_EQUAL(nAxisLabelsCount);
+
+ // Check labels's text, positioning and font properties
+ for (sal_Int32 nLabelIndex = 0; nLabelIndex < nAxisLabelsCount; ++nLabelIndex)
+ {
+ // Check text
+ uno::Reference<text::XTextRange> xLabel(xIndexAccess->getByIndex(nLabelIndex), uno::UNO_QUERY);
+ CPPUNIT_DUMP_ASSERT_STRINGS_EQUAL(xLabel->getString());
+
+ // Check size and position
+ uno::Reference<drawing::XShape> xLabelShape(xLabel, uno::UNO_QUERY);
+ awt::Point aLabelPosition = xLabelShape->getPosition();
+ CPPUNIT_DUMP_ASSERT_NUMBERS_EQUAL(aLabelPosition.X);
+ CPPUNIT_DUMP_ASSERT_NUMBERS_EQUAL(aLabelPosition.Y);
+ awt::Size aLabelSize = xLabelShape->getSize();
+ CPPUNIT_DUMP_ASSERT_NUMBERS_EQUAL(aLabelSize.Height);
+ CPPUNIT_DUMP_ASSERT_NUMBERS_EQUAL(aLabelSize.Width);
+
+ // Check transformation
+ Reference< beans::XPropertySet > xPropSet(xLabelShape, UNO_QUERY_THROW);
+ CPPUNIT_ASSERT(xPropSet.is());
+ drawing::HomogenMatrix3 aTransform;
+ xPropSet->getPropertyValue("Transformation") >>= aTransform;
+ OUString sLabelTransformation = transformationToOneLineString(aTransform);
+ CPPUNIT_DUMP_ASSERT_STRINGS_EQUAL(sLabelTransformation);
+
+ // Check font color and height
+ util::Color aLabelFontColor = 0;
+ xPropSet->getPropertyValue("CharColor") >>= aLabelFontColor;
+ CPPUNIT_DUMP_ASSERT_NUMBERS_EQUAL(static_cast<sal_Int32>(aLabelFontColor));
+ float fLabelFontHeight = 0.0f;
+ xPropSet->getPropertyValue("CharHeight") >>= fLabelFontHeight;
+ CPPUNIT_DUMP_ASSERT_DOUBLES_EQUAL(fLabelFontHeight, EPS);
+ }
+ }
+ }
+}
+
+DECLARE_DUMP_TEST(ColumnChartTest, Chart2DumpTest, false)
+{
+ const std::vector<OUString> aTestFiles =
+ {
+ "normal_column_chart.ods",
+ "stacked_column_chart.ods",
+ "percent_stacked_column_chart.ods",
+ "column_chart_small_spacing.ods",
+ };
+
+ for (const OUString& sTestFile : aTestFiles)
+ {
+ setTestFileName(sTestFile);
+ load(getTestFileDirName(), getTestFileName());
+ uno::Reference< chart::XChartDocument > xChartDoc(getChartDocFromSheet(0, mxComponent), UNO_QUERY_THROW);
+ 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());
+
+ uno::Reference< chart2::XChartDocument > xChartDoc2(xChartDoc, UNO_QUERY_THROW);
+ Reference<chart2::XChartType> xChartType = getChartTypeFromDoc(xChartDoc2, 0);
+ CPPUNIT_ASSERT(xChartType.is());
+ std::vector<std::vector<double> > aDataSeriesYValues = getDataSeriesYValuesFromChartType(xChartType);
+ size_t nSeriesCount = aDataSeriesYValues.size();
+ CPPUNIT_DUMP_ASSERT_NUMBERS_EQUAL(nSeriesCount);
+
+ for (size_t nSeries = 0; nSeries < nSeriesCount; ++nSeries)
+ {
+ uno::Reference<drawing::XShape> xSeriesColumns = getShapeByName(xShapes, "CID/D=0:CS=0:CT=0:Series=" + OUString::number(nSeries));
+ CPPUNIT_ASSERT(xSeriesColumns.is());
+ CPPUNIT_DUMP_ASSERT_NOTE("Series " + OUString::number(nSeries) + " Columns");
+
+ // Check column count in the series
+ uno::Reference<container::XIndexAccess> xIndexAccess(xSeriesColumns, UNO_QUERY_THROW);
+ sal_Int32 nColumnCountInSeries = xIndexAccess->getCount();
+ CPPUNIT_DUMP_ASSERT_NUMBERS_EQUAL(nColumnCountInSeries);
+
+ // Check column fill style and color
+ Reference< beans::XPropertySet > xColumnPropSet(xIndexAccess->getByIndex(0), UNO_QUERY_THROW);
+ drawing::FillStyle aSeriesColumnFillStyle;
+ xColumnPropSet->getPropertyValue(UNO_NAME_FILLSTYLE) >>= aSeriesColumnFillStyle;
+ CPPUNIT_DUMP_ASSERT_NUMBERS_EQUAL(static_cast<sal_Int32>(aSeriesColumnFillStyle));
+ util::Color aSeriesColumnFillColor = 0;
+ xColumnPropSet->getPropertyValue(UNO_NAME_FILLCOLOR) >>= aSeriesColumnFillColor;
+ CPPUNIT_DUMP_ASSERT_NUMBERS_EQUAL(static_cast<sal_Int32>(aSeriesColumnFillColor));
+
+ for (sal_Int32 nColumn = 0; nColumn < nColumnCountInSeries; ++nColumn)
+ {
+ uno::Reference<drawing::XShape> xColumn(xIndexAccess->getByIndex(nColumn), UNO_QUERY_THROW);
+ uno::Reference<container::XNamed> xNamedShape(xIndexAccess->getByIndex(nColumn), uno::UNO_QUERY);
+ CPPUNIT_DUMP_ASSERT_NOTE(xNamedShape->getName());
+
+ // Check size and position
+ awt::Point aColumnPosition = xColumn->getPosition();
+ CPPUNIT_DUMP_ASSERT_NUMBERS_EQUAL(aColumnPosition.X);
+ CPPUNIT_DUMP_ASSERT_NUMBERS_EQUAL(aColumnPosition.Y);
+ awt::Size aColumnSize = xColumn->getSize();
+ CPPUNIT_DUMP_ASSERT_NUMBERS_EQUAL(aColumnSize.Height);
+ CPPUNIT_DUMP_ASSERT_NUMBERS_EQUAL(aColumnSize.Width);
+
+ // Check transformation
+ Reference< beans::XPropertySet > xPropSet(xColumn, UNO_QUERY_THROW);
+ CPPUNIT_ASSERT(xPropSet.is());
+ drawing::HomogenMatrix3 aTransform;
+ xPropSet->getPropertyValue("Transformation") >>= aTransform;
+ OUString aColumnTransformation = transformationToOneLineString(aTransform);
+ CPPUNIT_DUMP_ASSERT_STRINGS_EQUAL(aColumnTransformation);
+ }
+ }
+ }
+}
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/qa/extras/chart2dump/data/axis_special_positioning.ods b/chart2/qa/extras/chart2dump/data/axis_special_positioning.ods
new file mode 100755
index 000000000000..f60197a0d2c3
--- /dev/null
+++ b/chart2/qa/extras/chart2dump/data/axis_special_positioning.ods
Binary files differ
diff --git a/chart2/qa/extras/chart2dump/data/column_chart_small_spacing.ods b/chart2/qa/extras/chart2dump/data/column_chart_small_spacing.ods
new file mode 100755
index 000000000000..4040ab38ea89
--- /dev/null
+++ b/chart2/qa/extras/chart2dump/data/column_chart_small_spacing.ods
Binary files differ
diff --git a/chart2/qa/extras/chart2dump/data/custom_legend_position.ods b/chart2/qa/extras/chart2dump/data/custom_legend_position.ods
new file mode 100755
index 000000000000..8a8fca88d382
--- /dev/null
+++ b/chart2/qa/extras/chart2dump/data/custom_legend_position.ods
Binary files differ
diff --git a/chart2/qa/extras/chart2dump/data/default_formated_axis.ods b/chart2/qa/extras/chart2dump/data/default_formated_axis.ods
new file mode 100755
index 000000000000..96f846219077
--- /dev/null
+++ b/chart2/qa/extras/chart2dump/data/default_formated_axis.ods
Binary files differ
diff --git a/chart2/qa/extras/chart2dump/data/formated_axis_labels.ods b/chart2/qa/extras/chart2dump/data/formated_axis_labels.ods
new file mode 100755
index 000000000000..b2a36ae647b7
--- /dev/null
+++ b/chart2/qa/extras/chart2dump/data/formated_axis_labels.ods
Binary files differ
diff --git a/chart2/qa/extras/chart2dump/data/formated_axis_lines.ods b/chart2/qa/extras/chart2dump/data/formated_axis_lines.ods
new file mode 100755
index 000000000000..1e51ef1522fa
--- /dev/null
+++ b/chart2/qa/extras/chart2dump/data/formated_axis_lines.ods
Binary files differ
diff --git a/chart2/qa/extras/chart2dump/data/formated_grid_line.ods b/chart2/qa/extras/chart2dump/data/formated_grid_line.ods
new file mode 100755
index 000000000000..4503cbf68087
--- /dev/null
+++ b/chart2/qa/extras/chart2dump/data/formated_grid_line.ods
Binary files differ
diff --git a/chart2/qa/extras/chart2dump/data/horizontal_grid.ods b/chart2/qa/extras/chart2dump/data/horizontal_grid.ods
new file mode 100755
index 000000000000..51e281135747
--- /dev/null
+++ b/chart2/qa/extras/chart2dump/data/horizontal_grid.ods
Binary files differ
diff --git a/chart2/qa/extras/chart2dump/data/legend_on_bottom.ods b/chart2/qa/extras/chart2dump/data/legend_on_bottom.ods
new file mode 100755
index 000000000000..9abb8a8685e1
--- /dev/null
+++ b/chart2/qa/extras/chart2dump/data/legend_on_bottom.ods
Binary files differ
diff --git a/chart2/qa/extras/chart2dump/data/legend_on_left_side.ods b/chart2/qa/extras/chart2dump/data/legend_on_left_side.ods
new file mode 100755
index 000000000000..38115ace06e8
--- /dev/null
+++ b/chart2/qa/extras/chart2dump/data/legend_on_left_side.ods
Binary files differ
diff --git a/chart2/qa/extras/chart2dump/data/legend_on_right_side.ods b/chart2/qa/extras/chart2dump/data/legend_on_right_side.ods
new file mode 100755
index 000000000000..a41b6585f8f6
--- /dev/null
+++ b/chart2/qa/extras/chart2dump/data/legend_on_right_side.ods
Binary files differ
diff --git a/chart2/qa/extras/chart2dump/data/legend_on_top.ods b/chart2/qa/extras/chart2dump/data/legend_on_top.ods
new file mode 100755
index 000000000000..2b20ec356ad9
--- /dev/null
+++ b/chart2/qa/extras/chart2dump/data/legend_on_top.ods
Binary files differ
diff --git a/chart2/qa/extras/chart2dump/data/many_legend_entries.ods b/chart2/qa/extras/chart2dump/data/many_legend_entries.ods
new file mode 100755
index 000000000000..0dc5114418bf
--- /dev/null
+++ b/chart2/qa/extras/chart2dump/data/many_legend_entries.ods
Binary files differ
diff --git a/chart2/qa/extras/chart2dump/data/minor_grid.ods b/chart2/qa/extras/chart2dump/data/minor_grid.ods
new file mode 100755
index 000000000000..3657df92a989
--- /dev/null
+++ b/chart2/qa/extras/chart2dump/data/minor_grid.ods
Binary files differ
diff --git a/chart2/qa/extras/chart2dump/data/multiple_categories.ods b/chart2/qa/extras/chart2dump/data/multiple_categories.ods
new file mode 100755
index 000000000000..67e00525b9ed
--- /dev/null
+++ b/chart2/qa/extras/chart2dump/data/multiple_categories.ods
Binary files differ
diff --git a/chart2/qa/extras/chart2dump/data/normal_column_chart.ods b/chart2/qa/extras/chart2dump/data/normal_column_chart.ods
new file mode 100755
index 000000000000..df8dccebbae0
--- /dev/null
+++ b/chart2/qa/extras/chart2dump/data/normal_column_chart.ods
Binary files differ
diff --git a/chart2/qa/extras/chart2dump/data/percent_stacked_column_chart.ods b/chart2/qa/extras/chart2dump/data/percent_stacked_column_chart.ods
new file mode 100755
index 000000000000..e144f94a2c12
--- /dev/null
+++ b/chart2/qa/extras/chart2dump/data/percent_stacked_column_chart.ods
Binary files differ
diff --git a/chart2/qa/extras/chart2dump/data/rotated_axis_labels.ods b/chart2/qa/extras/chart2dump/data/rotated_axis_labels.ods
new file mode 100755
index 000000000000..c5a7cd65784c
--- /dev/null
+++ b/chart2/qa/extras/chart2dump/data/rotated_axis_labels.ods
Binary files differ
diff --git a/chart2/qa/extras/chart2dump/data/simple_chart.ods b/chart2/qa/extras/chart2dump/data/simple_chart.ods
new file mode 100755
index 000000000000..df931edf4264
--- /dev/null
+++ b/chart2/qa/extras/chart2dump/data/simple_chart.ods
Binary files differ
diff --git a/chart2/qa/extras/chart2dump/data/stacked_column_chart.ods b/chart2/qa/extras/chart2dump/data/stacked_column_chart.ods
new file mode 100755
index 000000000000..99076a7895d1
--- /dev/null
+++ b/chart2/qa/extras/chart2dump/data/stacked_column_chart.ods
Binary files differ
diff --git a/chart2/qa/extras/chart2dump/data/vertical_grid.ods b/chart2/qa/extras/chart2dump/data/vertical_grid.ods
new file mode 100755
index 000000000000..2d14de94e907
--- /dev/null
+++ b/chart2/qa/extras/chart2dump/data/vertical_grid.ods
Binary files differ
diff --git a/chart2/qa/extras/chart2dump/reference/axisgeometrytest/axis_special_positioning.txt b/chart2/qa/extras/chart2dump/reference/axisgeometrytest/axis_special_positioning.txt
new file mode 100755
index 000000000000..0ee9485aaef2
--- /dev/null
+++ b/chart2/qa/extras/chart2dump/reference/axisgeometrytest/axis_special_positioning.txt
@@ -0,0 +1,38 @@
+/// CID/D=0:CS=0:Axis=0,0
+// aAxisPosition.X
+4311
+// aAxisPosition.Y
+1092
+// aAxisSize.Height
+645
+// aAxisSize.Width
+14441
+// sAxisTransformation
+14442;0;43110;646;10920;0;1
+// nAxisGeometriesCount
+4
+// sAxisLineDash
+0;1;201;20;20
+// static_cast<sal_Int32>(aAxisLineColor)
+0
+// nAxisLineWidth
+0
+/// CID/D=0:CS=0:Axis=1,0
+// aAxisPosition.X
+18752
+// aAxisPosition.Y
+1587
+// aAxisSize.Height
+5931
+// aAxisSize.Width
+150
+// sAxisTransformation
+151;0;187520;5932;15870;0;1
+// nAxisGeometriesCount
+3
+// sAxisLineDash
+0;1;201;20;20
+// static_cast<sal_Int32>(aAxisLineColor)
+0
+// nAxisLineWidth
+0
diff --git a/chart2/qa/extras/chart2dump/reference/axisgeometrytest/default_formated_axis.txt b/chart2/qa/extras/chart2dump/reference/axisgeometrytest/default_formated_axis.txt
new file mode 100755
index 000000000000..dcc57166c70d
--- /dev/null
+++ b/chart2/qa/extras/chart2dump/reference/axisgeometrytest/default_formated_axis.txt
@@ -0,0 +1,38 @@
+/// CID/D=0:CS=0:Axis=0,0
+// aAxisPosition.X
+3510
+// aAxisPosition.Y
+7520
+// aAxisSize.Height
+495
+// aAxisSize.Width
+14438
+// sAxisTransformation
+14439;0;35100;496;75200;0;1
+// nAxisGeometriesCount
+4
+// sAxisLineDash
+0;1;201;20;20
+// static_cast<sal_Int32>(aAxisLineColor)
+0
+// nAxisLineWidth
+0
+/// CID/D=0:CS=0:Axis=1,0
+// aAxisPosition.X
+3360
+// aAxisPosition.Y
+1588
+// aAxisSize.Height
+5932
+// aAxisSize.Width
+150
+// sAxisTransformation
+151;0;33600;5933;15880;0;1
+// nAxisGeometriesCount
+2
+// sAxisLineDash
+0;1;201;20;20
+// static_cast<sal_Int32>(aAxisLineColor)
+0
+// nAxisLineWidth
+0
diff --git a/chart2/qa/extras/chart2dump/reference/axisgeometrytest/formated_axis_lines.txt b/chart2/qa/extras/chart2dump/reference/axisgeometrytest/formated_axis_lines.txt
new file mode 100755
index 000000000000..c39f32badf6c
--- /dev/null
+++ b/chart2/qa/extras/chart2dump/reference/axisgeometrytest/formated_axis_lines.txt
@@ -0,0 +1,38 @@
+/// CID/D=0:CS=0:Axis=0,0
+// aAxisPosition.X
+3510
+// aAxisPosition.Y
+7520
+// aAxisSize.Height
+495
+// aAxisSize.Width
+14439
+// sAxisTransformation
+14440;0;35100;496;75200;0;1
+// nAxisGeometriesCount
+4
+// sAxisLineDash
+0;1;00;0;457
+// static_cast<sal_Int32>(aAxisLineColor)
+0
+// nAxisLineWidth
+100
+/// CID/D=0:CS=0:Axis=1,0
+// aAxisPosition.X
+3360
+// aAxisPosition.Y
+1588
+// aAxisSize.Height
+5932
+// aAxisSize.Width
+150
+// sAxisTransformation
+151;0;33600;5933;15880;0;1
+// nAxisGeometriesCount
+2
+// sAxisLineDash
+0;1;511;51;51
+// static_cast<sal_Int32>(aAxisLineColor)
+65280
+// nAxisLineWidth
+100
diff --git a/chart2/qa/extras/chart2dump/reference/axisgeometrytest/rotated_axis_labels.txt b/chart2/qa/extras/chart2dump/reference/axisgeometrytest/rotated_axis_labels.txt
new file mode 100755
index 000000000000..b53820a9cb0e
--- /dev/null
+++ b/chart2/qa/extras/chart2dump/reference/axisgeometrytest/rotated_axis_labels.txt
@@ -0,0 +1,38 @@
+/// CID/D=0:CS=0:Axis=0,0
+// aAxisPosition.X
+3510
+// aAxisPosition.Y
+7520
+// aAxisSize.Height
+1724
+// aAxisSize.Width
+14439
+// sAxisTransformation
+14440;0;35100;1725;75200;0;1
+// nAxisGeometriesCount
+4
+// sAxisLineDash
+0;1;201;20;20
+// static_cast<sal_Int32>(aAxisLineColor)
+0
+// nAxisLineWidth
+0
+/// CID/D=0:CS=0:Axis=1,0
+// aAxisPosition.X
+3360
+// aAxisPosition.Y
+1588
+// aAxisSize.Height
+5932
+// aAxisSize.Width
+150
+// sAxisTransformation
+151;0;33600;5933;15880;0;1
+// nAxisGeometriesCount
+2
+// sAxisLineDash
+0;1;201;20;20
+// static_cast<sal_Int32>(aAxisLineColor)
+0
+// nAxisLineWidth
+0
diff --git a/chart2/qa/extras/chart2dump/reference/axislabeltest/default_formated_axis.txt b/chart2/qa/extras/chart2dump/reference/axislabeltest/default_formated_axis.txt
new file mode 100755
index 000000000000..7a67db66c07a
--- /dev/null
+++ b/chart2/qa/extras/chart2dump/reference/axislabeltest/default_formated_axis.txt
@@ -0,0 +1,198 @@
+/// CID/D=0:CS=0:Axis=0,0
+// nAxisLabelsCount
+4
+// xLabel->getString()
+1. negyedév
+// aLabelPosition.X
+4374
+// aLabelPosition.Y
+7770
+// aLabelSize.Height
+345
+// aLabelSize.Width
+1881
+// sLabelTransformation
+1882;0;43740;346;77700;0;1
+// static_cast<sal_Int32>(aLabelFontColor)
+0
+// fLabelFontHeight
+10
+// xLabel->getString()
+2. negyedév
+// aLabelPosition.X
+7984
+// aLabelPosition.Y
+7770
+// aLabelSize.Height
+345
+// aLabelSize.Width
+1881
+// sLabelTransformation
+1882;0;79840;346;77700;0;1
+// static_cast<sal_Int32>(aLabelFontColor)
+0
+// fLabelFontHeight
+10
+// xLabel->getString()
+3. negyedév
+// aLabelPosition.X
+11593
+// aLabelPosition.Y
+7770
+// aLabelSize.Height
+345
+// aLabelSize.Width
+1881
+// sLabelTransformation
+1882;0;115930;346;77700;0;1
+// static_cast<sal_Int32>(aLabelFontColor)
+0
+// fLabelFontHeight
+10
+// xLabel->getString()
+4. negyedév
+// aLabelPosition.X
+15203
+// aLabelPosition.Y
+7770
+// aLabelSize.Height
+345
+// aLabelSize.Width
+1881
+// sLabelTransformation
+1882;0;152030;346;77700;0;1
+// static_cast<sal_Int32>(aLabelFontColor)
+0
+// fLabelFontHeight
+10
+/// CID/D=0:CS=0:Axis=1,0
+// nAxisLabelsCount
+8
+// xLabel->getString()
+- Ft
+// aLabelPosition.X
+2518
+// aLabelPosition.Y
+7348
+// aLabelSize.Height
+345
+// aLabelSize.Width
+743
+// sLabelTransformation
+744;0;25180;346;73480;0;1
+// static_cast<sal_Int32>(aLabelFontColor)
+0
+// fLabelFontHeight
+10
+// xLabel->getString()
+5,000,000 Ft
+// aLabelPosition.X
+1116
+// aLabelPosition.Y
+6500
+// aLabelSize.Height
+345
+// aLabelSize.Width
+2145
+// sLabelTransformation
+2146;0;11160;346;65000;0;1
+// static_cast<sal_Int32>(aLabelFontColor)
+0
+// fLabelFontHeight
+10
+// xLabel->getString()
+10,000,000 Ft
+// aLabelPosition.X
+930
+// aLabelPosition.Y
+5653
+// aLabelSize.Height
+345
+// aLabelSize.Width
+2331
+// sLabelTransformation
+2332;0;9300;346;56530;0;1
+// static_cast<sal_Int32>(aLabelFontColor)
+0
+// fLabelFontHeight
+10
+// xLabel->getString()
+15,000,000 Ft
+// aLabelPosition.X
+930
+// aLabelPosition.Y
+4805
+// aLabelSize.Height
+345
+// aLabelSize.Width
+2331
+// sLabelTransformation
+2332;0;9300;346;48050;0;1
+// static_cast<sal_Int32>(aLabelFontColor)
+0
+// fLabelFontHeight
+10
+// xLabel->getString()
+20,000,000 Ft
+// aLabelPosition.X
+930
+// aLabelPosition.Y
+3958
+// aLabelSize.Height
+345
+// aLabelSize.Width
+2331
+// sLabelTransformation
+2332;0;9300;346;39580;0;1
+// static_cast<sal_Int32>(aLabelFontColor)
+0
+// fLabelFontHeight
+10
+// xLabel->getString()
+25,000,000 Ft
+// aLabelPosition.X
+930
+// aLabelPosition.Y
+3110
+// aLabelSize.Height
+345
+// aLabelSize.Width
+2331
+// sLabelTransformation
+2332;0;9300;346;31100;0;1
+// static_cast<sal_Int32>(aLabelFontColor)
+0
+// fLabelFontHeight
+10
+// xLabel->getString()
+30,000,000 Ft
+// aLabelPosition.X
+930
+// aLabelPosition.Y
+2263
+// aLabelSize.Height
+345
+// aLabelSize.Width
+2331
+// sLabelTransformation
+2332;0;9300;346;22630;0;1
+// static_cast<sal_Int32>(aLabelFontColor)
+0
+// fLabelFontHeight
+10
+// xLabel->getString()
+35,000,000 Ft
+// aLabelPosition.X
+930
+// aLabelPosition.Y
+1416
+// aLabelSize.Height
+345
+// aLabelSize.Width
+2331
+// sLabelTransformation
+2332;0;9300;346;14160;0;1
+// static_cast<sal_Int32>(aLabelFontColor)
+0
+// fLabelFontHeight
+10
diff --git a/chart2/qa/extras/chart2dump/reference/axislabeltest/formated_axis_labels.txt b/chart2/qa/extras/chart2dump/reference/axislabeltest/formated_axis_labels.txt
new file mode 100755
index 000000000000..c1baec952f25
--- /dev/null
+++ b/chart2/qa/extras/chart2dump/reference/axislabeltest/formated_axis_labels.txt
@@ -0,0 +1,198 @@
+/// CID/D=0:CS=0:Axis=0,0
+// nAxisLabelsCount
+4
+// xLabel->getString()
+1. negyedév
+// aLabelPosition.X
+4520
+// aLabelPosition.Y
+7770
+// aLabelSize.Height
+292
+// aLabelSize.Width
+1590
+// sLabelTransformation
+1591;0;45200;293;77700;0;1
+// static_cast<sal_Int32>(aLabelFontColor)
+16711680
+// fLabelFontHeight
+8
+// xLabel->getString()
+2. negyedév
+// aLabelPosition.X
+8130
+// aLabelPosition.Y
+7770
+// aLabelSize.Height
+292
+// aLabelSize.Width
+1590
+// sLabelTransformation
+1591;0;81300;293;77700;0;1
+// static_cast<sal_Int32>(aLabelFontColor)
+16711680
+// fLabelFontHeight
+8
+// xLabel->getString()
+3. negyedév
+// aLabelPosition.X
+11740
+// aLabelPosition.Y
+7770
+// aLabelSize.Height
+292
+// aLabelSize.Width
+1590
+// sLabelTransformation
+1591;0;117400;293;77700;0;1
+// static_cast<sal_Int32>(aLabelFontColor)
+16711680
+// fLabelFontHeight
+8
+// xLabel->getString()
+4. negyedév
+// aLabelPosition.X
+15350
+// aLabelPosition.Y
+7770
+// aLabelSize.Height
+292
+// aLabelSize.Width
+1590
+// sLabelTransformation
+1591;0;153500;293;77700;0;1
+// static_cast<sal_Int32>(aLabelFontColor)
+16711680
+// fLabelFontHeight
+8
+/// CID/D=0:CS=0:Axis=1,0
+// nAxisLabelsCount
+8
+// xLabel->getString()
+- Ft
+// aLabelPosition.X
+2730
+// aLabelPosition.Y
+7401
+// aLabelSize.Height
+239
+// aLabelSize.Width
+531
+// sLabelTransformation
+532;0;27300;240;74010;0;1
+// static_cast<sal_Int32>(aLabelFontColor)
+32767
+// fLabelFontHeight
+7
+// xLabel->getString()
+5,000,000 Ft
+// aLabelPosition.X
+1725
+// aLabelPosition.Y
+6553
+// aLabelSize.Height
+239
+// aLabelSize.Width
+1536
+// sLabelTransformation
+1537;0;17250;240;65530;0;1
+// static_cast<sal_Int32>(aLabelFontColor)
+32767
+// fLabelFontHeight
+7
+// xLabel->getString()
+10,000,000 Ft
+// aLabelPosition.X
+1592
+// aLabelPosition.Y
+5706
+// aLabelSize.Height
+239
+// aLabelSize.Width
+1669
+// sLabelTransformation
+1670;0;15920;240;57060;0;1
+// static_cast<sal_Int32>(aLabelFontColor)
+32767
+// fLabelFontHeight
+7
+// xLabel->getString()
+15,000,000 Ft
+// aLabelPosition.X
+1592
+// aLabelPosition.Y
+4858
+// aLabelSize.Height
+239
+// aLabelSize.Width
+1669
+// sLabelTransformation
+1670;0;15920;240;48580;0;1
+// static_cast<sal_Int32>(aLabelFontColor)
+32767
+// fLabelFontHeight
+7
+// xLabel->getString()
+20,000,000 Ft
+// aLabelPosition.X
+1592
+// aLabelPosition.Y
+4011
+// aLabelSize.Height
+239
+// aLabelSize.Width
+1669
+// sLabelTransformation
+1670;0;15920;240;40110;0;1
+// static_cast<sal_Int32>(aLabelFontColor)
+32767
+// fLabelFontHeight
+7
+// xLabel->getString()
+25,000,000 Ft
+// aLabelPosition.X
+1592
+// aLabelPosition.Y
+3163
+// aLabelSize.Height
+239
+// aLabelSize.Width
+1669
+// sLabelTransformation
+1670;0;15920;240;31630;0;1
+// static_cast<sal_Int32>(aLabelFontColor)
+32767
+// fLabelFontHeight
+7
+// xLabel->getString()
+30,000,000 Ft
+// aLabelPosition.X
+1592
+// aLabelPosition.Y
+2316
+// aLabelSize.Height
+239
+// aLabelSize.Width
+1669
+// sLabelTransformation
+1670;0;15920;240;23160;0;1
+// static_cast<sal_Int32>(aLabelFontColor)
+32767
+// fLabelFontHeight
+7
+// xLabel->getString()
+35,000,000 Ft
+// aLabelPosition.X
+1592
+// aLabelPosition.Y
+1469
+// aLabelSize.Height
+239
+// aLabelSize.Width
+1669
+// sLabelTransformation
+1670;0;15920;240;14690;0;1
+// static_cast<sal_Int32>(aLabelFontColor)
+32767
+// fLabelFontHeight
+7
diff --git a/chart2/qa/extras/chart2dump/reference/axislabeltest/rotated_axis_labels.txt b/chart2/qa/extras/chart2dump/reference/axislabeltest/rotated_axis_labels.txt
new file mode 100755
index 000000000000..0e62ab0fbf64
--- /dev/null
+++ b/chart2/qa/extras/chart2dump/reference/axislabeltest/rotated_axis_labels.txt
@@ -0,0 +1,150 @@
+/// CID/D=0:CS=0:Axis=0,0
+// nAxisLabelsCount
+4
+// xLabel->getString()
+1. negyedév
+// aLabelPosition.X
+4527
+// aLabelPosition.Y
+9100
+// aLabelSize.Height
+345
+// aLabelSize.Width
+1881
+// sLabelTransformation
+1330.77496219308;244.658946290545;4527-1330.77496219308;244.658946290545;91000;0;1
+// static_cast<sal_Int32>(aLabelFontColor)
+0
+// fLabelFontHeight
+10
+// xLabel->getString()
+2. negyedév
+// aLabelPosition.X
+8137
+// aLabelPosition.Y
+9100
+// aLabelSize.Height
+345
+// aLabelSize.Width
+1881
+// sLabelTransformation
+1330.77496219308;244.658946290545;8137-1330.77496219308;244.658946290545;91000;0;1
+// static_cast<sal_Int32>(aLabelFontColor)
+0
+// fLabelFontHeight
+10
+// xLabel->getString()
+3. negyedév
+// aLabelPosition.X
+11747
+// aLabelPosition.Y
+9100
+// aLabelSize.Height
+345
+// aLabelSize.Width
+1881
+// sLabelTransformation
+1330.77496219308;244.658946290545;11747-1330.77496219308;244.658946290545;91000;0;1
+// static_cast<sal_Int32>(aLabelFontColor)
+0
+// fLabelFontHeight
+10
+// xLabel->getString()
+4. negyedév
+// aLabelPosition.X
+15357
+// aLabelPosition.Y
+9100
+// aLabelSize.Height
+345
+// aLabelSize.Width
+1881
+// sLabelTransformation
+1330.77496219308;244.658946290545;15357-1330.77496219308;244.658946290545;91000;0;1
+// static_cast<sal_Int32>(aLabelFontColor)
+0
+// fLabelFontHeight
+10
+/// CID/D=0:CS=0:Axis=1,0
+// nAxisLabelsCount
+5
+// xLabel->getString()
+- Ft
+// aLabelPosition.X
+2616
+// aLabelPosition.Y
+7000
+// aLabelSize.Height
+345
+// aLabelSize.Width
+743
+// sLabelTransformation
+644.322900415622;-173;2616372;299.644789709416;70000;0;1
+// static_cast<sal_Int32>(aLabelFontColor)
+0
+// fLabelFontHeight
+10
+// xLabel->getString()
+10,000,000 Ft
+// aLabelPosition.X
+1241
+// aLabelPosition.Y
+4723
+// aLabelSize.Height
+345
+// aLabelSize.Width
+2331
+// sLabelTransformation
+2019.57124162531;-173;12411166;299.644789709416;47230;0;1
+// static_cast<sal_Int32>(aLabelFontColor)
+0
+// fLabelFontHeight
+10
+// xLabel->getString()
+20,000,000 Ft
+// aLabelPosition.X
+1241
+// aLabelPosition.Y
+3240
+// aLabelSize.Height
+345
+// aLabelSize.Width
+2331
+// sLabelTransformation
+2019.57124162531;-173;12411166;299.644789709416;32400;0;1
+// static_cast<sal_Int32>(aLabelFontColor)
+0
+// fLabelFontHeight
+10
+// xLabel->getString()
+30,000,000 Ft
+// aLabelPosition.X
+1241
+// aLabelPosition.Y
+1757
+// aLabelSize.Height
+345
+// aLabelSize.Width
+2331
+// sLabelTransformation
+2019.57124162531;-173;12411166;299.644789709416;17570;0;1
+// static_cast<sal_Int32>(aLabelFontColor)
+0
+// fLabelFontHeight
+10
+// xLabel->getString()
+40,000,000 Ft
+// aLabelPosition.X
+1241
+// aLabelPosition.Y
+274
+// aLabelSize.Height
+345
+// aLabelSize.Width
+2331
+// sLabelTransformation
+2019.57124162531;-173;12411166;299.644789709416;2740;0;1
+// static_cast<sal_Int32>(aLabelFontColor)
+0
+// fLabelFontHeight
+10
diff --git a/chart2/qa/extras/chart2dump/reference/chartdatatest/multiple_categories.txt b/chart2/qa/extras/chart2dump/reference/chartdatatest/multiple_categories.txt
new file mode 100755
index 000000000000..1d0e3ea39df5
--- /dev/null
+++ b/chart2/qa/extras/chart2dump/reference/chartdatatest/multiple_categories.txt
@@ -0,0 +1,70 @@
+// sChartTitle
+Chart Title
+// sChartType
+com.sun.star.chart2.LineChartType
+// nXAxisNumberFormat
+0
+// nXAxisNumberType
+16
+// nYAxisNumberFormat
+0
+// nYAxisNumberType
+16
+// aColumnLabels.getLength()
+8
+// sColumnLabels
+A In0;A In100;A In200;A In400;B In0;B In100;B In200;B In400;
+// aRowLabels.getLength()
+49
+// sRowLabels
+M 14;M 15;M 99;M 22;M 17;M 25;M 28;M 25;M 26;M 24;M 25;M 22;M 33;M 22;M 25;M 32;M 19;M 14;M 18;F 22;F 16;F 26;F 18;F 48;F 19;F 24;F 22;F 25;F 28;F 23;F 25;F 29;F 24;F 27;F 24;F 27;F 27;F 31;F 17;F 50;F 17;F 16;F 17;F 15;F 17;F 17;F 17;F 17;F 18;
+// aDataSeriesYValues.size()
+8
+// aYValuesOfSeries.size()
+49
+// sYValuesOfSeries
+0.533;0.413;0.55;0.273;0.45;0.423;0.54;0.433;0.417;0.513;0.563;0.503;0.54;0.737;0.563;0.36;0.443;1.007;1.21;0.51;0.443;0.41;0.637;1.15;0.777;0.58;0.587;0.713;0.477;0.533;0.55;0.443;0.197;0.48;0.497;0.513;0.607;0.573;0.54;0.283;0.257;0.43;0.223;0.377;0.38;0.573;1.843;0.427;0.523;
+// aYValuesOfSeries.size()
+49
+// sYValuesOfSeries
+0.8;0.287;0.457;0.143;0.61;0.373;0.47;0.397;0.413;0.337;0.347;0.447;0.467;0.587;0.533;0.34;0.647;0.647;0.823;0.77;0.743;0.607;0.523;0.7;1.053;0.407;0.577;0.533;0.54;0.347;0.633;0.56;0.397;0.423;0.393;0.707;0.703;0.65;0.487;0.437;0.937;0.547;0.357;0.61;0.597;0.517;0.503;0.333;0.84;
+// aYValuesOfSeries.size()
+49
+// sYValuesOfSeries
+0.38;0.547;0.35;0.46;0.607;0.44;0.68;0.47;0.43;0.363;0.46;0.533;0.44;0.2;0.627;0.307;0.27;0.5;0.66;0.403;0.413;0.61;0.58;0.973;0.903;0.57;0.563;0.617;0.463;0.537;0.497;0.42;0.253;0.49;0.43;0.577;1.07;0.583;0.427;0.297;0.397;0.503;0.717;0.507;0.513;0.743;0.693;0.44;0.737;
+// aYValuesOfSeries.size()
+49
+// sYValuesOfSeries
+0.467;0.467;0.463;0.367;0.457;0.443;0.63;0.48;0.38;0.577;0.477;0.443;0.47;0.557;0.45;0.46;0.283;0.523;0.527;0.537;0.34;0.32;0.51;1.12;0.897;0.437;0.673;0.637;0.463;0.613;0.72;0.443;0.25;0.497;0.393;0.503;0.617;0.87;0.383;0.383;0.39;0.467;0.373;0.523;0.553;0.353;0.37;0.493;0.52;
+// aYValuesOfSeries.size()
+49
+// sYValuesOfSeries
+1.533;1.413;1.55;1.273;1.45;1.423;1.54;1.433;1.417;1.513;1.563;1.503;1.54;1.737;1.563;1.36;1.443;2.007;2.21;1.51;1.443;1.41;1.637;2.15;1.777;1.58;1.587;1.713;1.477;1.533;1.55;1.443;1.197;1.48;1.497;1.513;1.607;1.573;1.54;1.283;1.257;1.43;1.223;1.377;1.38;1.573;2.843;1.427;1.523;
+// aYValuesOfSeries.size()
+49
+// sYValuesOfSeries
+0.7;0.187;0.357;0.043;0.51;0.273;0.37;0.297;0.313;0.237;0.247;0.347;0.367;0.487;0.433;0.24;0.547;0.547;0.723;0.67;0.643;0.507;0.423;0.6;0.953;0.307;0.477;0.433;0.44;0.247;0.533;0.46;0.297;0.323;0.293;0.607;0.603;0.55;0.387;0.337;0.837;0.447;0.257;0.51;0.497;0.417;0.403;0.233;0.74;
+// aYValuesOfSeries.size()
+49
+// sYValuesOfSeries
+0.19;0.2735;0.175;0.23;0.3035;0.22;0.34;0.235;0.215;0.1815;0.23;0.2665;0.22;0.1;0.3135;0.1535;0.135;0.25;0.33;0.2015;0.2065;0.305;0.29;0.4865;0.4515;0.285;0.2815;0.3085;0.2315;0.2685;0.2485;0.21;0.1265;0.245;0.215;0.2885;0.535;0.2915;0.2135;0.1485;0.1985;0.2515;0.3585;0.2535;0.2565;0.3715;0.3465;0.22;0.3685;
+// aYValuesOfSeries.size()
+49
+// sYValuesOfSeries
+0.0667142857142857;0.0667142857142857;0.0661428571428571;0.0524285714285714;0.0652857142857143;0.0632857142857143;0.09;0.0685714285714286;0.0542857142857143;0.0824285714285714;0.0681428571428571;0.0632857142857143;0.0671428571428571;0.0795714285714286;0.0642857142857143;0.0657142857142857;0.0404285714285714;0.0747142857142857;0.0752857142857143;0.0767142857142857;0.0485714285714286;0.0457142857142857;0.0728571428571429;0.16;0.128142857142857;0.0624285714285714;0.0961428571428572;0.091;0.0661428571428571;0.0875714285714286;0.102857142857143;0.0632857142857143;0.0357142857142857;0.071;0.0561428571428572;0.0718571428571429;0.0881428571428572;0.124285714285714;0.0547142857142857;0.0547142857142857;0.0557142857142857;0.0667142857142857;0.0532857142857143;0.0747142857142857;0.079;0.0504285714285714;0.0528571428571429;0.0704285714285714;0.0742857142857143;
+// aYValuesSourceRange
+$Table.$E$3:$E$51
+// aYValuesSourceRange
+$Table.$F$3:$F$51
+// aYValuesSourceRange
+$Table.$G$3:$G$51
+// aYValuesSourceRange
+$Table.$H$3:$H$51
+// aYValuesSourceRange
+$Table.$I$3:$I$51
+// aYValuesSourceRange
+$Table.$J$3:$J$51
+// aYValuesSourceRange
+$Table.$K$3:$K$51
+// aYValuesSourceRange
+$Table.$L$3:$L$51
diff --git a/chart2/qa/extras/chart2dump/reference/chartdatatest/simple_chart.txt b/chart2/qa/extras/chart2dump/reference/chartdatatest/simple_chart.txt
new file mode 100755
index 000000000000..34df4a47aabd
--- /dev/null
+++ b/chart2/qa/extras/chart2dump/reference/chartdatatest/simple_chart.txt
@@ -0,0 +1,50 @@
+// sChartTitle
+Éves árbevétel
+// sChartType
+com.sun.star.chart2.ColumnChartType
+// sXAxisTitle
+Negyedév
+// nXAxisNumberFormat
+0
+// nXAxisNumberType
+16
+// sYAxisTitle
+Árbevétel (Ft)
+// nYAxisNumberFormat
+151
+// nYAxisNumberType
+17
+// aColumnLabels.getLength()
+4
+// sColumnLabels
+1. negyedév;2. negyedév;3. negyedév;4. negyedév;
+// aRowLabels.getLength()
+4
+// sRowLabels
+Tintasugaras;Lézer ;Többfunkciós ;Fénykép ;
+// aDataSeriesYValues.size()
+4
+// aYValuesOfSeries.size()
+4
+// sYValuesOfSeries
+4399120;8098380;4799040;6448710;
+// aYValuesOfSeries.size()
+4
+// sYValuesOfSeries
+3149650;4499500;5399400;7919120;
+// aYValuesOfSeries.size()
+4
+// sYValuesOfSeries
+1599800;4399450;3199600;7999000;
+// aYValuesOfSeries.size()
+4
+// sYValuesOfSeries
+2504850;5009700;7514550;10019400;
+// aYValuesSourceRange
+$Mo_példa_06_a.$E$11:$H$11
+// aYValuesSourceRange
+$Mo_példa_06_a.$E$12:$H$12
+// aYValuesSourceRange
+$Mo_példa_06_a.$E$13:$H$13
+// aYValuesSourceRange
+$Mo_példa_06_a.$E$14:$H$14
diff --git a/chart2/qa/extras/chart2dump/reference/columncharttest/column_chart_small_spacing.txt b/chart2/qa/extras/chart2dump/reference/columncharttest/column_chart_small_spacing.txt
new file mode 100755
index 000000000000..4539b1c435df
--- /dev/null
+++ b/chart2/qa/extras/chart2dump/reference/columncharttest/column_chart_small_spacing.txt
@@ -0,0 +1,162 @@
+// nSeriesCount
+4
+/// Series 0 Columns
+// nColumnCountInSeries
+3
+// static_cast<sal_Int32>(aSeriesColumnFillStyle)
+1
+// static_cast<sal_Int32>(aSeriesColumnFillColor)
+16711807
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=0:Point=2
+// aColumnPosition.X
+13522
+// aColumnPosition.Y
+4147
+// aColumnSize.Height
+3202
+// aColumnSize.Width
+1169
+// aColumnTransformation
+1169;0;135220;3202;41470;0;1
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=0:Point=1
+// aColumnPosition.X
+8610
+// aColumnPosition.Y
+1946
+// aColumnSize.Height
+5403
+// aColumnSize.Width
+1170
+// aColumnTransformation
+1170;0;86100;5403;19460;0;1
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=0:Point=0
+// aColumnPosition.X
+3698
+// aColumnPosition.Y
+4414
+// aColumnSize.Height
+2935
+// aColumnSize.Width
+1170
+// aColumnTransformation
+1170;0;36980;2935;44140;0;1
+/// Series 1 Columns
+// nColumnCountInSeries
+3
+// static_cast<sal_Int32>(aSeriesColumnFillStyle)
+4
+// static_cast<sal_Int32>(aSeriesColumnFillColor)
+10079487
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=1:Point=2
+// aColumnPosition.X
+14691
+// aColumnPosition.Y
+3747
+// aColumnSize.Height
+3602
+// aColumnSize.Width
+1170
+// aColumnTransformation
+1170;0;146910;3602;37470;0;1
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=1:Point=1
+// aColumnPosition.X
+9780
+// aColumnPosition.Y
+4347
+// aColumnSize.Height
+3002
+// aColumnSize.Width
+1169
+// aColumnTransformation
+1169;0;97800;3002;43470;0;1
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=1:Point=0
+// aColumnPosition.X
+4868
+// aColumnPosition.Y
+5247
+// aColumnSize.Height
+2102
+// aColumnSize.Width
+1169
+// aColumnTransformation
+1169;0;48680;2102;52470;0;1
+/// Series 2 Columns
+// nColumnCountInSeries
+3
+// static_cast<sal_Int32>(aSeriesColumnFillStyle)
+3
+// static_cast<sal_Int32>(aSeriesColumnFillColor)
+10079487
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=2:Point=2
+// aColumnPosition.X
+15861
+// aColumnPosition.Y
+5214
+// aColumnSize.Height
+2135
+// aColumnSize.Width
+1169
+// aColumnTransformation
+1169;0;158610;2135;52140;0;1
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=2:Point=1
+// aColumnPosition.X
+10949
+// aColumnPosition.Y
+4414
+// aColumnSize.Height
+2935
+// aColumnSize.Width
+1169
+// aColumnTransformation
+1169;0;109490;2935;44140;0;1
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=2:Point=0
+// aColumnPosition.X
+6037
+// aColumnPosition.Y
+6281
+// aColumnSize.Height
+1068
+// aColumnSize.Width
+1170
+// aColumnTransformation
+1170;0;60370;1068;62810;0;1
+/// Series 3 Columns
+// nColumnCountInSeries
+3
+// static_cast<sal_Int32>(aSeriesColumnFillStyle)
+2
+// static_cast<sal_Int32>(aSeriesColumnFillColor)
+10079487
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=3:Point=2
+// aColumnPosition.X
+17030
+// aColumnPosition.Y
+2335
+// aColumnSize.Height
+5014
+// aColumnSize.Width
+1170
+// aColumnTransformation
+1170;0;170300;5014;23350;0;1
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=3:Point=1
+// aColumnPosition.X
+12118
+// aColumnPosition.Y
+4006
+// aColumnSize.Height
+3343
+// aColumnSize.Width
+1170
+// aColumnTransformation
+1170;0;121180;3343;40060;0;1
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=3:Point=0
+// aColumnPosition.X
+7207
+// aColumnPosition.Y
+5677
+// aColumnSize.Height
+1672
+// aColumnSize.Width
+1169
+// aColumnTransformation
+1169;0;72070;1672;56770;0;1
diff --git a/chart2/qa/extras/chart2dump/reference/columncharttest/normal_column_chart.txt b/chart2/qa/extras/chart2dump/reference/columncharttest/normal_column_chart.txt
new file mode 100755
index 000000000000..50c1df47d3fe
--- /dev/null
+++ b/chart2/qa/extras/chart2dump/reference/columncharttest/normal_column_chart.txt
@@ -0,0 +1,162 @@
+// nSeriesCount
+4
+/// Series 0 Columns
+// nColumnCountInSeries
+3
+// static_cast<sal_Int32>(aSeriesColumnFillStyle)
+1
+// static_cast<sal_Int32>(aSeriesColumnFillColor)
+16711807
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=0:Point=2
+// aColumnPosition.X
+14075
+// aColumnPosition.Y
+4147
+// aColumnSize.Height
+3202
+// aColumnSize.Width
+893
+// aColumnTransformation
+893;0;140750;3202;41470;0;1
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=0:Point=1
+// aColumnPosition.X
+9163
+// aColumnPosition.Y
+1946
+// aColumnSize.Height
+5403
+// aColumnSize.Width
+893
+// aColumnTransformation
+893;0;91630;5403;19460;0;1
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=0:Point=0
+// aColumnPosition.X
+4251
+// aColumnPosition.Y
+4414
+// aColumnSize.Height
+2935
+// aColumnSize.Width
+893
+// aColumnTransformation
+893;0;42510;2935;44140;0;1
+/// Series 1 Columns
+// nColumnCountInSeries
+3
+// static_cast<sal_Int32>(aSeriesColumnFillStyle)
+4
+// static_cast<sal_Int32>(aSeriesColumnFillColor)
+10079487
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=1:Point=2
+// aColumnPosition.X
+14968
+// aColumnPosition.Y
+3747
+// aColumnSize.Height
+3602
+// aColumnSize.Width
+893
+// aColumnTransformation
+893;0;149680;3602;37470;0;1
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=1:Point=1
+// aColumnPosition.X
+10056
+// aColumnPosition.Y
+4347
+// aColumnSize.Height
+3002
+// aColumnSize.Width
+893
+// aColumnTransformation
+893;0;100560;3002;43470;0;1
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=1:Point=0
+// aColumnPosition.X
+5144
+// aColumnPosition.Y
+5247
+// aColumnSize.Height
+2102
+// aColumnSize.Width
+893
+// aColumnTransformation
+893;0;51440;2102;52470;0;1
+/// Series 2 Columns
+// nColumnCountInSeries
+3
+// static_cast<sal_Int32>(aSeriesColumnFillStyle)
+4
+// static_cast<sal_Int32>(aSeriesColumnFillColor)
+10079487
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=2:Point=2
+// aColumnPosition.X
+15861
+// aColumnPosition.Y
+5214
+// aColumnSize.Height
+2135
+// aColumnSize.Width
+893
+// aColumnTransformation
+893;0;158610;2135;52140;0;1
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=2:Point=1
+// aColumnPosition.X
+10949
+// aColumnPosition.Y
+4414
+// aColumnSize.Height
+2935
+// aColumnSize.Width
+893
+// aColumnTransformation
+893;0;109490;2935;44140;0;1
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=2:Point=0
+// aColumnPosition.X
+6037
+// aColumnPosition.Y
+6281
+// aColumnSize.Height
+1068
+// aColumnSize.Width
+893
+// aColumnTransformation
+893;0;60370;1068;62810;0;1
+/// Series 3 Columns
+// nColumnCountInSeries
+3
+// static_cast<sal_Int32>(aSeriesColumnFillStyle)
+4
+// static_cast<sal_Int32>(aSeriesColumnFillColor)
+10079487
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=3:Point=2
+// aColumnPosition.X
+16754
+// aColumnPosition.Y
+2335
+// aColumnSize.Height
+5014
+// aColumnSize.Width
+893
+// aColumnTransformation
+893;0;167540;5014;23350;0;1
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=3:Point=1
+// aColumnPosition.X
+11842
+// aColumnPosition.Y
+4006
+// aColumnSize.Height
+3343
+// aColumnSize.Width
+893
+// aColumnTransformation
+893;0;118420;3343;40060;0;1
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=3:Point=0
+// aColumnPosition.X
+6930
+// aColumnPosition.Y
+5677
+// aColumnSize.Height
+1672
+// aColumnSize.Width
+893
+// aColumnTransformation
+893;0;69300;1672;56770;0;1
diff --git a/chart2/qa/extras/chart2dump/reference/columncharttest/percent_stacked_column_chart.txt b/chart2/qa/extras/chart2dump/reference/columncharttest/percent_stacked_column_chart.txt
new file mode 100755
index 000000000000..b027540e89ee
--- /dev/null
+++ b/chart2/qa/extras/chart2dump/reference/columncharttest/percent_stacked_column_chart.txt
@@ -0,0 +1,162 @@
+// nSeriesCount
+4
+/// Series 0 Columns
+// nColumnCountInSeries
+3
+// static_cast<sal_Int32>(aSeriesColumnFillStyle)
+1
+// static_cast<sal_Int32>(aSeriesColumnFillColor)
+16711807
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=0:Point=2
+// aColumnPosition.X
+14878
+// aColumnPosition.Y
+5971
+// aColumnSize.Height
+1378
+// aColumnSize.Width
+1965
+// aColumnTransformation
+1965;0;148780;1378;59710;0;1
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=0:Point=1
+// aColumnPosition.X
+9967
+// aColumnPosition.Y
+5139
+// aColumnSize.Height
+2210
+// aColumnSize.Width
+1964
+// aColumnTransformation
+1964;0;99670;2210;51390;0;1
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=0:Point=0
+// aColumnPosition.X
+5055
+// aColumnPosition.Y
+5082
+// aColumnSize.Height
+2267
+// aColumnSize.Width
+1965
+// aColumnTransformation
+1965;0;50550;2267;50820;0;1
+/// Series 1 Columns
+// nColumnCountInSeries
+3
+// static_cast<sal_Int32>(aSeriesColumnFillStyle)
+4
+// static_cast<sal_Int32>(aSeriesColumnFillColor)
+10079487
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=1:Point=2
+// aColumnPosition.X
+14878
+// aColumnPosition.Y
+4421
+// aColumnSize.Height
+1550
+// aColumnSize.Width
+1965
+// aColumnTransformation
+1965;0;148780;1550;44210;0;1
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=1:Point=1
+// aColumnPosition.X
+9967
+// aColumnPosition.Y
+3912
+// aColumnSize.Height
+1227
+// aColumnSize.Width
+1964
+// aColumnTransformation
+1964;0;99670;1227;39120;0;1
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=1:Point=0
+// aColumnPosition.X
+5055
+// aColumnPosition.Y
+3459
+// aColumnSize.Height
+1623
+// aColumnSize.Width
+1965
+// aColumnTransformation
+1965;0;50550;1623;34590;0;1
+/// Series 2 Columns
+// nColumnCountInSeries
+3
+// static_cast<sal_Int32>(aSeriesColumnFillStyle)
+3
+// static_cast<sal_Int32>(aSeriesColumnFillColor)
+10079487
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=2:Point=2
+// aColumnPosition.X
+14878
+// aColumnPosition.Y
+3502
+// aColumnSize.Height
+919
+// aColumnSize.Width
+1965
+// aColumnTransformation
+1965;0;148780;919;35020;0;1
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=2:Point=1
+// aColumnPosition.X
+9967
+// aColumnPosition.Y
+2711
+// aColumnSize.Height
+1201
+// aColumnSize.Width
+1964
+// aColumnTransformation
+1964;0;99670;1201;27110;0;1
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=2:Point=0
+// aColumnPosition.X
+5055
+// aColumnPosition.Y
+2635
+// aColumnSize.Height
+824
+// aColumnSize.Width
+1965
+// aColumnTransformation
+1965;0;50550;824;26350;0;1
+/// Series 3 Columns
+// nColumnCountInSeries
+3
+// static_cast<sal_Int32>(aSeriesColumnFillStyle)
+2
+// static_cast<sal_Int32>(aSeriesColumnFillColor)
+10079487
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=3:Point=2
+// aColumnPosition.X
+14878
+// aColumnPosition.Y
+1345
+// aColumnSize.Height
+2157
+// aColumnSize.Width
+1965
+// aColumnTransformation
+1965;0;148780;2157;13450;0;1
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=3:Point=1
+// aColumnPosition.X
+9967
+// aColumnPosition.Y
+1345
+// aColumnSize.Height
+1366
+// aColumnSize.Width
+1964
+// aColumnTransformation
+1964;0;99670;1366;13450;0;1
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=3:Point=0
+// aColumnPosition.X
+5055
+// aColumnPosition.Y
+1345
+// aColumnSize.Height
+1290
+// aColumnSize.Width
+1965
+// aColumnTransformation
+1965;0;50550;1290;13450;0;1
diff --git a/chart2/qa/extras/chart2dump/reference/columncharttest/stacked_column_chart.txt b/chart2/qa/extras/chart2dump/reference/columncharttest/stacked_column_chart.txt
new file mode 100755
index 000000000000..dd9103f8acb9
--- /dev/null
+++ b/chart2/qa/extras/chart2dump/reference/columncharttest/stacked_column_chart.txt
@@ -0,0 +1,162 @@
+// nSeriesCount
+4
+/// Series 0 Columns
+// nColumnCountInSeries
+3
+// static_cast<sal_Int32>(aSeriesColumnFillStyle)
+1
+// static_cast<sal_Int32>(aSeriesColumnFillColor)
+16711807
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=0:Point=2
+// aColumnPosition.X
+14878
+// aColumnPosition.Y
+6196
+// aColumnSize.Height
+1153
+// aColumnSize.Width
+1965
+// aColumnTransformation
+1965;0;148780;1153;61960;0;1
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=0:Point=1
+// aColumnPosition.X
+9967
+// aColumnPosition.Y
+5404
+// aColumnSize.Height
+1945
+// aColumnSize.Width
+1964
+// aColumnTransformation
+1964;0;99670;1945;54040;0;1
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=0:Point=0
+// aColumnPosition.X
+5055
+// aColumnPosition.Y
+6292
+// aColumnSize.Height
+1057
+// aColumnSize.Width
+1965
+// aColumnTransformation
+1965;0;50550;1057;62920;0;1
+/// Series 1 Columns
+// nColumnCountInSeries
+3
+// static_cast<sal_Int32>(aSeriesColumnFillStyle)
+4
+// static_cast<sal_Int32>(aSeriesColumnFillColor)
+10079487
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=1:Point=2
+// aColumnPosition.X
+14878
+// aColumnPosition.Y
+4899
+// aColumnSize.Height
+1297
+// aColumnSize.Width
+1965
+// aColumnTransformation
+1965;0;148780;1297;48990;0;1
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=1:Point=1
+// aColumnPosition.X
+9967
+// aColumnPosition.Y
+4323
+// aColumnSize.Height
+1081
+// aColumnSize.Width
+1964
+// aColumnTransformation
+1964;0;99670;1081;43230;0;1
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=1:Point=0
+// aColumnPosition.X
+5055
+// aColumnPosition.Y
+5536
+// aColumnSize.Height
+756
+// aColumnSize.Width
+1965
+// aColumnTransformation
+1965;0;50550;756;55360;0;1
+/// Series 2 Columns
+// nColumnCountInSeries
+3
+// static_cast<sal_Int32>(aSeriesColumnFillStyle)
+4
+// static_cast<sal_Int32>(aSeriesColumnFillColor)
+10079487
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=2:Point=2
+// aColumnPosition.X
+14878
+// aColumnPosition.Y
+4131
+// aColumnSize.Height
+768
+// aColumnSize.Width
+1965
+// aColumnTransformation
+1965;0;148780;768;41310;0;1
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=2:Point=1
+// aColumnPosition.X
+9967
+// aColumnPosition.Y
+3266
+// aColumnSize.Height
+1057
+// aColumnSize.Width
+1964
+// aColumnTransformation
+1964;0;99670;1057;32660;0;1
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=2:Point=0
+// aColumnPosition.X
+5055
+// aColumnPosition.Y
+5151
+// aColumnSize.Height
+385
+// aColumnSize.Width
+1965
+// aColumnTransformation
+1965;0;50550;385;51510;0;1
+/// Series 3 Columns
+// nColumnCountInSeries
+3
+// static_cast<sal_Int32>(aSeriesColumnFillStyle)
+2
+// static_cast<sal_Int32>(aSeriesColumnFillColor)
+10079487
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=3:Point=2
+// aColumnPosition.X
+14878
+// aColumnPosition.Y
+2326
+// aColumnSize.Height
+1805
+// aColumnSize.Width
+1965
+// aColumnTransformation
+1965;0;148780;1805;23260;0;1
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=3:Point=1
+// aColumnPosition.X
+9967
+// aColumnPosition.Y
+2063
+// aColumnSize.Height
+1203
+// aColumnSize.Width
+1964
+// aColumnTransformation
+1964;0;99670;1203;20630;0;1
+/// CID/MultiClick/D=0:CS=0:CT=0:Series=3:Point=0
+// aColumnPosition.X
+5055
+// aColumnPosition.Y
+4550
+// aColumnSize.Height
+601
+// aColumnSize.Width
+1965
+// aColumnTransformation
+1965;0;50550;601;45500;0;1
diff --git a/chart2/qa/extras/chart2dump/reference/gridtest/formated_grid_line.txt b/chart2/qa/extras/chart2dump/reference/gridtest/formated_grid_line.txt
new file mode 100755
index 000000000000..12fe524e97b1
--- /dev/null
+++ b/chart2/qa/extras/chart2dump/reference/gridtest/formated_grid_line.txt
@@ -0,0 +1,17 @@
+/// CID/D=0:CS=0:Axis=0,0:Grid=0
+// aGridPosition.X
+3529
+// aGridPosition.Y
+1344
+// aGridSize.Height
+6005
+// aGridSize.Width
+14515
+// sGridTransformation
+14516;0;35290;6006;13440;0;1
+// sGridLineDash
+2;1;1970;0;127
+// static_cast<sal_Int32>(aLineColor)
+65280
+// nLineWidth
+100
diff --git a/chart2/qa/extras/chart2dump/reference/gridtest/horizontal_grid.txt b/chart2/qa/extras/chart2dump/reference/gridtest/horizontal_grid.txt
new file mode 100755
index 000000000000..502c08f5c387
--- /dev/null
+++ b/chart2/qa/extras/chart2dump/reference/gridtest/horizontal_grid.txt
@@ -0,0 +1,17 @@
+/// CID/D=0:CS=0:Axis=1,0:Grid=0
+// aGridPosition.X
+3529
+// aGridPosition.Y
+1344
+// aGridSize.Height
+6005
+// aGridSize.Width
+14515
+// sGridTransformation
+14516;0;35290;6006;13440;0;1
+// sGridLineDash
+0;1;201;20;20
+// static_cast<sal_Int32>(aLineColor)
+0
+// nLineWidth
+0
diff --git a/chart2/qa/extras/chart2dump/reference/gridtest/minor_grid.txt b/chart2/qa/extras/chart2dump/reference/gridtest/minor_grid.txt
new file mode 100755
index 000000000000..57a6283365f8
--- /dev/null
+++ b/chart2/qa/extras/chart2dump/reference/gridtest/minor_grid.txt
@@ -0,0 +1,68 @@
+/// CID/D=0:CS=0:Axis=1,0:Grid=0
+// aGridPosition.X
+3529
+// aGridPosition.Y
+1344
+// aGridSize.Height
+6005
+// aGridSize.Width
+14515
+// sGridTransformation
+14516;0;35290;6006;13440;0;1
+// sGridLineDash
+0;1;201;20;20
+// static_cast<sal_Int32>(aLineColor)
+0
+// nLineWidth
+0
+/// CID/D=0:CS=0:Axis=0,0:Grid=0
+// aGridPosition.X
+3529
+// aGridPosition.Y
+1344
+// aGridSize.Height
+6005
+// aGridSize.Width
+14515
+// sGridTransformation
+14516;0;35290;6006;13440;0;1
+// sGridLineDash
+0;1;201;20;20
+// static_cast<sal_Int32>(aLineColor)
+11776947
+// nLineWidth
+0
+/// CID/D=0:CS=0:Axis=1,0:Grid=0:SubGrid=0
+// aGridPosition.X
+3529
+// aGridPosition.Y
+1773
+// aGridSize.Height
+5147
+// aGridSize.Width
+14515
+// sGridTransformation
+14516;0;35290;5148;17730;0;1
+// sGridLineDash
+0;1;201;20;20
+// static_cast<sal_Int32>(aLineColor)
+14540253
+// nLineWidth
+0
+/// CID/D=0:CS=0:Axis=0,0:Grid=0:SubGrid=0
+// aGridPosition.X
+5343
+// aGridPosition.Y
+1344
+// aGridSize.Height
+6005
+// aGridSize.Width
+10886
+// sGridTransformation
+10887;0;53430;6006;13440;0;1
+// sGridLineDash
+0;1;201;20;20
+// static_cast<sal_Int32>(aLineColor)
+14540253
+// nLineWidth
+0
diff --git a/chart2/qa/extras/chart2dump/reference/gridtest/vertical_grid.txt b/chart2/qa/extras/chart2dump/reference/gridtest/vertical_grid.txt
new file mode 100755
index 000000000000..9ed96881df65
--- /dev/null
+++ b/chart2/qa/extras/chart2dump/reference/gridtest/vertical_grid.txt
@@ -0,0 +1,17 @@
+/// CID/D=0:CS=0:Axis=0,0:Grid=0
+// aGridPosition.X
+3528
+// aGridPosition.Y
+1343
+// aGridSize.Height
+6120
+// aGridSize.Width
+14723
+// sGridTransformation
+14724;0;35280;6121;13430;0;1
+// sGridLineDash
+0;1;201;20;20
+// static_cast<sal_Int32>(aLineColor)
+11776947
+// nLineWidth
+0
diff --git a/chart2/qa/extras/chart2dump/reference/legendtest/custom_legend_position.txt b/chart2/qa/extras/chart2dump/reference/legendtest/custom_legend_position.txt
new file mode 100755
index 000000000000..c64d61405128
--- /dev/null
+++ b/chart2/qa/extras/chart2dump/reference/legendtest/custom_legend_position.txt
@@ -0,0 +1,98 @@
+// aLegendPosition.X
+1398
+// aLegendPosition.Y
+396
+// aLegendSize.Width
+2144
+// aLegendSize.Height
+2044
+// nLegendEntryCount
+4
+// aLegendEntryPosition.X
+1781
+// aLegendEntryPosition.Y
+595
+// aLegendEntrySize.Height
+211
+// aLegendEntrySize.Width
+800
+// sLegendEntryTransformation
+801;0;17810;212;5950;0;1
+// xLegendEntryContainer->getCount()
+3
+// sEntryGeomShapeType
+com.sun.star.drawing.LineShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+7512015
+// sEntryGeomShapeType
+com.sun.star.drawing.PolyPolygonShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+43091
+// aLegendEntryPosition.X
+1781
+// aLegendEntryPosition.Y
+1072
+// aLegendEntrySize.Height
+211
+// aLegendEntrySize.Width
+800
+// sLegendEntryTransformation
+801;0;17810;212;10720;0;1
+// xLegendEntryContainer->getCount()
+3
+// sEntryGeomShapeType
+com.sun.star.drawing.LineShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+7512015
+// sEntryGeomShapeType
+com.sun.star.drawing.PolyPolygonShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+8388352
+// aLegendEntryPosition.X
+1781
+// aLegendEntryPosition.Y
+1549
+// aLegendEntrySize.Height
+211
+// aLegendEntrySize.Width
+800
+// sLegendEntryTransformation
+801;0;17810;212;15490;0;1
+// xLegendEntryContainer->getCount()
+3
+// sEntryGeomShapeType
+com.sun.star.drawing.LineShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+7512015
+// sEntryGeomShapeType
+com.sun.star.drawing.PolyPolygonShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+16765728
+// aLegendEntryPosition.X
+1781
+// aLegendEntryPosition.Y
+2026
+// aLegendEntrySize.Height
+211
+// aLegendEntrySize.Width
+800
+// sLegendEntryTransformation
+801;0;17810;212;20260;0;1
+// xLegendEntryContainer->getCount()
+3
+// sEntryGeomShapeType
+com.sun.star.drawing.LineShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+7512015
+// sEntryGeomShapeType
+com.sun.star.drawing.PolyPolygonShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+16711807
+// xLegendEntryText->getString()
+A
+// xLegendEntryText->getString()
+B
+// xLegendEntryText->getString()
+C
+// xLegendEntryText->getString()
+DD
diff --git a/chart2/qa/extras/chart2dump/reference/legendtest/legend_on_bottom.txt b/chart2/qa/extras/chart2dump/reference/legendtest/legend_on_bottom.txt
new file mode 100755
index 000000000000..408131a1fe74
--- /dev/null
+++ b/chart2/qa/extras/chart2dump/reference/legendtest/legend_on_bottom.txt
@@ -0,0 +1,98 @@
+// aLegendPosition.X
+4780
+// aLegendPosition.Y
+8270
+// aLegendSize.Width
+6440
+// aLegendSize.Height
+545
+// nLegendEntryCount
+4
+// aLegendEntryPosition.X
+10304
+// aLegendEntryPosition.Y
+8437
+// aLegendEntrySize.Height
+211
+// aLegendEntrySize.Width
+800
+// sLegendEntryTransformation
+801;0;103040;212;84370;0;1
+// xLegendEntryContainer->getCount()
+3
+// sEntryGeomShapeType
+com.sun.star.drawing.LineShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+7512015
+// sEntryGeomShapeType
+com.sun.star.drawing.PolyPolygonShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+43091
+// aLegendEntryPosition.X
+8694
+// aLegendEntryPosition.Y
+8437
+// aLegendEntrySize.Height
+211
+// aLegendEntrySize.Width
+800
+// sLegendEntryTransformation
+801;0;86940;212;84370;0;1
+// xLegendEntryContainer->getCount()
+3
+// sEntryGeomShapeType
+com.sun.star.drawing.LineShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+7512015
+// sEntryGeomShapeType
+com.sun.star.drawing.PolyPolygonShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+8388352
+// aLegendEntryPosition.X
+7084
+// aLegendEntryPosition.Y
+8437
+// aLegendEntrySize.Height
+211
+// aLegendEntrySize.Width
+800
+// sLegendEntryTransformation
+801;0;70840;212;84370;0;1
+// xLegendEntryContainer->getCount()
+3
+// sEntryGeomShapeType
+com.sun.star.drawing.LineShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+7512015
+// sEntryGeomShapeType
+com.sun.star.drawing.PolyPolygonShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+16765728
+// aLegendEntryPosition.X
+5474
+// aLegendEntryPosition.Y
+8437
+// aLegendEntrySize.Height
+211
+// aLegendEntrySize.Width
+800
+// sLegendEntryTransformation
+801;0;54740;212;84370;0;1
+// xLegendEntryContainer->getCount()
+3
+// sEntryGeomShapeType
+com.sun.star.drawing.LineShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+7512015
+// sEntryGeomShapeType
+com.sun.star.drawing.PolyPolygonShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+16711807
+// xLegendEntryText->getString()
+AA
+// xLegendEntryText->getString()
+BB
+// xLegendEntryText->getString()
+CC
+// xLegendEntryText->getString()
+DD
diff --git a/chart2/qa/extras/chart2dump/reference/legendtest/legend_on_left_side.txt b/chart2/qa/extras/chart2dump/reference/legendtest/legend_on_left_side.txt
new file mode 100755
index 000000000000..9206644df39f
--- /dev/null
+++ b/chart2/qa/extras/chart2dump/reference/legendtest/legend_on_left_side.txt
@@ -0,0 +1,98 @@
+// aLegendPosition.X
+210
+// aLegendPosition.Y
+3560
+// aLegendSize.Width
+1610
+// aLegendSize.Height
+1880
+// nLegendEntryCount
+4
+// aLegendEntryPosition.X
+326
+// aLegendEntryPosition.Y
+3727
+// aLegendEntrySize.Height
+211
+// aLegendEntrySize.Width
+800
+// sLegendEntryTransformation
+801;0;3260;212;37270;0;1
+// xLegendEntryContainer->getCount()
+3
+// sEntryGeomShapeType
+com.sun.star.drawing.LineShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+7512015
+// sEntryGeomShapeType
+com.sun.star.drawing.PolyPolygonShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+17798
+// aLegendEntryPosition.X
+326
+// aLegendEntryPosition.Y
+4172
+// aLegendEntrySize.Height
+211
+// aLegendEntrySize.Width
+800
+// sLegendEntryTransformation
+801;0;3260;212;41720;0;1
+// xLegendEntryContainer->getCount()
+3
+// sEntryGeomShapeType
+com.sun.star.drawing.LineShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+7512015
+// sEntryGeomShapeType
+com.sun.star.drawing.PolyPolygonShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+8388352
+// aLegendEntryPosition.X
+326
+// aLegendEntryPosition.Y
+4617
+// aLegendEntrySize.Height
+211
+// aLegendEntrySize.Width
+800
+// sLegendEntryTransformation
+801;0;3260;212;46170;0;1
+// xLegendEntryContainer->getCount()
+3
+// sEntryGeomShapeType
+com.sun.star.drawing.LineShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+7512015
+// sEntryGeomShapeType
+com.sun.star.drawing.PolyPolygonShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+16765728
+// aLegendEntryPosition.X
+326
+// aLegendEntryPosition.Y
+5062
+// aLegendEntrySize.Height
+211
+// aLegendEntrySize.Width
+800
+// sLegendEntryTransformation
+801;0;3260;212;50620;0;1
+// xLegendEntryContainer->getCount()
+3
+// sEntryGeomShapeType
+com.sun.star.drawing.LineShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+7512015
+// sEntryGeomShapeType
+com.sun.star.drawing.PolyPolygonShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+32767
+// xLegendEntryText->getString()
+AA
+// xLegendEntryText->getString()
+BB
+// xLegendEntryText->getString()
+CC
+// xLegendEntryText->getString()
+DD
diff --git a/chart2/qa/extras/chart2dump/reference/legendtest/legend_on_right_side.txt b/chart2/qa/extras/chart2dump/reference/legendtest/legend_on_right_side.txt
new file mode 100755
index 000000000000..94fc41730095
--- /dev/null
+++ b/chart2/qa/extras/chart2dump/reference/legendtest/legend_on_right_side.txt
@@ -0,0 +1,46 @@
+// aLegendPosition.X
+14671
+// aLegendPosition.Y
+4000
+// aLegendSize.Width
+1127
+// aLegendSize.Height
+990
+// nLegendEntryCount
+2
+// aLegendEntryPosition.X
+14787
+// aLegendEntryPosition.Y
+4167
+// aLegendEntrySize.Height
+211
+// aLegendEntrySize.Width
+211
+// sLegendEntryTransformation
+212;0;147870;212;41670;0;1
+// xLegendEntryContainer->getCount()
+2
+// sEntryGeomShapeType
+com.sun.star.drawing.RectangleShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+17798
+// aLegendEntryPosition.X
+14787
+// aLegendEntryPosition.Y
+4612
+// aLegendEntrySize.Height
+211
+// aLegendEntrySize.Width
+211
+// sLegendEntryTransformation
+212;0;147870;212;46120;0;1
+// xLegendEntryContainer->getCount()
+2
+// sEntryGeomShapeType
+com.sun.star.drawing.RectangleShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+16728590
+// xLegendEntryText->getString()
+A
+// xLegendEntryText->getString()
+C-B
diff --git a/chart2/qa/extras/chart2dump/reference/legendtest/legend_on_top.txt b/chart2/qa/extras/chart2dump/reference/legendtest/legend_on_top.txt
new file mode 100755
index 000000000000..60c4472d7021
--- /dev/null
+++ b/chart2/qa/extras/chart2dump/reference/legendtest/legend_on_top.txt
@@ -0,0 +1,98 @@
+// aLegendPosition.X
+4780
+// aLegendPosition.Y
+185
+// aLegendSize.Width
+6440
+// aLegendSize.Height
+545
+// nLegendEntryCount
+4
+// aLegendEntryPosition.X
+4896
+// aLegendEntryPosition.Y
+352
+// aLegendEntrySize.Height
+211
+// aLegendEntrySize.Width
+800
+// sLegendEntryTransformation
+801;0;48960;212;3520;0;1
+// xLegendEntryContainer->getCount()
+3
+// sEntryGeomShapeType
+com.sun.star.drawing.LineShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+7512015
+// sEntryGeomShapeType
+com.sun.star.drawing.PolyPolygonShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+43091
+// aLegendEntryPosition.X
+6506
+// aLegendEntryPosition.Y
+352
+// aLegendEntrySize.Height
+211
+// aLegendEntrySize.Width
+800
+// sLegendEntryTransformation
+801;0;65060;212;3520;0;1
+// xLegendEntryContainer->getCount()
+3
+// sEntryGeomShapeType
+com.sun.star.drawing.LineShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+7512015
+// sEntryGeomShapeType
+com.sun.star.drawing.PolyPolygonShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+8388352
+// aLegendEntryPosition.X
+8116
+// aLegendEntryPosition.Y
+352
+// aLegendEntrySize.Height
+211
+// aLegendEntrySize.Width
+800
+// sLegendEntryTransformation
+801;0;81160;212;3520;0;1
+// xLegendEntryContainer->getCount()
+3
+// sEntryGeomShapeType
+com.sun.star.drawing.LineShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+7512015
+// sEntryGeomShapeType
+com.sun.star.drawing.PolyPolygonShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+16765728
+// aLegendEntryPosition.X
+9726
+// aLegendEntryPosition.Y
+352
+// aLegendEntrySize.Height
+211
+// aLegendEntrySize.Width
+800
+// sLegendEntryTransformation
+801;0;97260;212;3520;0;1
+// xLegendEntryContainer->getCount()
+3
+// sEntryGeomShapeType
+com.sun.star.drawing.LineShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+7512015
+// sEntryGeomShapeType
+com.sun.star.drawing.PolyPolygonShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+16711807
+// xLegendEntryText->getString()
+AA
+// xLegendEntryText->getString()
+BB
+// xLegendEntryText->getString()
+CC
+// xLegendEntryText->getString()
+DD
diff --git a/chart2/qa/extras/chart2dump/reference/legendtest/many_legend_entries.txt b/chart2/qa/extras/chart2dump/reference/legendtest/many_legend_entries.txt
new file mode 100755
index 000000000000..c1d05a9be44f
--- /dev/null
+++ b/chart2/qa/extras/chart2dump/reference/legendtest/many_legend_entries.txt
@@ -0,0 +1,340 @@
+// aLegendPosition.X
+1474
+// aLegendPosition.Y
+185
+// aLegendSize.Width
+13039
+// aLegendSize.Height
+990
+// nLegendEntryCount
+15
+// aLegendEntryPosition.X
+1590
+// aLegendEntryPosition.Y
+352
+// aLegendEntrySize.Height
+211
+// aLegendEntrySize.Width
+800
+// sLegendEntryTransformation
+801;0;15900;212;3520;0;1
+// xLegendEntryContainer->getCount()
+3
+// sEntryGeomShapeType
+com.sun.star.drawing.LineShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+7512015
+// sEntryGeomShapeType
+com.sun.star.drawing.PolyPolygonShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+43091
+// aLegendEntryPosition.X
+3200
+// aLegendEntryPosition.Y
+352
+// aLegendEntrySize.Height
+211
+// aLegendEntrySize.Width
+800
+// sLegendEntryTransformation
+801;0;32000;212;3520;0;1
+// xLegendEntryContainer->getCount()
+3
+// sEntryGeomShapeType
+com.sun.star.drawing.LineShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+7512015
+// sEntryGeomShapeType
+com.sun.star.drawing.PolyPolygonShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+8388352
+// aLegendEntryPosition.X
+4810
+// aLegendEntryPosition.Y
+352
+// aLegendEntrySize.Height
+211
+// aLegendEntrySize.Width
+800
+// sLegendEntryTransformation
+801;0;48100;212;3520;0;1
+// xLegendEntryContainer->getCount()
+3
+// sEntryGeomShapeType
+com.sun.star.drawing.LineShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+7512015
+// sEntryGeomShapeType
+com.sun.star.drawing.PolyPolygonShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+16765728
+// aLegendEntryPosition.X
+6420
+// aLegendEntryPosition.Y
+352
+// aLegendEntrySize.Height
+211
+// aLegendEntrySize.Width
+800
+// sLegendEntryTransformation
+801;0;64200;212;3520;0;1
+// xLegendEntryContainer->getCount()
+3
+// sEntryGeomShapeType
+com.sun.star.drawing.LineShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+7512015
+// sEntryGeomShapeType
+com.sun.star.drawing.PolyPolygonShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+16711807
+// aLegendEntryPosition.X
+8030
+// aLegendEntryPosition.Y
+352
+// aLegendEntrySize.Height
+211
+// aLegendEntrySize.Width
+800
+// sLegendEntryTransformation
+801;0;80300;212;3520;0;1
+// xLegendEntryContainer->getCount()
+3
+// sEntryGeomShapeType
+com.sun.star.drawing.LineShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+7512015
+// sEntryGeomShapeType
+com.sun.star.drawing.PolyPolygonShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+8257569
+// aLegendEntryPosition.X
+9746
+// aLegendEntryPosition.Y
+352
+// aLegendEntrySize.Height
+211
+// aLegendEntrySize.Width
+800
+// sLegendEntryTransformation
+801;0;97460;212;3520;0;1
+// xLegendEntryContainer->getCount()
+3
+// sEntryGeomShapeType
+com.sun.star.drawing.LineShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+7512015
+// sEntryGeomShapeType
+com.sun.star.drawing.PolyPolygonShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+8637183
+// aLegendEntryPosition.X
+11356
+// aLegendEntryPosition.Y
+352
+// aLegendEntrySize.Height
+211
+// aLegendEntrySize.Width
+800
+// sLegendEntryTransformation
+801;0;113560;212;3520;0;1
+// xLegendEntryContainer->getCount()
+3
+// sEntryGeomShapeType
+com.sun.star.drawing.LineShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+7512015
+// sEntryGeomShapeType
+com.sun.star.drawing.PolyPolygonShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+3227652
+// aLegendEntryPosition.X
+13019
+// aLegendEntryPosition.Y
+352
+// aLegendEntrySize.Height
+211
+// aLegendEntrySize.Width
+800
+// sLegendEntryTransformation
+801;0;130190;212;3520;0;1
+// xLegendEntryContainer->getCount()
+3
+// sEntryGeomShapeType
+com.sun.star.drawing.LineShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+7512015
+// sEntryGeomShapeType
+com.sun.star.drawing.PolyPolygonShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+11456256
+// aLegendEntryPosition.X
+1590
+// aLegendEntryPosition.Y
+797
+// aLegendEntrySize.Height
+211
+// aLegendEntrySize.Width
+800
+// sLegendEntryTransformation
+801;0;15900;212;7970;0;1
+// xLegendEntryContainer->getCount()
+3
+// sEntryGeomShapeType
+com.sun.star.drawing.LineShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+7512015
+// sEntryGeomShapeType
+com.sun.star.drawing.PolyPolygonShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+4923247
+// aLegendEntryPosition.X
+3200
+// aLegendEntryPosition.Y
+797
+// aLegendEntrySize.Height
+211
+// aLegendEntrySize.Width
+800
+// sLegendEntryTransformation
+801;0;32000;212;7970;0;1
+// xLegendEntryContainer->getCount()
+3
+// sEntryGeomShapeType
+com.sun.star.drawing.LineShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+7512015
+// sEntryGeomShapeType
+com.sun.star.drawing.PolyPolygonShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+16749838
+// aLegendEntryPosition.X
+4810
+// aLegendEntryPosition.Y
+797
+// aLegendEntrySize.Height
+211
+// aLegendEntrySize.Width
+800
+// sLegendEntryTransformation
+801;0;48100;212;7970;0;1
+// xLegendEntryContainer->getCount()
+3
+// sEntryGeomShapeType
+com.sun.star.drawing.LineShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+7512015
+// sEntryGeomShapeType
+com.sun.star.drawing.PolyPolygonShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+12910603
+// aLegendEntryPosition.X
+6420
+// aLegendEntryPosition.Y
+797
+// aLegendEntrySize.Height
+211
+// aLegendEntrySize.Width
+800
+// sLegendEntryTransformation
+801;0;64200;212;7970;0;1
+// xLegendEntryContainer->getCount()
+3
+// sEntryGeomShapeType
+com.sun.star.drawing.LineShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+7512015
+// sEntryGeomShapeType
+com.sun.star.drawing.PolyPolygonShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+34001
+// aLegendEntryPosition.X
+8030
+// aLegendEntryPosition.Y
+797
+// aLegendEntrySize.Height
+211
+// aLegendEntrySize.Width
+800
+// sLegendEntryTransformation
+801;0;80300;212;7970;0;1
+// xLegendEntryContainer->getCount()
+3
+// sEntryGeomShapeType
+com.sun.star.drawing.LineShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+7512015
+// sEntryGeomShapeType
+com.sun.star.drawing.PolyPolygonShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+17798
+// aLegendEntryPosition.X
+9746
+// aLegendEntryPosition.Y
+797
+// aLegendEntrySize.Height
+211
+// aLegendEntrySize.Width
+800
+// sLegendEntryTransformation
+801;0;97460;212;7970;0;1
+// xLegendEntryContainer->getCount()
+3
+// sEntryGeomShapeType
+com.sun.star.drawing.LineShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+7512015
+// sEntryGeomShapeType
+com.sun.star.drawing.PolyPolygonShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+16728590
+// aLegendEntryPosition.X
+11356
+// aLegendEntryPosition.Y
+797
+// aLegendEntrySize.Height
+211
+// aLegendEntrySize.Width
+800
+// sLegendEntryTransformation
+801;0;113560;212;7970;0;1
+// xLegendEntryContainer->getCount()
+3
+// sEntryGeomShapeType
+com.sun.star.drawing.LineShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+7512015
+// sEntryGeomShapeType
+com.sun.star.drawing.PolyPolygonShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+16765728
+// xLegendEntryText->getString()
+AA
+// xLegendEntryText->getString()
+BB
+// xLegendEntryText->getString()
+CC
+// xLegendEntryText->getString()
+DD
+// xLegendEntryText->getString()
+EE
+// xLegendEntryText->getString()
+FF
+// xLegendEntryText->getString()
+GG
+// xLegendEntryText->getString()
+HH
+// xLegendEntryText->getString()
+II
+// xLegendEntryText->getString()
+JJ
+// xLegendEntryText->getString()
+KK
+// xLegendEntryText->getString()
+LL
+// xLegendEntryText->getString()
+MM
+// xLegendEntryText->getString()
+NN
+// xLegendEntryText->getString()
+OO
diff --git a/chart2/qa/extras/chart2dump/reference/legendtest/multiple_categories.txt b/chart2/qa/extras/chart2dump/reference/legendtest/multiple_categories.txt
new file mode 100755
index 000000000000..6db03f534d40
--- /dev/null
+++ b/chart2/qa/extras/chart2dump/reference/legendtest/multiple_categories.txt
@@ -0,0 +1,154 @@
+// aLegendPosition.X
+2397
+// aLegendPosition.Y
+6498
+// aLegendSize.Width
+8041
+// aLegendSize.Height
+938
+// nLegendEntryCount
+8
+// aLegendEntryPosition.X
+2501
+// aLegendEntryPosition.Y
+6662
+// aLegendEntrySize.Height
+190
+// aLegendEntrySize.Width
+800
+// sLegendEntryTransformation
+801;0;25010;191;66620;0;1
+// xLegendEntryContainer->getCount()
+2
+// sEntryGeomShapeType
+com.sun.star.drawing.LineShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+7512015
+// aLegendEntryPosition.X
+4273
+// aLegendEntryPosition.Y
+6662
+// aLegendEntrySize.Height
+190
+// aLegendEntrySize.Width
+800
+// sLegendEntryTransformation
+801;0;42730;191;66620;0;1
+// xLegendEntryContainer->getCount()
+2
+// sEntryGeomShapeType
+com.sun.star.drawing.LineShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+7512015
+// aLegendEntryPosition.X
+6363
+// aLegendEntryPosition.Y
+6662
+// aLegendEntrySize.Height
+190
+// aLegendEntrySize.Width
+800
+// sLegendEntryTransformation
+801;0;63630;191;66620;0;1
+// xLegendEntryContainer->getCount()
+2
+// sEntryGeomShapeType
+com.sun.star.drawing.LineShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+7512015
+// aLegendEntryPosition.X
+8453
+// aLegendEntryPosition.Y
+6662
+// aLegendEntrySize.Height
+190
+// aLegendEntrySize.Width
+800
+// sLegendEntryTransformation
+801;0;84530;191;66620;0;1
+// xLegendEntryContainer->getCount()
+2
+// sEntryGeomShapeType
+com.sun.star.drawing.LineShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+7512015
+// aLegendEntryPosition.X
+2501
+// aLegendEntryPosition.Y
+7081
+// aLegendEntrySize.Height
+190
+// aLegendEntrySize.Width
+800
+// sLegendEntryTransformation
+801;0;25010;191;70810;0;1
+// xLegendEntryContainer->getCount()
+2
+// sEntryGeomShapeType
+com.sun.star.drawing.LineShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+7512015
+// aLegendEntryPosition.X
+4273
+// aLegendEntryPosition.Y
+7081
+// aLegendEntrySize.Height
+190
+// aLegendEntrySize.Width
+800
+// sLegendEntryTransformation
+801;0;42730;191;70810;0;1
+// xLegendEntryContainer->getCount()
+2
+// sEntryGeomShapeType
+com.sun.star.drawing.LineShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+7512015
+// aLegendEntryPosition.X
+6363
+// aLegendEntryPosition.Y
+7081
+// aLegendEntrySize.Height
+190
+// aLegendEntrySize.Width
+800
+// sLegendEntryTransformation
+801;0;63630;191;70810;0;1
+// xLegendEntryContainer->getCount()
+2
+// sEntryGeomShapeType
+com.sun.star.drawing.LineShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+7512015
+// aLegendEntryPosition.X
+8453
+// aLegendEntryPosition.Y
+7081
+// aLegendEntrySize.Height
+190
+// aLegendEntrySize.Width
+800
+// sLegendEntryTransformation
+801;0;84530;191;70810;0;1
+// xLegendEntryContainer->getCount()
+2
+// sEntryGeomShapeType
+com.sun.star.drawing.LineShape
+// static_cast<sal_Int32>(aEntryGeomColor)
+7512015
+// xLegendEntryText->getString()
+A In0
+// xLegendEntryText->getString()
+A In100
+// xLegendEntryText->getString()
+A In200
+// xLegendEntryText->getString()
+A In400
+// xLegendEntryText->getString()
+B In0
+// xLegendEntryText->getString()
+B In100
+// xLegendEntryText->getString()
+B In200
+// xLegendEntryText->getString()
+B In400
diff --git a/chart2/qa/extras/charttest.hxx b/chart2/qa/extras/charttest.hxx
index 17ab82d1c718..1d2f4afe9150 100644
--- a/chart2/qa/extras/charttest.hxx
+++ b/chart2/qa/extras/charttest.hxx
@@ -113,7 +113,8 @@ void ChartTest::load( const OUString& aDir, const OUString& aName )
{
maServiceName = "com.sun.star.drawing.DrawingDocument";
}
-
+ if (mxComponent.is())
+ mxComponent->dispose();
mxComponent = loadFromDesktop(m_directories.getURLFromSrc(aDir) + aName, maServiceName);
CPPUNIT_ASSERT(mxComponent.is());
}
@@ -317,7 +318,6 @@ Reference< chart2::data::XDataSequence > getDataSequenceFromDocByRole(
return xLabelSeq;
}
- CPPUNIT_FAIL("no Label sequence found");
return Reference< chart2::data::XDataSequence > ();
}