summaryrefslogtreecommitdiff
path: root/chart2/qa/extras/uichart.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'chart2/qa/extras/uichart.cxx')
-rw-r--r--chart2/qa/extras/uichart.cxx567
1 files changed, 567 insertions, 0 deletions
diff --git a/chart2/qa/extras/uichart.cxx b/chart2/qa/extras/uichart.cxx
new file mode 100644
index 000000000000..e17d0e6daa20
--- /dev/null
+++ b/chart2/qa/extras/uichart.cxx
@@ -0,0 +1,567 @@
+/* -*- 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 <comphelper/propertyvalue.hxx>
+
+using namespace ::com::sun::star;
+
+class Chart2UiChartTest : public ChartTest
+{
+public:
+ Chart2UiChartTest()
+ : ChartTest(u"/chart2/qa/extras/data/"_ustr)
+ {
+ }
+
+ void testCopyPasteToNewSheet(const uno::Reference<chart::XChartDocument>& xChartDoc,
+ OUString aObjectName, sal_Int32 nColumns, sal_Int32 nRows);
+};
+
+void Chart2UiChartTest::testCopyPasteToNewSheet(
+ const uno::Reference<chart::XChartDocument>& xChartDoc, OUString aObjectName,
+ sal_Int32 nColumns, sal_Int32 nRows)
+{
+ CPPUNIT_ASSERT(xChartDoc.is());
+ uno::Reference<chart::XChartDataArray> xChartData(xChartDoc->getData(), uno::UNO_QUERY_THROW);
+
+ uno::Sequence<OUString> aExpectedColumnDescriptions = xChartData->getColumnDescriptions();
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Incorrect number of columns in origin file", nColumns,
+ aExpectedColumnDescriptions.getLength());
+
+ uno::Sequence<OUString> aExpectedRowDescriptions = xChartData->getRowDescriptions();
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Incorrect number of rows in origin file", nRows,
+ aExpectedRowDescriptions.getLength());
+
+ Sequence<Sequence<double>> aExpectedData = xChartData->getData();
+
+ uno::Sequence<beans::PropertyValue> aPropertyValues = {
+ comphelper::makePropertyValue(u"ToObject"_ustr, aObjectName),
+ };
+ dispatchCommand(mxComponent, u".uno:GoToObject"_ustr, aPropertyValues);
+
+ dispatchCommand(mxComponent, u".uno:Copy"_ustr, {});
+
+ // create a new document
+ loadFromURL(u"private:factory/scalc"_ustr);
+
+ dispatchCommand(mxComponent, u".uno:Paste"_ustr, {});
+
+ uno::Reference<chart2::XChartDocument> xChartDoc2 = getChartDocFromSheet(0);
+ CPPUNIT_ASSERT(xChartDoc2.is());
+
+ uno::Reference<chart::XChartDataArray> xDataArray(xChartDoc2->getDataProvider(),
+ UNO_QUERY_THROW);
+
+ Sequence<OUString> aColumnDesc = xDataArray->getColumnDescriptions();
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Incorrect number of columns in destination file", nColumns,
+ aColumnDesc.getLength());
+ for (sal_Int32 i = 0; i < nColumns; ++i)
+ {
+ OString sMessage("Incorrect description in column: " + OString::number(i));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(sMessage.getStr(), aExpectedColumnDescriptions[i],
+ aColumnDesc[i]);
+ }
+
+ Sequence<OUString> aRowDesc = xDataArray->getRowDescriptions();
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Incorrect number of rows in destination file", nRows,
+ aRowDesc.getLength());
+ for (sal_Int32 i = 0; i < nRows; ++i)
+ {
+ OString sMessage("Incorrect description in row: " + OString::number(i));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(sMessage.getStr(), aExpectedRowDescriptions[i], aRowDesc[i]);
+ }
+
+ Sequence<Sequence<double>> aData = xDataArray->getData();
+
+ for (sal_Int32 nRowIdx = 0; nRowIdx < nRows; ++nRowIdx)
+ {
+ for (sal_Int32 nColIdx = 0; nColIdx < nColumns; ++nColIdx)
+ {
+ double nValue = aData[nRowIdx][nColIdx];
+ double nExpected = aExpectedData[nRowIdx][nColIdx];
+ OString sMessage("Incorrect value in Col: " + OString::number(nColIdx)
+ + " Row: " + OString::number(nRowIdx));
+
+ if (std::isnan(nValue))
+ {
+ // On paste, 0 becomes NaN, check whether it's expected
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(sMessage.getStr(), 0.0, nExpected, 1e-1);
+ }
+ else
+ {
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(sMessage.getStr(), nExpected, nValue, 1e-1);
+ }
+ }
+ }
+}
+
+CPPUNIT_TEST_FIXTURE(Chart2UiChartTest, testTdf99969)
+{
+ loadFromFile(u"ods/tdf99969.ods");
+ uno::Reference<chart::XChartDocument> xChartDoc(getChartCompFromSheet(0, 0),
+ uno::UNO_QUERY_THROW);
+ sal_Int32 nColumns = 2;
+ sal_Int32 nRows = 6;
+ CPPUNIT_ASSERT(xChartDoc.is());
+ uno::Reference<chart::XChartDataArray> xChartData(xChartDoc->getData(), uno::UNO_QUERY_THROW);
+
+ uno::Sequence<OUString> aExpectedColumnDescriptions = xChartData->getColumnDescriptions();
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Incorrect number of columns in origin file", nColumns,
+ aExpectedColumnDescriptions.getLength());
+
+ uno::Sequence<OUString> aExpectedRowDescriptions = xChartData->getRowDescriptions();
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Incorrect number of rows in origin file", nRows,
+ aExpectedRowDescriptions.getLength());
+
+ Sequence<Sequence<double>> aExpectedData = xChartData->getData();
+
+ dispatchCommand(mxComponent, u".uno:GoToCell"_ustr,
+ { comphelper::makePropertyValue(u"ToPoint"_ustr, uno::Any(u"C2:L25"_ustr)) });
+
+ dispatchCommand(mxComponent, u".uno:Copy"_ustr, {});
+
+ // create a new document
+ loadFromURL(u"private:factory/scalc"_ustr);
+
+ dispatchCommand(mxComponent, u".uno:Paste"_ustr, {});
+
+ uno::Reference<chart2::XChartDocument> xChartDoc2 = getChartDocFromSheet(0);
+ CPPUNIT_ASSERT(xChartDoc2.is());
+
+ uno::Reference<chart::XChartDataArray> xDataArray(xChartDoc2->getDataProvider(),
+ UNO_QUERY_THROW);
+
+ Sequence<OUString> aColumnDesc = xDataArray->getColumnDescriptions();
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Incorrect number of columns in destination file", nColumns,
+ aColumnDesc.getLength());
+ for (sal_Int32 i = 0; i < nColumns; ++i)
+ {
+ // Without the fix in place, this test would have failed with
+ // - Expected: ABC
+ // - Actual :
+ // - Incorrect description in column: 0
+ OString sMessage("Incorrect description in column: " + OString::number(i));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(sMessage.getStr(), aExpectedColumnDescriptions[i],
+ aColumnDesc[i]);
+ }
+
+ Sequence<OUString> aRowDesc = xDataArray->getRowDescriptions();
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Incorrect number of rows in destination file", nRows,
+ aRowDesc.getLength());
+ for (sal_Int32 i = 0; i < nRows; ++i)
+ {
+ OString sMessage("Incorrect description in row: " + OString::number(i));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(sMessage.getStr(), aExpectedRowDescriptions[i], aRowDesc[i]);
+ }
+
+ Sequence<Sequence<double>> aData = xDataArray->getData();
+
+ for (sal_Int32 nRowIdx = 0; nRowIdx < nRows; ++nRowIdx)
+ {
+ for (sal_Int32 nColIdx = 0; nColIdx < nColumns; ++nColIdx)
+ {
+ double nValue = aData[nRowIdx][nColIdx];
+ double nExpected = aExpectedData[nRowIdx][nColIdx];
+ OString sMessage("Incorrect value in Col: " + OString::number(nColIdx)
+ + " Row: " + OString::number(nRowIdx));
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(sMessage.getStr(), nExpected, nValue);
+ }
+ }
+}
+
+CPPUNIT_TEST_FIXTURE(Chart2UiChartTest, testTdf120348)
+{
+ loadFromFile(u"ods/tdf120348.ods");
+ uno::Reference<chart::XChartDocument> xChartDoc(getChartCompFromSheet(0, 0),
+ uno::UNO_QUERY_THROW);
+
+ // Without the fix in place, this test would have failed with
+ // - Expected: 0
+ // - Actual : 3.33625955201419
+ // - Incorrect value in Col: 2 Row: 51
+ testCopyPasteToNewSheet(xChartDoc, u"Object 2"_ustr, 4, 158);
+}
+
+CPPUNIT_TEST_FIXTURE(Chart2UiChartTest, testTdf151091)
+{
+ std::vector<OUString> aExpected
+ = { u"Ωφέλιμο"_ustr, u"Επικίνδυνο"_ustr, u"Απόσταση"_ustr, u"Μάσκα"_ustr, u"Εμβόλιο"_ustr };
+
+ loadFromFile(u"ods/tdf151091.ods");
+ uno::Reference<chart::XChartDocument> xChartDoc(getChartCompFromSheet(0, 0),
+ uno::UNO_QUERY_THROW);
+ CPPUNIT_ASSERT(xChartDoc.is());
+ uno::Reference<chart::XChartDataArray> xChartData(xChartDoc->getData(), uno::UNO_QUERY_THROW);
+ uno::Sequence<OUString> aSeriesList = xChartData->getColumnDescriptions();
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(5), aSeriesList.getLength());
+
+ for (size_t i = 0; i < 5; ++i)
+ CPPUNIT_ASSERT_EQUAL(aExpected[i], aSeriesList[i]);
+
+ uno::Sequence<beans::PropertyValue> aPropertyValues = {
+ comphelper::makePropertyValue(u"ToObject"_ustr, u"Object 1"_ustr),
+ };
+ dispatchCommand(mxComponent, u".uno:GoToObject"_ustr, aPropertyValues);
+
+ dispatchCommand(mxComponent, u".uno:Copy"_ustr, {});
+
+ // create a new writer document
+ loadFromURL(u"private:factory/swriter"_ustr);
+
+ dispatchCommand(mxComponent, u".uno:Paste"_ustr, {});
+
+ aSeriesList = getWriterChartColumnDescriptions();
+
+ // Without the fix in place, this test would have failed with
+ // - Expected: 5
+ // - Actual : 1
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(5), aSeriesList.getLength());
+
+ for (size_t i = 0; i < 5; ++i)
+ CPPUNIT_ASSERT_EQUAL(aExpected[i], aSeriesList[i]);
+}
+
+CPPUNIT_TEST_FIXTURE(Chart2UiChartTest, testTdf107097)
+{
+ loadFromFile(u"ods/tdf107097.ods");
+ uno::Reference<chart::XChartDocument> xChartDoc(getPivotChartDocFromSheet(1),
+ uno::UNO_QUERY_THROW);
+ testCopyPasteToNewSheet(xChartDoc, u"Object 1"_ustr, 4, 12);
+}
+
+CPPUNIT_TEST_FIXTURE(Chart2UiChartTest, testTdf136011)
+{
+ loadFromFile(u"ods/tdf136011.ods");
+ uno::Reference<chart::XChartDocument> xChartDoc(getChartCompFromSheet(0, 0),
+ uno::UNO_QUERY_THROW);
+ testCopyPasteToNewSheet(xChartDoc, u"Object 1"_ustr, 3, 9);
+
+ loadFromFile(u"ods/tdf136011.ods");
+ uno::Reference<chart::XChartDocument> xChartDoc2(getChartCompFromSheet(0, 1),
+ uno::UNO_QUERY_THROW);
+
+ // Without the fix in place, this test would have failed with
+ // - Expected: Test 1 1
+ // - Actual : Test 1
+ // - Incorrect description in row: 0
+ testCopyPasteToNewSheet(xChartDoc2, u"Object 2"_ustr, 3, 9);
+}
+
+CPPUNIT_TEST_FIXTURE(Chart2UiChartTest, testTdf62057)
+{
+ loadFromFile(u"ods/tdf62057.ods");
+ uno::Reference<chart::XChartDocument> xChartDoc(getChartCompFromSheet(0, 0),
+ uno::UNO_QUERY_THROW);
+
+ // Without the fix in place, this test would have failed with
+ // - Expected: 2
+ // - Actual : 7
+ // - Incorrect number of columns in destination file
+ testCopyPasteToNewSheet(xChartDoc, u"Object 1"_ustr, 2, 6);
+}
+
+CPPUNIT_TEST_FIXTURE(Chart2UiChartTest, testTdf98690)
+{
+ loadFromFile(u"xlsx/tdf98690.xlsx");
+ uno::Reference<chart::XChartDocument> xChartDoc(getChartCompFromSheet(0, 0),
+ uno::UNO_QUERY_THROW);
+
+ CPPUNIT_ASSERT(xChartDoc.is());
+ uno::Reference<chart::XChartDataArray> xChartData(xChartDoc->getData(), uno::UNO_QUERY_THROW);
+ uno::Sequence<OUString> aSeriesList = xChartData->getColumnDescriptions();
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(6), aSeriesList.getLength());
+
+ uno::Sequence<beans::PropertyValue> aPropertyValues = {
+ comphelper::makePropertyValue(u"ToObject"_ustr, u"Chart 2"_ustr),
+ };
+ dispatchCommand(mxComponent, u".uno:GoToObject"_ustr, aPropertyValues);
+
+ dispatchCommand(mxComponent, u".uno:Copy"_ustr, {});
+
+ // create a new document
+ loadFromURL(u"private:factory/scalc"_ustr);
+
+ dispatchCommand(mxComponent, u".uno:Paste"_ustr, {});
+
+ uno::Reference<chart::XChartDocument> xChartDoc2(getChartCompFromSheet(0, 0),
+ uno::UNO_QUERY_THROW);
+ CPPUNIT_ASSERT(xChartDoc2.is());
+ uno::Reference<chart::XChartDataArray> xChartData2(xChartDoc2->getData(), uno::UNO_QUERY_THROW);
+ uno::Sequence<OUString> aSeriesList2 = xChartData2->getColumnDescriptions();
+
+ // Without the fix in place, this test would have failed with
+ // - Expected: 12
+ // - Actual : 0
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(12), aSeriesList2.getLength());
+}
+
+CPPUNIT_TEST_FIXTURE(Chart2UiChartTest, testTdf101894)
+{
+ loadFromFile(u"ods/tdf101894.ods");
+ uno::Reference<chart::XChartDocument> xChartDoc(getChartCompFromSheet(0, 0),
+ uno::UNO_QUERY_THROW);
+
+ CPPUNIT_ASSERT(xChartDoc.is());
+ uno::Reference<chart::XChartDataArray> xChartData(xChartDoc->getData(), uno::UNO_QUERY_THROW);
+
+ uno::Sequence<OUString> aExpectedColumnDescriptions = xChartData->getColumnDescriptions();
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Incorrect number of columns in origin file",
+ static_cast<sal_Int32>(12),
+ aExpectedColumnDescriptions.getLength());
+
+ uno::Sequence<OUString> aExpectedRowDescriptions = xChartData->getRowDescriptions();
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Incorrect number of rows in origin file",
+ static_cast<sal_Int32>(8), aExpectedRowDescriptions.getLength());
+
+ Sequence<Sequence<double>> aExpectedData = xChartData->getData();
+
+ // Create a copy of the sheet and move to the end
+ uno::Sequence<beans::PropertyValue> aArgs(
+ comphelper::InitPropertySequence({ { "DocName", uno::Any(u"tdf101894"_ustr) },
+ { "Index", uno::Any(sal_uInt16(32767)) },
+ { "Copy", uno::Any(true) } }));
+ dispatchCommand(mxComponent, u".uno:Move"_ustr, aArgs);
+
+ uno::Reference<sheet::XSpreadsheetDocument> xDoc(mxComponent, UNO_QUERY_THROW);
+ uno::Reference<container::XIndexAccess> xIA(xDoc->getSheets(), UNO_QUERY_THROW);
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(2), xIA->getCount());
+
+ for (sal_Int32 sheetIndex = 0; sheetIndex < 2; ++sheetIndex)
+ {
+ uno::Reference<chart::XChartDocument> xChartDoc2(getChartCompFromSheet(sheetIndex, 0),
+ uno::UNO_QUERY_THROW);
+ CPPUNIT_ASSERT(xChartDoc2.is());
+ uno::Reference<chart::XChartDataArray> xChartData2(xChartDoc2->getData(),
+ uno::UNO_QUERY_THROW);
+
+ uno::Sequence<OUString> aColumnDescriptions = xChartData2->getColumnDescriptions();
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Incorrect number of columns in origin file",
+ static_cast<sal_Int32>(12), aColumnDescriptions.getLength());
+ for (sal_Int32 i = 0; i < 12; ++i)
+ {
+ OString sMessage("Incorrect description in column: " + OString::number(i));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(sMessage.getStr(), aExpectedColumnDescriptions[i],
+ aColumnDescriptions[i]);
+ }
+
+ uno::Sequence<OUString> aRowDescriptions = xChartData2->getRowDescriptions();
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Incorrect number of rows in origin file",
+ static_cast<sal_Int32>(8), aRowDescriptions.getLength());
+ for (sal_Int32 i = 0; i < 8; ++i)
+ {
+ OString sMessage("Incorrect description in row: " + OString::number(i));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(sMessage.getStr(), aExpectedRowDescriptions[i],
+ aRowDescriptions[i]);
+ }
+
+ Sequence<Sequence<double>> aData = xChartData2->getData();
+
+ for (sal_Int32 nRowIdx = 0; nRowIdx < 8; ++nRowIdx)
+ {
+ for (sal_Int32 nColIdx = 0; nColIdx < 12; ++nColIdx)
+ {
+ double nValue = aData[nRowIdx][nColIdx];
+ double nExpected = aExpectedData[nRowIdx][nColIdx];
+ OString sMessage("Incorrect value in Col: " + OString::number(nColIdx)
+ + " Row: " + OString::number(nRowIdx));
+
+ // Without the fix in place, this test would have failed with
+ // - Expected: 1
+ // - Actual : 2.2250738585072e-308
+ // - Incorrect value in Col: 0 Row: 0
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(sMessage.getStr(), nExpected, nValue, 1e-1);
+ }
+ }
+ }
+}
+
+CPPUNIT_TEST_FIXTURE(Chart2UiChartTest, testCopyPasteChartWithDotInSheetName)
+{
+ loadFromFile(u"ods/chartWithDotInSheetName.ods");
+ uno::Reference<chart::XChartDocument> xChartDoc(getChartCompFromSheet(0, 0),
+ uno::UNO_QUERY_THROW);
+
+ CPPUNIT_ASSERT(xChartDoc.is());
+ uno::Reference<chart::XChartDataArray> xChartData(xChartDoc->getData(), uno::UNO_QUERY_THROW);
+
+ uno::Sequence<OUString> aExpectedColumnDescriptions = xChartData->getColumnDescriptions();
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Incorrect number of columns in origin file",
+ static_cast<sal_Int32>(4),
+ aExpectedColumnDescriptions.getLength());
+
+ uno::Sequence<OUString> aExpectedRowDescriptions = xChartData->getRowDescriptions();
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Incorrect number of rows in origin file",
+ static_cast<sal_Int32>(7), aExpectedRowDescriptions.getLength());
+
+ Sequence<Sequence<double>> aExpectedData = xChartData->getData();
+
+ dispatchCommand(mxComponent, u".uno:SelectAll"_ustr, {});
+ dispatchCommand(mxComponent, u".uno:Copy"_ustr, {});
+
+ uno::Sequence<beans::PropertyValue> aArgs(comphelper::InitPropertySequence(
+ { { "Name", uno::Any(u"NewTab"_ustr) }, { "Index", uno::Any(sal_uInt16(2)) } }));
+ dispatchCommand(mxComponent, u".uno:Insert"_ustr, aArgs);
+
+ uno::Reference<sheet::XSpreadsheetDocument> xDoc(mxComponent, UNO_QUERY_THROW);
+ uno::Reference<container::XIndexAccess> xIA(xDoc->getSheets(), UNO_QUERY_THROW);
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(2), xIA->getCount());
+
+ dispatchCommand(mxComponent, u".uno:Paste"_ustr, {});
+
+ for (sal_Int32 sheetIndex = 0; sheetIndex < 2; ++sheetIndex)
+ {
+ uno::Reference<chart::XChartDocument> xChartDoc2(getChartCompFromSheet(sheetIndex, 0),
+ uno::UNO_QUERY_THROW);
+ CPPUNIT_ASSERT(xChartDoc2.is());
+ uno::Reference<chart::XChartDataArray> xChartData2(xChartDoc2->getData(),
+ uno::UNO_QUERY_THROW);
+
+ uno::Sequence<OUString> aColumnDescriptions = xChartData2->getColumnDescriptions();
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Incorrect number of columns in origin file",
+ static_cast<sal_Int32>(4), aColumnDescriptions.getLength());
+ for (sal_Int32 i = 0; i < 4; ++i)
+ {
+ OString sMessage("Incorrect description in column: " + OString::number(i));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(sMessage.getStr(), aExpectedColumnDescriptions[i],
+ aColumnDescriptions[i]);
+ }
+
+ uno::Sequence<OUString> aRowDescriptions = xChartData2->getRowDescriptions();
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Incorrect number of rows in origin file",
+ static_cast<sal_Int32>(7), aRowDescriptions.getLength());
+ for (sal_Int32 i = 0; i < 7; ++i)
+ {
+ OString sMessage("Incorrect description in row: " + OString::number(i));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(sMessage.getStr(), aExpectedRowDescriptions[i],
+ aRowDescriptions[i]);
+ }
+
+ Sequence<Sequence<double>> aData = xChartData2->getData();
+
+ for (sal_Int32 nRowIdx = 0; nRowIdx < 7; ++nRowIdx)
+ {
+ for (sal_Int32 nColIdx = 0; nColIdx < 4; ++nColIdx)
+ {
+ double nValue = aData[nRowIdx][nColIdx];
+ double nExpected = aExpectedData[nRowIdx][nColIdx];
+ OString sMessage("Incorrect value in Col: " + OString::number(nColIdx)
+ + " Row: " + OString::number(nRowIdx));
+
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(sMessage.getStr(), nExpected, nValue, 1e-1);
+ }
+ }
+ }
+}
+
+CPPUNIT_TEST_FIXTURE(Chart2UiChartTest, testTdf158223)
+{
+ loadFromFile(u"ods/tdf158223.ods");
+
+ uno::Reference<sheet::XSpreadsheetDocument> xDoc(mxComponent, UNO_QUERY_THROW);
+ uno::Reference<container::XIndexAccess> xIA(xDoc->getSheets(), UNO_QUERY_THROW);
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(3), xIA->getCount());
+
+ for (sal_Int32 sheetIndex = 0; sheetIndex < 2; ++sheetIndex)
+ {
+ OUString sExpectedValuesX("$Tabelle" + OUString::number(sheetIndex + 1) + ".$A$2:$A$11");
+ OUString sExpectedValuesY("$Tabelle" + OUString::number(sheetIndex + 1) + ".$B$2:$B$11");
+ uno::Reference<chart2::XChartDocument> xChartDoc = getChartDocFromSheet(sheetIndex);
+ Reference<chart2::data::XDataSequence> xValuesX
+ = getDataSequenceFromDocByRole(xChartDoc, u"values-x");
+ CPPUNIT_ASSERT_EQUAL(sExpectedValuesX, xValuesX->getSourceRangeRepresentation());
+ Reference<chart2::data::XDataSequence> xValuesY
+ = getDataSequenceFromDocByRole(xChartDoc, u"values-y");
+ CPPUNIT_ASSERT_EQUAL(sExpectedValuesY, xValuesY->getSourceRangeRepresentation());
+ }
+
+ // Remove last sheet
+ uno::Sequence<beans::PropertyValue> aArgs(
+ comphelper::InitPropertySequence({ { "Index", uno::Any(sal_uInt16(3)) } }));
+ dispatchCommand(mxComponent, u".uno:Remove"_ustr, aArgs);
+
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(2), xIA->getCount());
+
+ for (sal_Int32 sheetIndex = 0; sheetIndex < 2; ++sheetIndex)
+ {
+ OUString sExpectedValuesX("$Tabelle" + OUString::number(sheetIndex + 1) + ".$A$2:$A$11");
+ OUString sExpectedValuesY("$Tabelle" + OUString::number(sheetIndex + 1) + ".$B$2:$B$11");
+ uno::Reference<chart2::XChartDocument> xChartDoc = getChartDocFromSheet(sheetIndex);
+ Reference<chart2::data::XDataSequence> xValuesX
+ = getDataSequenceFromDocByRole(xChartDoc, u"values-x");
+
+ // Without the fix in place, this test would have failed with
+ // - Expected: $Tabelle2.$A$2:$A$11
+ // - Actual : $Tabelle2.$A$2:$Tabelle1.$A$11
+ CPPUNIT_ASSERT_EQUAL(sExpectedValuesX, xValuesX->getSourceRangeRepresentation());
+ Reference<chart2::data::XDataSequence> xValuesY
+ = getDataSequenceFromDocByRole(xChartDoc, u"values-y");
+ CPPUNIT_ASSERT_EQUAL(sExpectedValuesY, xValuesY->getSourceRangeRepresentation());
+ }
+}
+
+CPPUNIT_TEST_FIXTURE(Chart2UiChartTest, testTdf153706)
+{
+ // Load a spreadsheet with a to-page XY scatter chart with the sheet as data source
+ loadFromFile(u"ods/tdf153706_XY_scatter_chart.ods");
+
+ // Select the cell range around the chart, and copy the range to clipboard, including the chart
+ dispatchCommand(mxComponent, u".uno:GoToCell"_ustr,
+ { comphelper::makePropertyValue(u"ToPoint"_ustr, u"D1:K23"_ustr) });
+ dispatchCommand(mxComponent, u".uno:Copy"_ustr, {});
+
+ // create a new document
+ loadFromURL(u"private:factory/scalc"_ustr);
+
+ // Paste; this must create a chart with own data source having a proper copy of the data
+ dispatchCommand(mxComponent, u".uno:Paste"_ustr, {});
+
+ css::uno::Reference xChartDoc(getChartDocFromSheet(0), css::uno::UNO_SET_THROW);
+ auto xDataArray(xChartDoc->getDataProvider().queryThrow<chart::XChartDataArray>());
+
+ css::uno::Sequence<Sequence<double>> aData = xDataArray->getData();
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(3), aData.getLength());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), aData[0].getLength());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), aData[1].getLength());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), aData[2].getLength());
+ CPPUNIT_ASSERT_EQUAL(2.0, aData[0][0]);
+ CPPUNIT_ASSERT_EQUAL(3.0, aData[0][1]);
+ CPPUNIT_ASSERT_EQUAL(3.0, aData[1][0]);
+ CPPUNIT_ASSERT_EQUAL(2.0, aData[1][1]);
+ CPPUNIT_ASSERT_EQUAL(4.0, aData[2][0]);
+ CPPUNIT_ASSERT_EQUAL(1.0, aData[2][1]);
+
+ // Without the fix, this would fail with
+ // - Expected: 1
+ // - Actual : 2
+ // i.e., the X values were treated as another Y series
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), getNumberOfDataSeries(xChartDoc));
+
+ auto xSeries(getDataSeriesFromDoc(xChartDoc, 0).queryThrow<chart2::data::XDataSource>());
+ auto sequences = xSeries->getDataSequences();
+ // Without the fix, this would fail with
+ // - Expected: 2
+ // - Actual : 1
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), sequences.getLength());
+
+ auto propX(sequences[0]->getValues().queryThrow<beans::XPropertySet>());
+ // Without the fix, this would fail with
+ // - Expected: values-x
+ // - Actual : values-y
+ CPPUNIT_ASSERT_EQUAL(u"values-x"_ustr, propX->getPropertyValue(u"Role"_ustr).get<OUString>());
+
+ auto propY(sequences[1]->getValues().queryThrow<beans::XPropertySet>());
+ CPPUNIT_ASSERT_EQUAL(u"values-y"_ustr, propY->getPropertyValue(u"Role"_ustr).get<OUString>());
+}
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */