chart2/CppunitTest_chart2_dump.mk                                              
        |  128 +
 chart2/Module_chart2.mk                                                        
        |    1 
 chart2/qa/extras/chart2dump/chart2dump.cxx                                     
        |  748 ++++++++++
 chart2/qa/extras/chart2dump/data/axis_special_positioning.ods                  
        |binary
 chart2/qa/extras/chart2dump/data/column_chart_small_spacing.ods                
        |binary
 chart2/qa/extras/chart2dump/data/custom_legend_position.ods                    
        |binary
 chart2/qa/extras/chart2dump/data/default_formated_axis.ods                     
        |binary
 chart2/qa/extras/chart2dump/data/formated_axis_labels.ods                      
        |binary
 chart2/qa/extras/chart2dump/data/formated_axis_lines.ods                       
        |binary
 chart2/qa/extras/chart2dump/data/formated_grid_line.ods                        
        |binary
 chart2/qa/extras/chart2dump/data/horizontal_grid.ods                           
        |binary
 chart2/qa/extras/chart2dump/data/legend_on_bottom.ods                          
        |binary
 chart2/qa/extras/chart2dump/data/legend_on_left_side.ods                       
        |binary
 chart2/qa/extras/chart2dump/data/legend_on_right_side.ods                      
        |binary
 chart2/qa/extras/chart2dump/data/legend_on_top.ods                             
        |binary
 chart2/qa/extras/chart2dump/data/many_legend_entries.ods                       
        |binary
 chart2/qa/extras/chart2dump/data/minor_grid.ods                                
        |binary
 chart2/qa/extras/chart2dump/data/multiple_categories.ods                       
        |binary
 chart2/qa/extras/chart2dump/data/normal_column_chart.ods                       
        |binary
 chart2/qa/extras/chart2dump/data/percent_stacked_column_chart.ods              
        |binary
 chart2/qa/extras/chart2dump/data/rotated_axis_labels.ods                       
        |binary
 chart2/qa/extras/chart2dump/data/simple_chart.ods                              
        |binary
 chart2/qa/extras/chart2dump/data/stacked_column_chart.ods                      
        |binary
 chart2/qa/extras/chart2dump/data/vertical_grid.ods                             
        |binary
 
chart2/qa/extras/chart2dump/reference/axisgeometrytest/axis_special_positioning.txt
    |   38 
 
chart2/qa/extras/chart2dump/reference/axisgeometrytest/default_formated_axis.txt
       |   38 
 chart2/qa/extras/chart2dump/reference/axisgeometrytest/formated_axis_lines.txt 
        |   38 
 chart2/qa/extras/chart2dump/reference/axisgeometrytest/rotated_axis_labels.txt 
        |   38 
 chart2/qa/extras/chart2dump/reference/axislabeltest/default_formated_axis.txt  
        |  198 ++
 chart2/qa/extras/chart2dump/reference/axislabeltest/formated_axis_labels.txt   
        |  198 ++
 chart2/qa/extras/chart2dump/reference/axislabeltest/rotated_axis_labels.txt    
        |  150 ++
 chart2/qa/extras/chart2dump/reference/chartdatatest/multiple_categories.txt    
        |   70 
 chart2/qa/extras/chart2dump/reference/chartdatatest/simple_chart.txt           
        |   50 
 
chart2/qa/extras/chart2dump/reference/columncharttest/column_chart_small_spacing.txt
   |  162 ++
 chart2/qa/extras/chart2dump/reference/columncharttest/normal_column_chart.txt  
        |  162 ++
 
chart2/qa/extras/chart2dump/reference/columncharttest/percent_stacked_column_chart.txt
 |  162 ++
 chart2/qa/extras/chart2dump/reference/columncharttest/stacked_column_chart.txt 
        |  162 ++
 chart2/qa/extras/chart2dump/reference/gridtest/formated_grid_line.txt          
        |   17 
 chart2/qa/extras/chart2dump/reference/gridtest/horizontal_grid.txt             
        |   17 
 chart2/qa/extras/chart2dump/reference/gridtest/minor_grid.txt                  
        |   68 
 chart2/qa/extras/chart2dump/reference/gridtest/vertical_grid.txt               
        |   17 
 chart2/qa/extras/chart2dump/reference/legendtest/custom_legend_position.txt    
        |   98 +
 chart2/qa/extras/chart2dump/reference/legendtest/legend_on_bottom.txt          
        |   98 +
 chart2/qa/extras/chart2dump/reference/legendtest/legend_on_left_side.txt       
        |   98 +
 chart2/qa/extras/chart2dump/reference/legendtest/legend_on_right_side.txt      
        |   46 
 chart2/qa/extras/chart2dump/reference/legendtest/legend_on_top.txt             
        |   98 +
 chart2/qa/extras/chart2dump/reference/legendtest/many_legend_entries.txt       
        |  340 ++++
 chart2/qa/extras/chart2dump/reference/legendtest/multiple_categories.txt       
        |  154 ++
 chart2/qa/extras/charttest.hxx                                                 
        |    4 
 include/unotest/directories.hxx                                                
        |    1 
 unotest/source/cpp/directories.cxx                                             
        |    5 
 51 files changed, 3402 insertions(+), 2 deletions(-)

New commits:
commit 49d7bdea17f6468b0c5c9f425f4432e2ad7e1ace
Author: Tamás Zolnai <tamas.zol...@collabora.com>
Date:   Sun Feb 12 16:04:58 2017 +0100

    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.zol...@collabora.com>
    Tested-by: Tamás Zolnai <tamas.zol...@collabora.com>

diff --git a/chart2/CppunitTest_chart2_dump.mk 
b/chart2/CppunitTest_chart2_dump.mk
new file mode 100755
index 0000000..d181f16
--- /dev/null
+++ b/chart2/CppunitTest_chart2_dump.mk
@@ -0,0 +1,128 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#*************************************************************************
+#
+# 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/.
+#
+#*************************************************************************
+
+$(eval $(call gb_CppunitTest_CppunitTest,chart2_dump))
+
+$(eval $(call gb_CppunitTest_use_externals,chart2_dump, \
+    boost_headers \
+    libxml2 \
+))
+
+$(eval $(call gb_CppunitTest_add_exception_objects,chart2_dump, \
+    chart2/qa/extras/chart2dump/chart2dump \
+))
+
+$(eval $(call gb_CppunitTest_use_libraries,chart2_dump, \
+    basegfx \
+    comphelper \
+    cppu \
+    cppuhelper \
+    drawinglayer \
+    editeng \
+    for \
+    forui \
+    i18nlangtag \
+    msfilter \
+    vcl \
+    oox \
+    sal \
+    salhelper \
+    sax \
+    sb \
+    sc \
+    sw \
+    sd \
+    sfx \
+    sot \
+    svl \
+    svt \
+    svx \
+    svxcore \
+    test \
+    tl \
+    tk \
+    ucbhelper \
+    unotest \
+    utl \
+    vbahelper \
+    xo \
+    sw \
+    $(gb_UWINAPI) \
+))
+
+$(eval $(call gb_CppunitTest_set_include,chart2_dump,\
+    -I$(SRCDIR)/chart2/qa/extras \
+    -I$(SRCDIR)/chart2/inc \
+    $$(INCLUDE) \
+))
+
+$(eval $(call gb_CppunitTest_use_sdk_api,chart2_dump))
+
+$(eval $(call gb_CppunitTest_use_ure,chart2_dump))
+$(eval $(call gb_CppunitTest_use_vcl,chart2_dump))
+
+$(eval $(call gb_CppunitTest_use_components,chart2_dump,\
+    basic/util/sb \
+    animations/source/animcore/animcore \
+    chart2/source/controller/chartcontroller \
+    chart2/source/chartcore \
+    comphelper/util/comphelp \
+    configmgr/source/configmgr \
+    dtrans/util/mcnttype \
+    embeddedobj/util/embobj \
+    eventattacher/source/evtatt \
+    filter/source/config/cache/filterconfig1 \
+    filter/source/storagefilterdetect/storagefd \
+    forms/util/frm \
+    framework/util/fwk \
+    i18npool/util/i18npool \
+    linguistic/source/lng \
+    oox/util/oox \
+    package/source/xstor/xstor \
+    package/util/package2 \
+    sax/source/expatwrap/expwrap \
+    sc/util/sc \
+    sc/util/scd \
+    sc/util/scfilt \
+    sw/util/sw \
+    sw/util/swd \
+    sw/util/msword \
+    sd/util/sd \
+    sd/util/sdfilt \
+    sd/util/sdd \
+    $(call gb_Helper_optional,SCRIPTING, \
+        sc/util/vbaobj) \
+    scaddins/source/analysis/analysis \
+    scaddins/source/datefunc/date \
+    scripting/source/basprov/basprov \
+    scripting/util/scriptframe \
+    sfx2/util/sfx \
+    sot/util/sot \
+    svl/source/fsstor/fsstorage \
+    svl/util/svl \
+    svtools/util/svt \
+    svx/util/svx \
+    svx/util/svxcore \
+    toolkit/util/tk \
+    ucb/source/core/ucb1 \
+    ucb/source/ucp/file/ucpfile1 \
+    ucb/source/ucp/tdoc/ucptdoc1 \
+    uui/util/uui \
+    unotools/util/utl \
+    unoxml/source/rdf/unordf \
+    unoxml/source/service/unoxml \
+    writerfilter/util/writerfilter \
+    xmloff/util/xo \
+))
+
+$(eval $(call gb_CppunitTest_use_configuration,chart2_dump))
+
+# vim: set noet sw=4 ts=4:
diff --git a/chart2/Module_chart2.mk b/chart2/Module_chart2.mk
index 705321f..0061c0a 100644
--- a/chart2/Module_chart2.mk
+++ b/chart2/Module_chart2.mk
@@ -33,6 +33,7 @@ $(eval $(call gb_Module_add_slowcheck_targets,chart2,\
     CppunitTest_chart2_export \
     CppunitTest_chart2_import \
     CppunitTest_chart2_trendcalculators \
+    CppunitTest_chart2_dump \
 ))
 
 ifeq ($(ENABLE_CHART_TESTS),TRUE)
diff --git a/chart2/qa/extras/chart2dump/chart2dump.cxx 
b/chart2/qa/extras/chart2dump/chart2dump.cxx
new file mode 100755
index 0000000..0c69aeb
--- /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 0000000..f60197a
Binary files /dev/null and 
b/chart2/qa/extras/chart2dump/data/axis_special_positioning.ods 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 0000000..4040ab3
Binary files /dev/null and 
b/chart2/qa/extras/chart2dump/data/column_chart_small_spacing.ods 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 0000000..8a8fca8
Binary files /dev/null and 
b/chart2/qa/extras/chart2dump/data/custom_legend_position.ods 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 0000000..96f8462
Binary files /dev/null and 
b/chart2/qa/extras/chart2dump/data/default_formated_axis.ods 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 0000000..b2a36ae
Binary files /dev/null and 
b/chart2/qa/extras/chart2dump/data/formated_axis_labels.ods 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 0000000..1e51ef1
Binary files /dev/null and 
b/chart2/qa/extras/chart2dump/data/formated_axis_lines.ods 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 0000000..4503cbf
Binary files /dev/null and 
b/chart2/qa/extras/chart2dump/data/formated_grid_line.ods 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 0000000..51e2811
Binary files /dev/null and 
b/chart2/qa/extras/chart2dump/data/horizontal_grid.ods 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 0000000..9abb8a8
Binary files /dev/null and 
b/chart2/qa/extras/chart2dump/data/legend_on_bottom.ods 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 0000000..38115ac
Binary files /dev/null and 
b/chart2/qa/extras/chart2dump/data/legend_on_left_side.ods 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 0000000..a41b658
Binary files /dev/null and 
b/chart2/qa/extras/chart2dump/data/legend_on_right_side.ods 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 0000000..2b20ec35
Binary files /dev/null and b/chart2/qa/extras/chart2dump/data/legend_on_top.ods 
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 0000000..0dc5114
Binary files /dev/null and 
b/chart2/qa/extras/chart2dump/data/many_legend_entries.ods 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 0000000..3657df9
Binary files /dev/null and b/chart2/qa/extras/chart2dump/data/minor_grid.ods 
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 0000000..67e0052
Binary files /dev/null and 
b/chart2/qa/extras/chart2dump/data/multiple_categories.ods 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 0000000..df8dcce
Binary files /dev/null and 
b/chart2/qa/extras/chart2dump/data/normal_column_chart.ods 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 0000000..e144f94
Binary files /dev/null and 
b/chart2/qa/extras/chart2dump/data/percent_stacked_column_chart.ods 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 0000000..c5a7cd6
Binary files /dev/null and 
b/chart2/qa/extras/chart2dump/data/rotated_axis_labels.ods 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 0000000..df931ed
Binary files /dev/null and b/chart2/qa/extras/chart2dump/data/simple_chart.ods 
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 0000000..99076a7
Binary files /dev/null and 
b/chart2/qa/extras/chart2dump/data/stacked_column_chart.ods 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 0000000..2d14de9
Binary files /dev/null and b/chart2/qa/extras/chart2dump/data/vertical_grid.ods 
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 0000000..0ee9485
--- /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 0000000..dcc5716
--- /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 0000000..c39f32b
--- /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 0000000..b53820a
--- /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 0000000..7a67db6
--- /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 0000000..c1baec9
--- /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 0000000..0e62ab0
--- /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 0000000..1d0e3ea
--- /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 0000000..34df4a4
--- /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 0000000..4539b1c
--- /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 0000000..50c1df4
--- /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 0000000..b027540
--- /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 0000000..dd9103f
--- /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 0000000..12fe524
--- /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 0000000..502c08f
--- /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 0000000..57a6283
--- /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 0000000..9ed9688
--- /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 0000000..c64d614
--- /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 0000000..408131a
--- /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 0000000..9206644
--- /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 0000000..94fc417
--- /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 0000000..60c4472
--- /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 0000000..c1d05a9
--- /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

... etc. - the rest is truncated
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to