summaryrefslogtreecommitdiffstats
path: root/sc/qa/unit/ucalc_sparkline.cxx
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--sc/qa/unit/ucalc_sparkline.cxx967
1 files changed, 967 insertions, 0 deletions
diff --git a/sc/qa/unit/ucalc_sparkline.cxx b/sc/qa/unit/ucalc_sparkline.cxx
new file mode 100644
index 0000000000..d058d16f02
--- /dev/null
+++ b/sc/qa/unit/ucalc_sparkline.cxx
@@ -0,0 +1,967 @@
+/* -*- 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 "helper/qahelper.hxx"
+#include <docsh.hxx>
+#include <tabvwsh.hxx>
+#include <cliputil.hxx>
+#include <docfunc.hxx>
+#include <undomanager.hxx>
+
+#include <Sparkline.hxx>
+#include <SparklineGroup.hxx>
+#include <SparklineList.hxx>
+#include <SparklineAttributes.hxx>
+#include <ThemeColorChanger.hxx>
+#include <docmodel/theme/Theme.hxx>
+#include <svx/svdpage.hxx>
+
+using namespace css;
+
+/** Test operation for sparklines, sparkline groups and attributes */
+class SparklineTest : public ScUcalcTestBase
+{
+};
+
+namespace
+{
+void insertTestData(ScDocument& rDoc)
+{
+ rDoc.SetValue(0, 0, 0, 4);
+ rDoc.SetValue(0, 1, 0, -2);
+ rDoc.SetValue(0, 2, 0, 1);
+ rDoc.SetValue(0, 3, 0, -3);
+ rDoc.SetValue(0, 4, 0, 5);
+ rDoc.SetValue(0, 5, 0, 3);
+}
+
+sc::Sparkline* createTestSparkline(ScDocument& rDoc)
+{
+ auto pSparklineGroup = std::make_shared<sc::SparklineGroup>();
+
+ sc::Sparkline* pSparkline = rDoc.CreateSparkline(ScAddress(0, 6, 0), pSparklineGroup);
+ if (!pSparkline)
+ return nullptr;
+
+ insertTestData(rDoc);
+
+ ScRangeList aList;
+ aList.push_back(ScRange(0, 0, 0, 0, 5, 0));
+ pSparkline->setInputRange(aList);
+
+ return pSparkline;
+}
+
+} // end anonymous namespace
+
+CPPUNIT_TEST_FIXTURE(SparklineTest, testAddSparkline)
+{
+ m_pDoc->InsertTab(0, "Test");
+
+ auto pSparkline = createTestSparkline(*m_pDoc);
+ CPPUNIT_ASSERT(pSparkline);
+
+ auto pGetSparkline = m_pDoc->GetSparkline(ScAddress(0, 6, 0));
+ CPPUNIT_ASSERT(pGetSparkline);
+
+ CPPUNIT_ASSERT_EQUAL(pGetSparkline.get(), pSparkline);
+
+ sc::SparklineList* pList = m_pDoc->GetSparklineList(SCTAB(0));
+ CPPUNIT_ASSERT(pList);
+
+ CPPUNIT_ASSERT_EQUAL(size_t(1), pList->getSparklineGroups().size());
+
+ auto const& aSparklineVector = pList->getSparklinesFor(pGetSparkline->getSparklineGroup());
+ CPPUNIT_ASSERT_EQUAL(size_t(1), aSparklineVector.size());
+ CPPUNIT_ASSERT_EQUAL(aSparklineVector[0].get(), pSparkline);
+
+ m_pDoc->DeleteTab(0);
+}
+
+CPPUNIT_TEST_FIXTURE(SparklineTest, testClearContentSprkline)
+{
+ m_pDoc->InsertTab(0, "Test");
+
+ auto pSparkline = createTestSparkline(*m_pDoc);
+ CPPUNIT_ASSERT(pSparkline);
+
+ clearRange(m_pDoc, ScRange(0, 6, 0, 0, 6, 0));
+
+ auto pGetSparkline = m_pDoc->GetSparkline(ScAddress(0, 6, 0));
+ CPPUNIT_ASSERT(!pGetSparkline);
+
+ m_pDoc->DeleteTab(0);
+}
+
+CPPUNIT_TEST_FIXTURE(SparklineTest, testCopyPasteSparkline)
+{
+ m_pDoc->InsertTab(0, "Test");
+
+ auto* pCreatedSparkline = createTestSparkline(*m_pDoc);
+ CPPUNIT_ASSERT(pCreatedSparkline);
+
+ ScRange aSourceRange(0, 6, 0, 0, 6, 0);
+ auto pSparkline = m_pDoc->GetSparkline(aSourceRange.aStart);
+ auto const& pOriginalGroup = pSparkline->getSparklineGroup();
+
+ CPPUNIT_ASSERT(pSparkline);
+ CPPUNIT_ASSERT_EQUAL(SCCOL(0), pSparkline->getColumn());
+ CPPUNIT_ASSERT_EQUAL(SCROW(6), pSparkline->getRow());
+
+ // CopyToClip / CopyFromClip with a aClipDoc
+ {
+ ScDocument aClipDoc(SCDOCMODE_CLIP);
+ copyToClip(m_pDoc, aSourceRange, &aClipDoc);
+
+ auto pClipSparkline = aClipDoc.GetSparkline(aSourceRange.aStart);
+ CPPUNIT_ASSERT(pClipSparkline);
+
+ ScRange aPasteRange(0, 7, 0, 0, 7, 0);
+
+ ScMarkData aMark(m_pDoc->GetSheetLimits());
+ aMark.SetMarkArea(aPasteRange);
+ m_pDoc->CopyFromClip(aPasteRange, aMark, InsertDeleteFlags::ALL, nullptr, &aClipDoc);
+
+ auto pSparklineCopy = m_pDoc->GetSparkline(aPasteRange.aStart);
+ CPPUNIT_ASSERT(pSparklineCopy);
+
+ CPPUNIT_ASSERT_EQUAL(SCCOL(0), pSparklineCopy->getColumn());
+ CPPUNIT_ASSERT_EQUAL(SCROW(7), pSparklineCopy->getRow());
+
+ auto const& pCopyGroup = pSparklineCopy->getSparklineGroup();
+
+ CPPUNIT_ASSERT_EQUAL(pOriginalGroup->getID(), pCopyGroup->getID());
+ CPPUNIT_ASSERT_EQUAL(pOriginalGroup.get(), pCopyGroup.get());
+ }
+
+ // Copy / Paste with a Clim_pDoc
+ {
+ // Copy
+ ScDocument aClipDoc(SCDOCMODE_CLIP);
+ copyToClip(m_pDoc, aSourceRange, &aClipDoc);
+
+ // Paste
+ ScRange aPasteRange(0, 8, 0, 0, 8, 0);
+
+ pasteFromClip(m_pDoc, aPasteRange, &aClipDoc);
+
+ auto pSparklineCopy = m_pDoc->GetSparkline(aPasteRange.aStart);
+ CPPUNIT_ASSERT(pSparklineCopy);
+
+ CPPUNIT_ASSERT_EQUAL(SCCOL(0), pSparklineCopy->getColumn());
+ CPPUNIT_ASSERT_EQUAL(SCROW(8), pSparklineCopy->getRow());
+
+ auto const& pCopyGroup = pSparklineCopy->getSparklineGroup();
+
+ CPPUNIT_ASSERT_EQUAL(pOriginalGroup->getID(), pCopyGroup->getID());
+ CPPUNIT_ASSERT_EQUAL(pOriginalGroup.get(), pCopyGroup.get());
+ }
+
+ m_pDoc->DeleteTab(0);
+}
+
+CPPUNIT_TEST_FIXTURE(SparklineTest, testCutPasteSparkline)
+{
+ m_pDoc->InsertTab(0, "Test");
+
+ auto* pCreatedSparkline = createTestSparkline(*m_pDoc);
+ CPPUNIT_ASSERT(pCreatedSparkline);
+
+ ScRange aSourceRange(0, 6, 0, 0, 6, 0);
+ auto pSparkline = m_pDoc->GetSparkline(aSourceRange.aStart);
+
+ CPPUNIT_ASSERT(pSparkline);
+ CPPUNIT_ASSERT_EQUAL(SCCOL(0), pSparkline->getColumn());
+ CPPUNIT_ASSERT_EQUAL(SCROW(6), pSparkline->getRow());
+
+ // Cut
+ ScDocument aClipDoc(SCDOCMODE_CLIP);
+ cutToClip(*m_xDocShell, aSourceRange, &aClipDoc, false);
+
+ // Paste
+ ScRange aPasteRange(0, 7, 0, 0, 7, 0);
+ pasteFromClip(m_pDoc, aPasteRange, &aClipDoc);
+
+ // Check
+ auto pSparklineCopy = m_pDoc->GetSparkline(aPasteRange.aStart);
+ CPPUNIT_ASSERT(pSparklineCopy);
+
+ CPPUNIT_ASSERT_EQUAL(SCCOL(0), pSparklineCopy->getColumn());
+ CPPUNIT_ASSERT_EQUAL(SCROW(7), pSparklineCopy->getRow());
+
+ m_pDoc->DeleteTab(0);
+}
+
+CPPUNIT_TEST_FIXTURE(SparklineTest, testUndoRedoInsertSparkline)
+{
+ m_pDoc->InsertTab(0, "Test");
+
+ auto& rDocFunc = m_xDocShell->GetDocFunc();
+
+ // insert test data - A1:A6
+ insertTestData(*m_pDoc);
+
+ // Sparkline range
+ ScRange aRange(0, 6, 0, 0, 6, 0);
+
+ // Check Sparkline at cell A7 doesn't exists
+ auto pSparkline = m_pDoc->GetSparkline(aRange.aStart);
+ CPPUNIT_ASSERT(!pSparkline);
+
+ auto pSparklineGroup = std::make_shared<sc::SparklineGroup>();
+ rDocFunc.InsertSparklines(ScRange(0, 0, 0, 0, 5, 0), aRange, pSparklineGroup);
+
+ // Check Sparkline at cell A7 exists
+ pSparkline = m_pDoc->GetSparkline(aRange.aStart);
+ CPPUNIT_ASSERT(pSparkline);
+ CPPUNIT_ASSERT_EQUAL(SCCOL(0), pSparkline->getColumn());
+ CPPUNIT_ASSERT_EQUAL(SCROW(6), pSparkline->getRow());
+
+ // Undo
+ m_pDoc->GetUndoManager()->Undo();
+
+ // Check Sparkline at cell A7 doesn't exists
+ pSparkline = m_pDoc->GetSparkline(aRange.aStart);
+ CPPUNIT_ASSERT(!pSparkline);
+
+ // Redo
+ m_pDoc->GetUndoManager()->Redo();
+
+ // Check Sparkline at cell A7 exists
+ pSparkline = m_pDoc->GetSparkline(aRange.aStart);
+ CPPUNIT_ASSERT(pSparkline);
+ CPPUNIT_ASSERT_EQUAL(SCCOL(0), pSparkline->getColumn());
+ CPPUNIT_ASSERT_EQUAL(SCROW(6), pSparkline->getRow());
+
+ m_pDoc->DeleteTab(0);
+}
+
+CPPUNIT_TEST_FIXTURE(SparklineTest, testUndoRedoDeleteSparkline)
+{
+ m_pDoc->InsertTab(0, "Test");
+
+ auto& rDocFunc = m_xDocShell->GetDocFunc();
+
+ // Try to delete sparkline that doesn't exist - returns false
+ CPPUNIT_ASSERT(!rDocFunc.DeleteSparkline(ScAddress(0, 6, 0)));
+
+ // insert test data - A1:A6
+ insertTestData(*m_pDoc);
+
+ // Sparkline range
+ ScRange aRange(0, 6, 0, 0, 6, 0);
+
+ // Check Sparkline at cell A7 doesn't exists
+ auto pSparkline = m_pDoc->GetSparkline(aRange.aStart);
+ CPPUNIT_ASSERT(!pSparkline);
+
+ auto pSparklineGroup = std::make_shared<sc::SparklineGroup>();
+ CPPUNIT_ASSERT(rDocFunc.InsertSparklines(ScRange(0, 0, 0, 0, 5, 0), aRange, pSparklineGroup));
+
+ // Check Sparkline at cell A7 exists
+ pSparkline = m_pDoc->GetSparkline(aRange.aStart);
+ CPPUNIT_ASSERT(pSparkline);
+ CPPUNIT_ASSERT_EQUAL(SCCOL(0), pSparkline->getColumn());
+ CPPUNIT_ASSERT_EQUAL(SCROW(6), pSparkline->getRow());
+
+ // Delete Sparkline
+ CPPUNIT_ASSERT(rDocFunc.DeleteSparkline(ScAddress(0, 6, 0)));
+
+ // Check Sparkline at cell A7 doesn't exists
+ pSparkline = m_pDoc->GetSparkline(aRange.aStart);
+ CPPUNIT_ASSERT(!pSparkline);
+
+ // Undo
+ m_pDoc->GetUndoManager()->Undo();
+
+ // Check Sparkline at cell A7 exists
+ pSparkline = m_pDoc->GetSparkline(aRange.aStart);
+ CPPUNIT_ASSERT(pSparkline);
+ CPPUNIT_ASSERT_EQUAL(SCCOL(0), pSparkline->getColumn());
+ CPPUNIT_ASSERT_EQUAL(SCROW(6), pSparkline->getRow());
+
+ // Redo
+ m_pDoc->GetUndoManager()->Redo();
+
+ // Check Sparkline at cell A7 doesn't exists
+ pSparkline = m_pDoc->GetSparkline(aRange.aStart);
+ CPPUNIT_ASSERT(!pSparkline);
+
+ CPPUNIT_ASSERT(!m_pDoc->HasSparkline(aRange.aStart));
+
+ m_pDoc->DeleteTab(0);
+}
+
+CPPUNIT_TEST_FIXTURE(SparklineTest, testUndoRedoDeleteSparklineGroup)
+{
+ m_pDoc->InsertTab(0, "Test");
+
+ auto& rDocFunc = m_xDocShell->GetDocFunc();
+
+ // insert test data - A1:A6
+ insertTestData(*m_pDoc);
+
+ // Sparkline range
+ ScRange aDataRange(0, 0, 0, 3, 5, 0); //A1:D6
+ ScRange aRange(0, 6, 0, 3, 6, 0); // A7:D7
+
+ auto pSparklineGroup = std::make_shared<sc::SparklineGroup>();
+ CPPUNIT_ASSERT(rDocFunc.InsertSparklines(aDataRange, aRange, pSparklineGroup));
+
+ // Check Sparklines
+ CPPUNIT_ASSERT_EQUAL(true, m_pDoc->HasSparkline(ScAddress(0, 6, 0))); // A7
+ CPPUNIT_ASSERT_EQUAL(true, m_pDoc->HasSparkline(ScAddress(1, 6, 0)));
+ CPPUNIT_ASSERT_EQUAL(true, m_pDoc->HasSparkline(ScAddress(2, 6, 0)));
+ CPPUNIT_ASSERT_EQUAL(true, m_pDoc->HasSparkline(ScAddress(3, 6, 0))); // D7
+
+ // Delete Sparkline
+ CPPUNIT_ASSERT(rDocFunc.DeleteSparklineGroup(pSparklineGroup, SCTAB(0)));
+
+ // Check Sparklines
+ CPPUNIT_ASSERT_EQUAL(false, m_pDoc->HasSparkline(ScAddress(0, 6, 0))); // A7
+ CPPUNIT_ASSERT_EQUAL(false, m_pDoc->HasSparkline(ScAddress(1, 6, 0)));
+ CPPUNIT_ASSERT_EQUAL(false, m_pDoc->HasSparkline(ScAddress(2, 6, 0)));
+ CPPUNIT_ASSERT_EQUAL(false, m_pDoc->HasSparkline(ScAddress(3, 6, 0))); // D7
+
+ // Undo
+ m_pDoc->GetUndoManager()->Undo();
+
+ // Check Sparklines
+ CPPUNIT_ASSERT_EQUAL(true, m_pDoc->HasSparkline(ScAddress(0, 6, 0))); // A7
+ CPPUNIT_ASSERT_EQUAL(true, m_pDoc->HasSparkline(ScAddress(1, 6, 0)));
+ CPPUNIT_ASSERT_EQUAL(true, m_pDoc->HasSparkline(ScAddress(2, 6, 0)));
+ CPPUNIT_ASSERT_EQUAL(true, m_pDoc->HasSparkline(ScAddress(3, 6, 0))); // D7
+
+ // Check if the sparkline has the input range set
+ auto const& pSparkline = m_pDoc->GetSparkline(ScAddress(3, 6, 0));
+ ScRangeList rRangeList = pSparkline->getInputRange();
+ CPPUNIT_ASSERT_EQUAL(size_t(1), rRangeList.size());
+ CPPUNIT_ASSERT_EQUAL(ScRange(3, 0, 0, 3, 5, 0), rRangeList[0]);
+
+ // Redo
+ m_pDoc->GetUndoManager()->Redo();
+
+ // Check Sparklines
+ CPPUNIT_ASSERT_EQUAL(false, m_pDoc->HasSparkline(ScAddress(0, 6, 0))); // A7
+ CPPUNIT_ASSERT_EQUAL(false, m_pDoc->HasSparkline(ScAddress(1, 6, 0)));
+ CPPUNIT_ASSERT_EQUAL(false, m_pDoc->HasSparkline(ScAddress(2, 6, 0)));
+ CPPUNIT_ASSERT_EQUAL(false, m_pDoc->HasSparkline(ScAddress(3, 6, 0))); // D7
+
+ m_pDoc->DeleteTab(0);
+}
+
+CPPUNIT_TEST_FIXTURE(SparklineTest, testUndoRedoClearContentForSparkline)
+{
+ m_pDoc->InsertTab(0, "Test");
+
+ auto& rDocFunc = m_xDocShell->GetDocFunc();
+
+ // Try to delete sparkline that doesn't exist - returns false
+ CPPUNIT_ASSERT(!rDocFunc.DeleteSparkline(ScAddress(0, 6, 0)));
+
+ // insert test data - A1:A6
+ insertTestData(*m_pDoc);
+
+ // Sparkline range
+ ScRange aDataRange(0, 0, 0, 3, 5, 0); //A1:D6
+ ScRange aRange(0, 6, 0, 3, 6, 0); // A7:D7
+
+ // Check Sparklines - none should exist
+ {
+ CPPUNIT_ASSERT(!m_pDoc->HasSparkline(ScAddress(0, 6, 0)));
+ CPPUNIT_ASSERT(!m_pDoc->HasSparkline(ScAddress(1, 6, 0)));
+ CPPUNIT_ASSERT(!m_pDoc->HasSparkline(ScAddress(2, 6, 0)));
+ CPPUNIT_ASSERT(!m_pDoc->HasSparkline(ScAddress(3, 6, 0)));
+ }
+
+ auto pSparklineGroup = std::make_shared<sc::SparklineGroup>();
+ CPPUNIT_ASSERT(rDocFunc.InsertSparklines(aDataRange, aRange, pSparklineGroup));
+
+ // Check Sparklines
+ {
+ CPPUNIT_ASSERT(m_pDoc->HasSparkline(ScAddress(0, 6, 0)));
+ CPPUNIT_ASSERT(m_pDoc->HasSparkline(ScAddress(1, 6, 0)));
+ CPPUNIT_ASSERT(m_pDoc->HasSparkline(ScAddress(2, 6, 0)));
+ // D7 exists
+ CPPUNIT_ASSERT(m_pDoc->HasSparkline(ScAddress(3, 6, 0)));
+
+ // Check D7
+ auto pSparkline = m_pDoc->GetSparkline(ScAddress(3, 6, 0));
+ CPPUNIT_ASSERT_EQUAL(SCCOL(3), pSparkline->getColumn());
+ CPPUNIT_ASSERT_EQUAL(SCROW(6), pSparkline->getRow());
+
+ // Check collections
+ auto* pSparklineList = m_pDoc->GetSparklineList(SCTAB(0));
+ auto pSparklineGroups = pSparklineList->getSparklineGroups();
+ CPPUNIT_ASSERT_EQUAL(size_t(1), pSparklineGroups.size());
+
+ auto pSparklines = pSparklineList->getSparklinesFor(pSparklineGroups[0]);
+ CPPUNIT_ASSERT_EQUAL(size_t(4), pSparklines.size());
+ }
+
+ // Clear content of cell D7 - including sparkline
+ {
+ ScMarkData aMark(m_pDoc->GetSheetLimits());
+ aMark.SetMarkArea(ScAddress(3, 6, 0));
+ rDocFunc.DeleteContents(aMark, InsertDeleteFlags::CONTENTS, true, true);
+ }
+
+ // Check Sparklines
+ {
+ CPPUNIT_ASSERT(m_pDoc->HasSparkline(ScAddress(1, 6, 0)));
+ CPPUNIT_ASSERT(m_pDoc->HasSparkline(ScAddress(1, 6, 0)));
+ CPPUNIT_ASSERT(m_pDoc->HasSparkline(ScAddress(2, 6, 0)));
+ // D7 is gone
+ CPPUNIT_ASSERT(!m_pDoc->HasSparkline(ScAddress(3, 6, 0)));
+
+ // Check collections
+ auto* pSparklineList = m_pDoc->GetSparklineList(SCTAB(0));
+ auto pSparklineGroups = pSparklineList->getSparklineGroups();
+ CPPUNIT_ASSERT_EQUAL(size_t(1), pSparklineGroups.size());
+
+ auto pSparklines = pSparklineList->getSparklinesFor(pSparklineGroups[0]);
+ CPPUNIT_ASSERT_EQUAL(size_t(3), pSparklines.size());
+ }
+
+ // Undo
+ m_pDoc->GetUndoManager()->Undo();
+
+ // Check Sparkline
+ {
+ CPPUNIT_ASSERT(m_pDoc->HasSparkline(ScAddress(0, 6, 0)));
+ CPPUNIT_ASSERT(m_pDoc->HasSparkline(ScAddress(1, 6, 0)));
+ CPPUNIT_ASSERT(m_pDoc->HasSparkline(ScAddress(2, 6, 0)));
+ // D7 exists - again
+ CPPUNIT_ASSERT(m_pDoc->HasSparkline(ScAddress(3, 6, 0)));
+
+ // Check D7
+ auto pSparkline = m_pDoc->GetSparkline(ScAddress(3, 6, 0));
+ CPPUNIT_ASSERT_EQUAL(SCCOL(3), pSparkline->getColumn());
+ CPPUNIT_ASSERT_EQUAL(SCROW(6), pSparkline->getRow());
+
+ auto* pSparklineList = m_pDoc->GetSparklineList(SCTAB(0));
+ auto pSparklineGroups = pSparklineList->getSparklineGroups();
+ CPPUNIT_ASSERT_EQUAL(size_t(1), pSparklineGroups.size());
+
+ auto pSparklines = pSparklineList->getSparklinesFor(pSparklineGroups[0]);
+ CPPUNIT_ASSERT_EQUAL(size_t(4), pSparklines.size());
+ }
+
+ // Redo
+ m_pDoc->GetUndoManager()->Redo();
+
+ // Check Sparklines
+ {
+ CPPUNIT_ASSERT(m_pDoc->HasSparkline(ScAddress(1, 6, 0)));
+ CPPUNIT_ASSERT(m_pDoc->HasSparkline(ScAddress(1, 6, 0)));
+ CPPUNIT_ASSERT(m_pDoc->HasSparkline(ScAddress(2, 6, 0)));
+ // D7 is gone - again
+ CPPUNIT_ASSERT(!m_pDoc->HasSparkline(ScAddress(3, 6, 0)));
+
+ // Check collections
+ auto* pSparklineList = m_pDoc->GetSparklineList(SCTAB(0));
+ auto pSparklineGroups = pSparklineList->getSparklineGroups();
+ CPPUNIT_ASSERT_EQUAL(size_t(1), pSparklineGroups.size());
+
+ auto pSparklines = pSparklineList->getSparklinesFor(pSparklineGroups[0]);
+ CPPUNIT_ASSERT_EQUAL(size_t(3), pSparklines.size());
+ }
+ m_pDoc->DeleteTab(0);
+}
+
+CPPUNIT_TEST_FIXTURE(SparklineTest, testUndoRedoEditSparklineGroup)
+{
+ m_pDoc->InsertTab(0, "Test");
+
+ auto& rDocFunc = m_xDocShell->GetDocFunc();
+
+ auto pSparklineGroup = std::make_shared<sc::SparklineGroup>();
+ {
+ sc::SparklineAttributes& rAttibutes = pSparklineGroup->getAttributes();
+ rAttibutes.setType(sc::SparklineType::Column);
+ rAttibutes.setColorSeries(model::ComplexColor::createRGB(COL_YELLOW));
+ rAttibutes.setColorAxis(model::ComplexColor::createRGB(COL_GREEN));
+ }
+
+ m_pDoc->CreateSparkline(ScAddress(0, 6, 0), pSparklineGroup);
+
+ sc::SparklineAttributes aNewAttributes;
+ aNewAttributes.setType(sc::SparklineType::Stacked);
+ aNewAttributes.setColorSeries(model::ComplexColor::createRGB(COL_BLACK));
+ aNewAttributes.setColorAxis(model::ComplexColor::createRGB(COL_BLUE));
+
+ sc::SparklineAttributes aInitialAttibutes(pSparklineGroup->getAttributes());
+
+ CPPUNIT_ASSERT(aNewAttributes != aInitialAttibutes);
+
+ CPPUNIT_ASSERT_EQUAL(true, aInitialAttibutes == pSparklineGroup->getAttributes());
+ CPPUNIT_ASSERT_EQUAL(false, aNewAttributes == pSparklineGroup->getAttributes());
+
+ CPPUNIT_ASSERT_EQUAL(sc::SparklineType::Column, pSparklineGroup->getAttributes().getType());
+ CPPUNIT_ASSERT_EQUAL(COL_YELLOW,
+ pSparklineGroup->getAttributes().getColorSeries().getFinalColor());
+ CPPUNIT_ASSERT_EQUAL(COL_GREEN,
+ pSparklineGroup->getAttributes().getColorAxis().getFinalColor());
+
+ rDocFunc.ChangeSparklineGroupAttributes(pSparklineGroup, aNewAttributes);
+
+ CPPUNIT_ASSERT_EQUAL(false, aInitialAttibutes == pSparklineGroup->getAttributes());
+ CPPUNIT_ASSERT_EQUAL(true, aNewAttributes == pSparklineGroup->getAttributes());
+
+ CPPUNIT_ASSERT_EQUAL(sc::SparklineType::Stacked, pSparklineGroup->getAttributes().getType());
+ CPPUNIT_ASSERT_EQUAL(COL_BLACK,
+ pSparklineGroup->getAttributes().getColorSeries().getFinalColor());
+ CPPUNIT_ASSERT_EQUAL(COL_BLUE, pSparklineGroup->getAttributes().getColorAxis().getFinalColor());
+
+ m_pDoc->GetUndoManager()->Undo();
+
+ CPPUNIT_ASSERT_EQUAL(true, aInitialAttibutes == pSparklineGroup->getAttributes());
+ CPPUNIT_ASSERT_EQUAL(false, aNewAttributes == pSparklineGroup->getAttributes());
+
+ CPPUNIT_ASSERT_EQUAL(sc::SparklineType::Column, pSparklineGroup->getAttributes().getType());
+ CPPUNIT_ASSERT_EQUAL(COL_YELLOW,
+ pSparklineGroup->getAttributes().getColorSeries().getFinalColor());
+ CPPUNIT_ASSERT_EQUAL(COL_GREEN,
+ pSparklineGroup->getAttributes().getColorAxis().getFinalColor());
+
+ m_pDoc->GetUndoManager()->Redo();
+
+ CPPUNIT_ASSERT_EQUAL(false, aInitialAttibutes == pSparklineGroup->getAttributes());
+ CPPUNIT_ASSERT_EQUAL(true, aNewAttributes == pSparklineGroup->getAttributes());
+
+ CPPUNIT_ASSERT_EQUAL(sc::SparklineType::Stacked, pSparklineGroup->getAttributes().getType());
+ CPPUNIT_ASSERT_EQUAL(COL_BLACK,
+ pSparklineGroup->getAttributes().getColorSeries().getFinalColor());
+ CPPUNIT_ASSERT_EQUAL(COL_BLUE, pSparklineGroup->getAttributes().getColorAxis().getFinalColor());
+
+ m_pDoc->DeleteTab(0);
+}
+
+CPPUNIT_TEST_FIXTURE(SparklineTest, testUndoRedoUngroupSparklines)
+{
+ m_pDoc->InsertTab(0, "Test");
+
+ auto& rDocFunc = m_xDocShell->GetDocFunc();
+
+ // insert test data - A1:A6
+ insertTestData(*m_pDoc);
+
+ // Sparkline range
+ ScRange aDataRange(0, 0, 0, 3, 5, 0); //A1:D6
+ ScRange aRange(0, 6, 0, 3, 6, 0); // A7:D7
+
+ auto pSparklineGroup = std::make_shared<sc::SparklineGroup>();
+ CPPUNIT_ASSERT(rDocFunc.InsertSparklines(aDataRange, aRange, pSparklineGroup));
+
+ // Check Sparklines
+ {
+ CPPUNIT_ASSERT_EQUAL(true, m_pDoc->HasSparkline(ScAddress(0, 6, 0))); // A7
+ CPPUNIT_ASSERT_EQUAL(true, m_pDoc->HasSparkline(ScAddress(1, 6, 0)));
+ CPPUNIT_ASSERT_EQUAL(true, m_pDoc->HasSparkline(ScAddress(2, 6, 0)));
+ CPPUNIT_ASSERT_EQUAL(true, m_pDoc->HasSparkline(ScAddress(3, 6, 0))); // D7
+
+ auto pGroup1 = m_pDoc->GetSparkline(ScAddress(0, 6, 0))->getSparklineGroup();
+ auto pGroup2 = m_pDoc->GetSparkline(ScAddress(1, 6, 0))->getSparklineGroup();
+ auto pGroup3 = m_pDoc->GetSparkline(ScAddress(2, 6, 0))->getSparklineGroup();
+ auto pGroup4 = m_pDoc->GetSparkline(ScAddress(3, 6, 0))->getSparklineGroup();
+
+ CPPUNIT_ASSERT_EQUAL(pGroup1, pGroup2);
+ CPPUNIT_ASSERT_EQUAL(pGroup1, pGroup3);
+ CPPUNIT_ASSERT_EQUAL(pGroup1, pGroup4);
+ CPPUNIT_ASSERT_EQUAL(pGroup3, pGroup4);
+ }
+
+ CPPUNIT_ASSERT(rDocFunc.UngroupSparklines(ScRange(2, 6, 0, 3, 6, 0)));
+
+ // Check Sparklines
+ {
+ CPPUNIT_ASSERT_EQUAL(true, m_pDoc->HasSparkline(ScAddress(0, 6, 0))); // A7
+ CPPUNIT_ASSERT_EQUAL(true, m_pDoc->HasSparkline(ScAddress(1, 6, 0)));
+ CPPUNIT_ASSERT_EQUAL(true, m_pDoc->HasSparkline(ScAddress(2, 6, 0)));
+ CPPUNIT_ASSERT_EQUAL(true, m_pDoc->HasSparkline(ScAddress(3, 6, 0))); // D7
+
+ auto pGroup1 = m_pDoc->GetSparkline(ScAddress(0, 6, 0))->getSparklineGroup();
+ auto pGroup2 = m_pDoc->GetSparkline(ScAddress(1, 6, 0))->getSparklineGroup();
+ auto pGroup3 = m_pDoc->GetSparkline(ScAddress(2, 6, 0))->getSparklineGroup();
+ auto pGroup4 = m_pDoc->GetSparkline(ScAddress(3, 6, 0))->getSparklineGroup();
+
+ CPPUNIT_ASSERT_EQUAL(pGroup1, pGroup2);
+ CPPUNIT_ASSERT(pGroup1 != pGroup3);
+ CPPUNIT_ASSERT(pGroup1 != pGroup4);
+ CPPUNIT_ASSERT(pGroup3 != pGroup4);
+ }
+
+ // Undo
+ m_pDoc->GetUndoManager()->Undo();
+
+ // Check Sparklines
+ {
+ CPPUNIT_ASSERT_EQUAL(true, m_pDoc->HasSparkline(ScAddress(0, 6, 0))); // A7
+ CPPUNIT_ASSERT_EQUAL(true, m_pDoc->HasSparkline(ScAddress(1, 6, 0)));
+ CPPUNIT_ASSERT_EQUAL(true, m_pDoc->HasSparkline(ScAddress(2, 6, 0)));
+ CPPUNIT_ASSERT_EQUAL(true, m_pDoc->HasSparkline(ScAddress(3, 6, 0))); // D7
+
+ auto pGroup1 = m_pDoc->GetSparkline(ScAddress(0, 6, 0))->getSparklineGroup();
+ auto pGroup2 = m_pDoc->GetSparkline(ScAddress(1, 6, 0))->getSparklineGroup();
+ auto pGroup3 = m_pDoc->GetSparkline(ScAddress(2, 6, 0))->getSparklineGroup();
+ auto pGroup4 = m_pDoc->GetSparkline(ScAddress(3, 6, 0))->getSparklineGroup();
+
+ CPPUNIT_ASSERT_EQUAL(pGroup1, pGroup2);
+ CPPUNIT_ASSERT_EQUAL(pGroup1, pGroup3);
+ CPPUNIT_ASSERT_EQUAL(pGroup1, pGroup4);
+ CPPUNIT_ASSERT_EQUAL(pGroup3, pGroup4);
+ }
+
+ // Redo
+ m_pDoc->GetUndoManager()->Redo();
+
+ // Check Sparklines
+ {
+ CPPUNIT_ASSERT_EQUAL(true, m_pDoc->HasSparkline(ScAddress(0, 6, 0))); // A7
+ CPPUNIT_ASSERT_EQUAL(true, m_pDoc->HasSparkline(ScAddress(1, 6, 0)));
+ CPPUNIT_ASSERT_EQUAL(true, m_pDoc->HasSparkline(ScAddress(2, 6, 0)));
+ CPPUNIT_ASSERT_EQUAL(true, m_pDoc->HasSparkline(ScAddress(3, 6, 0))); // D7
+
+ auto pGroup1 = m_pDoc->GetSparkline(ScAddress(0, 6, 0))->getSparklineGroup();
+ auto pGroup2 = m_pDoc->GetSparkline(ScAddress(1, 6, 0))->getSparklineGroup();
+ auto pGroup3 = m_pDoc->GetSparkline(ScAddress(2, 6, 0))->getSparklineGroup();
+ auto pGroup4 = m_pDoc->GetSparkline(ScAddress(3, 6, 0))->getSparklineGroup();
+
+ CPPUNIT_ASSERT_EQUAL(pGroup1, pGroup2);
+ CPPUNIT_ASSERT(pGroup1 != pGroup3);
+ CPPUNIT_ASSERT(pGroup1 != pGroup4);
+ CPPUNIT_ASSERT(pGroup3 != pGroup4);
+ }
+ m_pDoc->DeleteTab(0);
+}
+
+CPPUNIT_TEST_FIXTURE(SparklineTest, testUndoRedoGroupSparklines)
+{
+ m_pDoc->InsertTab(0, "Test");
+
+ auto& rDocFunc = m_xDocShell->GetDocFunc();
+
+ // insert test data - A1:A6
+ insertTestData(*m_pDoc);
+
+ // Sparkline range
+ ScRange aDataRange(0, 0, 0, 3, 5, 0); //A1:D6
+ ScRange aRange(0, 6, 0, 3, 6, 0); // A7:D7
+
+ auto pSparklineGroup = std::make_shared<sc::SparklineGroup>();
+ CPPUNIT_ASSERT(rDocFunc.InsertSparklines(aDataRange, aRange, pSparklineGroup));
+
+ // Check Sparklines
+ {
+ CPPUNIT_ASSERT_EQUAL(true, m_pDoc->HasSparkline(ScAddress(0, 6, 0))); // A7
+ CPPUNIT_ASSERT_EQUAL(true, m_pDoc->HasSparkline(ScAddress(1, 6, 0)));
+ CPPUNIT_ASSERT_EQUAL(true, m_pDoc->HasSparkline(ScAddress(2, 6, 0)));
+ CPPUNIT_ASSERT_EQUAL(true, m_pDoc->HasSparkline(ScAddress(3, 6, 0))); // D7
+
+ auto pGroup1 = m_pDoc->GetSparkline(ScAddress(0, 6, 0))->getSparklineGroup();
+ auto pGroup2 = m_pDoc->GetSparkline(ScAddress(1, 6, 0))->getSparklineGroup();
+ auto pGroup3 = m_pDoc->GetSparkline(ScAddress(2, 6, 0))->getSparklineGroup();
+ auto pGroup4 = m_pDoc->GetSparkline(ScAddress(3, 6, 0))->getSparklineGroup();
+
+ CPPUNIT_ASSERT_EQUAL(pGroup1, pGroup2);
+ CPPUNIT_ASSERT_EQUAL(pGroup1, pGroup3);
+ CPPUNIT_ASSERT_EQUAL(pGroup1, pGroup4);
+ CPPUNIT_ASSERT_EQUAL(pGroup3, pGroup4);
+ }
+
+ CPPUNIT_ASSERT(rDocFunc.UngroupSparklines(ScRange(2, 6, 0, 3, 6, 0)));
+
+ // Check Sparklines
+ {
+ CPPUNIT_ASSERT_EQUAL(true, m_pDoc->HasSparkline(ScAddress(0, 6, 0))); // A7
+ CPPUNIT_ASSERT_EQUAL(true, m_pDoc->HasSparkline(ScAddress(1, 6, 0)));
+ CPPUNIT_ASSERT_EQUAL(true, m_pDoc->HasSparkline(ScAddress(2, 6, 0)));
+ CPPUNIT_ASSERT_EQUAL(true, m_pDoc->HasSparkline(ScAddress(3, 6, 0))); // D7
+
+ auto pGroup1 = m_pDoc->GetSparkline(ScAddress(0, 6, 0))->getSparklineGroup();
+ auto pGroup2 = m_pDoc->GetSparkline(ScAddress(1, 6, 0))->getSparklineGroup();
+ auto pGroup3 = m_pDoc->GetSparkline(ScAddress(2, 6, 0))->getSparklineGroup();
+ auto pGroup4 = m_pDoc->GetSparkline(ScAddress(3, 6, 0))->getSparklineGroup();
+
+ CPPUNIT_ASSERT_EQUAL(pGroup1, pGroup2);
+ CPPUNIT_ASSERT(pGroup1 != pGroup3);
+ CPPUNIT_ASSERT(pGroup1 != pGroup4);
+ CPPUNIT_ASSERT(pGroup3 != pGroup4);
+ }
+
+ {
+ auto pGroup = m_pDoc->GetSparkline(ScAddress(3, 6, 0))->getSparklineGroup();
+ CPPUNIT_ASSERT(rDocFunc.GroupSparklines(ScRange(1, 6, 0, 3, 6, 0), pGroup));
+ }
+
+ // Check Sparklines
+ {
+ CPPUNIT_ASSERT_EQUAL(true, m_pDoc->HasSparkline(ScAddress(0, 6, 0))); // A7
+ CPPUNIT_ASSERT_EQUAL(true, m_pDoc->HasSparkline(ScAddress(1, 6, 0)));
+ CPPUNIT_ASSERT_EQUAL(true, m_pDoc->HasSparkline(ScAddress(2, 6, 0)));
+ CPPUNIT_ASSERT_EQUAL(true, m_pDoc->HasSparkline(ScAddress(3, 6, 0))); // D7
+
+ auto pGroup1 = m_pDoc->GetSparkline(ScAddress(0, 6, 0))->getSparklineGroup();
+ auto pGroup2 = m_pDoc->GetSparkline(ScAddress(1, 6, 0))->getSparklineGroup();
+ auto pGroup3 = m_pDoc->GetSparkline(ScAddress(2, 6, 0))->getSparklineGroup();
+ auto pGroup4 = m_pDoc->GetSparkline(ScAddress(3, 6, 0))->getSparklineGroup();
+
+ CPPUNIT_ASSERT(pGroup1 != pGroup2);
+ CPPUNIT_ASSERT(pGroup1 != pGroup3);
+ CPPUNIT_ASSERT(pGroup1 != pGroup4);
+ CPPUNIT_ASSERT_EQUAL(pGroup2, pGroup3);
+ CPPUNIT_ASSERT_EQUAL(pGroup2, pGroup4);
+ CPPUNIT_ASSERT_EQUAL(pGroup3, pGroup4);
+ }
+
+ // Undo
+ m_pDoc->GetUndoManager()->Undo();
+
+ // Check Sparklines
+ {
+ CPPUNIT_ASSERT_EQUAL(true, m_pDoc->HasSparkline(ScAddress(0, 6, 0))); // A7
+ CPPUNIT_ASSERT_EQUAL(true, m_pDoc->HasSparkline(ScAddress(1, 6, 0)));
+ CPPUNIT_ASSERT_EQUAL(true, m_pDoc->HasSparkline(ScAddress(2, 6, 0)));
+ CPPUNIT_ASSERT_EQUAL(true, m_pDoc->HasSparkline(ScAddress(3, 6, 0))); // D7
+
+ auto pGroup1 = m_pDoc->GetSparkline(ScAddress(0, 6, 0))->getSparklineGroup();
+ auto pGroup2 = m_pDoc->GetSparkline(ScAddress(1, 6, 0))->getSparklineGroup();
+ auto pGroup3 = m_pDoc->GetSparkline(ScAddress(2, 6, 0))->getSparklineGroup();
+ auto pGroup4 = m_pDoc->GetSparkline(ScAddress(3, 6, 0))->getSparklineGroup();
+
+ CPPUNIT_ASSERT_EQUAL(pGroup1, pGroup2);
+ CPPUNIT_ASSERT(pGroup1 != pGroup3);
+ CPPUNIT_ASSERT(pGroup1 != pGroup4);
+ CPPUNIT_ASSERT(pGroup3 != pGroup4);
+ }
+
+ // Redo
+ m_pDoc->GetUndoManager()->Redo();
+
+ // Check Sparklines
+ {
+ CPPUNIT_ASSERT_EQUAL(true, m_pDoc->HasSparkline(ScAddress(0, 6, 0))); // A7
+ CPPUNIT_ASSERT_EQUAL(true, m_pDoc->HasSparkline(ScAddress(1, 6, 0)));
+ CPPUNIT_ASSERT_EQUAL(true, m_pDoc->HasSparkline(ScAddress(2, 6, 0)));
+ CPPUNIT_ASSERT_EQUAL(true, m_pDoc->HasSparkline(ScAddress(3, 6, 0))); // D7
+
+ auto pGroup1 = m_pDoc->GetSparkline(ScAddress(0, 6, 0))->getSparklineGroup();
+ auto pGroup2 = m_pDoc->GetSparkline(ScAddress(1, 6, 0))->getSparklineGroup();
+ auto pGroup3 = m_pDoc->GetSparkline(ScAddress(2, 6, 0))->getSparklineGroup();
+ auto pGroup4 = m_pDoc->GetSparkline(ScAddress(3, 6, 0))->getSparklineGroup();
+
+ CPPUNIT_ASSERT(pGroup1 != pGroup2);
+ CPPUNIT_ASSERT(pGroup1 != pGroup3);
+ CPPUNIT_ASSERT(pGroup1 != pGroup4);
+ CPPUNIT_ASSERT_EQUAL(pGroup2, pGroup3);
+ CPPUNIT_ASSERT_EQUAL(pGroup2, pGroup4);
+ CPPUNIT_ASSERT_EQUAL(pGroup3, pGroup4);
+ }
+ m_pDoc->DeleteTab(0);
+}
+
+CPPUNIT_TEST_FIXTURE(SparklineTest, testUndoRedoEditSparkline)
+{
+ m_pDoc->InsertTab(0, "Test");
+
+ auto& rDocFunc = m_xDocShell->GetDocFunc();
+
+ // Try to delete sparkline that doesn't exist - returns false
+ CPPUNIT_ASSERT(!rDocFunc.DeleteSparkline(ScAddress(0, 6, 0)));
+
+ // insert test data - A1:A6
+ insertTestData(*m_pDoc);
+
+ // Sparkline range
+ ScAddress aAddress(0, 6, 0);
+ ScRange aRange(aAddress);
+
+ // Check Sparkline at cell A7 doesn't exists
+ auto pSparkline = m_pDoc->GetSparkline(aAddress);
+ CPPUNIT_ASSERT(!pSparkline);
+
+ auto pSparklineGroup = std::make_shared<sc::SparklineGroup>();
+ CPPUNIT_ASSERT(rDocFunc.InsertSparklines(ScRange(0, 0, 0, 0, 5, 0), aRange, pSparklineGroup));
+
+ // Check Sparkline at cell A7
+ pSparkline = m_pDoc->GetSparkline(aAddress);
+ CPPUNIT_ASSERT(pSparkline);
+ CPPUNIT_ASSERT_EQUAL(size_t(1), pSparkline->getInputRange().size());
+ CPPUNIT_ASSERT_EQUAL(ScRange(0, 0, 0, 0, 5, 0), pSparkline->getInputRange()[0]);
+
+ // Change Sparkline
+ CPPUNIT_ASSERT(
+ rDocFunc.ChangeSparkline(pSparkline, SCTAB(0), ScRangeList(ScRange(0, 1, 0, 0, 4, 0))));
+
+ pSparkline = m_pDoc->GetSparkline(aAddress);
+ CPPUNIT_ASSERT(pSparkline);
+ CPPUNIT_ASSERT_EQUAL(size_t(1), pSparkline->getInputRange().size());
+ CPPUNIT_ASSERT_EQUAL(ScRange(0, 1, 0, 0, 4, 0), pSparkline->getInputRange()[0]);
+
+ // Undo
+ m_pDoc->GetUndoManager()->Undo();
+
+ pSparkline = m_pDoc->GetSparkline(aAddress);
+ CPPUNIT_ASSERT(pSparkline);
+ CPPUNIT_ASSERT_EQUAL(size_t(1), pSparkline->getInputRange().size());
+ CPPUNIT_ASSERT_EQUAL(ScRange(0, 0, 0, 0, 5, 0), pSparkline->getInputRange()[0]);
+
+ // Redo
+ m_pDoc->GetUndoManager()->Redo();
+
+ pSparkline = m_pDoc->GetSparkline(aAddress);
+ CPPUNIT_ASSERT(pSparkline);
+ CPPUNIT_ASSERT_EQUAL(size_t(1), pSparkline->getInputRange().size());
+ CPPUNIT_ASSERT_EQUAL(ScRange(0, 1, 0, 0, 4, 0), pSparkline->getInputRange()[0]);
+
+ m_pDoc->DeleteTab(0);
+}
+
+CPPUNIT_TEST_FIXTURE(SparklineTest, testSparklineList)
+{
+ m_pDoc->InsertTab(0, "Test");
+
+ auto pSparklineGroup = std::make_shared<sc::SparklineGroup>();
+
+ m_pDoc->CreateSparkline(ScAddress(0, 6, 0), pSparklineGroup);
+
+ {
+ auto* pSparklineList = m_pDoc->GetSparklineList(SCTAB(0));
+ auto pSparklineGroups = pSparklineList->getSparklineGroups();
+ CPPUNIT_ASSERT_EQUAL(size_t(1), pSparklineGroups.size());
+
+ auto pSparklines = pSparklineList->getSparklinesFor(pSparklineGroups[0]);
+ CPPUNIT_ASSERT_EQUAL(size_t(1), pSparklines.size());
+ }
+ m_pDoc->CreateSparkline(ScAddress(1, 6, 0), pSparklineGroup);
+ m_pDoc->CreateSparkline(ScAddress(2, 6, 0), pSparklineGroup);
+
+ {
+ auto* pSparklineList = m_pDoc->GetSparklineList(SCTAB(0));
+ auto pSparklineGroups = pSparklineList->getSparklineGroups();
+ CPPUNIT_ASSERT_EQUAL(size_t(1), pSparklineGroups.size());
+
+ auto pSparklines = pSparklineList->getSparklinesFor(pSparklineGroups[0]);
+ CPPUNIT_ASSERT_EQUAL(size_t(3), pSparklines.size());
+ }
+
+ {
+ auto pSparklineGroup2 = std::make_shared<sc::SparklineGroup>();
+ m_pDoc->CreateSparkline(ScAddress(3, 6, 0), pSparklineGroup2);
+
+ auto* pSparklineList = m_pDoc->GetSparklineList(SCTAB(0));
+
+ auto pSparklineGroups = pSparklineList->getSparklineGroups();
+ CPPUNIT_ASSERT_EQUAL(size_t(2), pSparklineGroups.size());
+
+ auto pSparklines2 = pSparklineList->getSparklinesFor(pSparklineGroup2);
+ CPPUNIT_ASSERT_EQUAL(size_t(1), pSparklines2.size());
+ }
+
+ m_pDoc->DeleteSparkline(ScAddress(3, 6, 0));
+
+ {
+ auto* pSparklineList = m_pDoc->GetSparklineList(SCTAB(0));
+
+ auto pSparklineGroups = pSparklineList->getSparklineGroups();
+ CPPUNIT_ASSERT_EQUAL(size_t(1), pSparklineGroups.size());
+
+ auto pSparklines = pSparklineList->getSparklinesFor(pSparklineGroups[0]);
+ CPPUNIT_ASSERT_EQUAL(size_t(3), pSparklines.size());
+ }
+}
+
+CPPUNIT_TEST_FIXTURE(SparklineTest, testSparklineThemeColorChange)
+{
+ m_pDoc->InitDrawLayer();
+ m_pDoc->InsertTab(0, "Test");
+
+ // insert test data - A1:A6
+ insertTestData(*m_pDoc);
+
+ auto& rDocFunc = m_xDocShell->GetDocFunc();
+
+ ScDrawLayer* pDrawLayer = m_pDoc->GetDrawLayer();
+ CPPUNIT_ASSERT(pDrawLayer);
+ auto const& pTheme = pDrawLayer->getTheme();
+ CPPUNIT_ASSERT(pTheme);
+
+ // Sparkline range
+ ScRange aDataRange(0, 0, 0, 3, 5, 0); //A1:D6
+ ScRange aRange(0, 6, 0, 3, 6, 0); // A7:D7
+
+ {
+ auto pSparklineGroup = std::make_shared<sc::SparklineGroup>();
+ sc::SparklineAttributes& rAttibutes = pSparklineGroup->getAttributes();
+
+ model::ComplexColor aSeriesComplexColor;
+ aSeriesComplexColor.setThemeColor(model::ThemeColorType::Accent3);
+ aSeriesComplexColor.setFinalColor(pTheme->getColorSet()->resolveColor(aSeriesComplexColor));
+ rAttibutes.setColorSeries(aSeriesComplexColor);
+
+ model::ComplexColor aAxisComplexColor;
+ aAxisComplexColor.setThemeColor(model::ThemeColorType::Accent1);
+ aAxisComplexColor.setFinalColor(pTheme->getColorSet()->resolveColor(aAxisComplexColor));
+ rAttibutes.setColorAxis(aAxisComplexColor);
+
+ CPPUNIT_ASSERT(rDocFunc.InsertSparklines(aDataRange, aRange, pSparklineGroup));
+ }
+
+ {
+ CPPUNIT_ASSERT_EQUAL(true, m_pDoc->HasSparkline(ScAddress(0, 6, 0))); // A7
+ auto pGroup = m_pDoc->GetSparkline(ScAddress(0, 6, 0))->getSparklineGroup();
+ CPPUNIT_ASSERT(pGroup);
+ sc::SparklineAttributes& rAttibutes = pGroup->getAttributes();
+ CPPUNIT_ASSERT_EQUAL(Color(0xa33e03), rAttibutes.getColorSeries().getFinalColor());
+ CPPUNIT_ASSERT_EQUAL(Color(0x18a303), rAttibutes.getColorAxis().getFinalColor());
+ }
+
+ {
+ auto pColorSet = std::make_shared<model::ColorSet>("TestColorScheme");
+ pColorSet->add(model::ThemeColorType::Dark1, 0x000000);
+ pColorSet->add(model::ThemeColorType::Light1, 0x111111);
+ pColorSet->add(model::ThemeColorType::Dark2, 0x222222);
+ pColorSet->add(model::ThemeColorType::Light2, 0x333333);
+ pColorSet->add(model::ThemeColorType::Accent1, 0x444444);
+ pColorSet->add(model::ThemeColorType::Accent2, 0x555555);
+ pColorSet->add(model::ThemeColorType::Accent3, 0x666666);
+ pColorSet->add(model::ThemeColorType::Accent4, 0x777777);
+ pColorSet->add(model::ThemeColorType::Accent5, 0x888888);
+ pColorSet->add(model::ThemeColorType::Accent6, 0x999999);
+ pColorSet->add(model::ThemeColorType::Hyperlink, 0xaaaaaa);
+ pColorSet->add(model::ThemeColorType::FollowedHyperlink, 0xbbbbbb);
+
+ sc::ThemeColorChanger aChanger(*m_xDocShell);
+ aChanger.apply(pColorSet);
+ }
+
+ {
+ CPPUNIT_ASSERT_EQUAL(true, m_pDoc->HasSparkline(ScAddress(0, 6, 0))); // A7
+ auto pGroup = m_pDoc->GetSparkline(ScAddress(0, 6, 0))->getSparklineGroup();
+ CPPUNIT_ASSERT(pGroup);
+ sc::SparklineAttributes& rAttibutes = pGroup->getAttributes();
+ CPPUNIT_ASSERT_EQUAL(Color(0x666666), rAttibutes.getColorSeries().getFinalColor());
+ CPPUNIT_ASSERT_EQUAL(Color(0x444444), rAttibutes.getColorAxis().getFinalColor());
+ }
+
+ m_pDoc->GetUndoManager()->Undo();
+
+ {
+ CPPUNIT_ASSERT_EQUAL(true, m_pDoc->HasSparkline(ScAddress(0, 6, 0))); // A7
+ auto pGroup = m_pDoc->GetSparkline(ScAddress(0, 6, 0))->getSparklineGroup();
+ CPPUNIT_ASSERT(pGroup);
+ sc::SparklineAttributes& rAttibutes = pGroup->getAttributes();
+ CPPUNIT_ASSERT_EQUAL(Color(0xa33e03), rAttibutes.getColorSeries().getFinalColor());
+ CPPUNIT_ASSERT_EQUAL(Color(0x18a303), rAttibutes.getColorAxis().getFinalColor());
+ }
+}
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */