diff options
author | Tomaž Vajngerl <tomaz.vajngerl@collabora.co.uk> | 2022-03-19 12:52:21 +0900 |
---|---|---|
committer | Tomaž Vajngerl <quikee@gmail.com> | 2022-04-12 01:23:55 +0200 |
commit | 7edd5f552c76bbe05c196cfdcdc5f94292a38a30 (patch) | |
tree | 5335cd6f576b7905032df8044ee5d6c3bfd24daa /sc/qa | |
parent | ff13e71e72271736116632662b63f8f8dd3de54a (diff) |
sc: add support for copy/cut and paste of Sparklines
Currently cut,copy and paste will copy the Sparkline and create
a new SparklineGroup for each cell in the new cell range. This
probably need to be adjusted so the SparklineGroup is shared.
Change-Id: I6f86bb026753b2b4b5bfa46aca4ca9794721f311
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132473
Tested-by: Tomaž Vajngerl <quikee@gmail.com>
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
(cherry picked from commit b8cf500ed8ac7bd01a351e2815ce8251e506d79c)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132828
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Diffstat (limited to 'sc/qa')
-rw-r--r-- | sc/qa/unit/SparklineTest.cxx | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/sc/qa/unit/SparklineTest.cxx b/sc/qa/unit/SparklineTest.cxx index 2a2dfde71b5b..167c4e4d9e3d 100644 --- a/sc/qa/unit/SparklineTest.cxx +++ b/sc/qa/unit/SparklineTest.cxx @@ -9,6 +9,8 @@ #include "helper/qahelper.hxx" #include <docsh.hxx> +#include <tabvwsh.hxx> +#include <cliputil.hxx> #include <Sparkline.hxx> #include <SparklineGroup.hxx> @@ -46,10 +48,14 @@ public: void testAddSparkline(); void testDeleteSprkline(); + void testCopyPasteSparkline(); + void testCutPasteSparkline(); CPPUNIT_TEST_SUITE(SparklineTest); CPPUNIT_TEST(testAddSparkline); CPPUNIT_TEST(testDeleteSprkline); + CPPUNIT_TEST(testCopyPasteSparkline); + CPPUNIT_TEST(testCutPasteSparkline); CPPUNIT_TEST_SUITE_END(); }; @@ -118,6 +124,110 @@ void SparklineTest::testDeleteSprkline() xDocSh->DoClose(); } +void SparklineTest::testCopyPasteSparkline() +{ + ScDocShellRef xDocSh = loadEmptyDocument(); + CPPUNIT_ASSERT(xDocSh); + + ScDocument& rDocument = xDocSh->GetDocument(); + ScTabViewShell* pViewShell = xDocSh->GetBestViewShell(false); + CPPUNIT_ASSERT(pViewShell); + + auto* pCreatedSparkline = createTestSparkline(rDocument); + CPPUNIT_ASSERT(pCreatedSparkline); + + ScRange aSourceRange(0, 6, 0, 0, 6, 0); + auto pSparkline = rDocument.GetSparkline(aSourceRange.aStart); + + 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(&rDocument, aSourceRange, &aClipDoc); + + auto pClipSparkline = aClipDoc.GetSparkline(aSourceRange.aStart); + CPPUNIT_ASSERT(pClipSparkline); + + ScRange aPasteRange(0, 7, 0, 0, 7, 0); + + ScMarkData aMark(rDocument.GetSheetLimits()); + aMark.SetMarkArea(aPasteRange); + rDocument.CopyFromClip(aPasteRange, aMark, InsertDeleteFlags::ALL, nullptr, &aClipDoc); + + auto pSparklineCopy = rDocument.GetSparkline(aPasteRange.aStart); + CPPUNIT_ASSERT(pSparklineCopy); + + CPPUNIT_ASSERT_EQUAL(SCCOL(0), pSparklineCopy->getColumn()); + CPPUNIT_ASSERT_EQUAL(SCROW(7), pSparklineCopy->getRow()); + } + + // Copy / Paste with a ClipDoc + { + pViewShell->GetViewData().GetMarkData().SetMarkArea(aSourceRange); + + // Copy + ScDocument aClipDoc(SCDOCMODE_CLIP); + pViewShell->GetViewData().GetView()->CopyToClip(&aClipDoc, false, false, false, false); + + // Paste + ScRange aPasteRange(0, 8, 0, 0, 8, 0); + + pViewShell->GetViewData().GetMarkData().SetMarkArea(aPasteRange); + pViewShell->GetViewData().GetView()->PasteFromClip(InsertDeleteFlags::ALL, &aClipDoc); + + auto pSparklineCopy = rDocument.GetSparkline(aPasteRange.aStart); + CPPUNIT_ASSERT(pSparklineCopy); + + CPPUNIT_ASSERT_EQUAL(SCCOL(0), pSparklineCopy->getColumn()); + CPPUNIT_ASSERT_EQUAL(SCROW(8), pSparklineCopy->getRow()); + } + + xDocSh->DoClose(); +} + +void SparklineTest::testCutPasteSparkline() +{ + ScDocShellRef xDocSh = loadEmptyDocument(); + CPPUNIT_ASSERT(xDocSh); + + ScDocument& rDocument = xDocSh->GetDocument(); + ScTabViewShell* pViewShell = xDocSh->GetBestViewShell(false); + CPPUNIT_ASSERT(pViewShell); + + auto* pCreatedSparkline = createTestSparkline(rDocument); + CPPUNIT_ASSERT(pCreatedSparkline); + + ScRange aSourceRange(0, 6, 0, 0, 6, 0); + auto pSparkline = rDocument.GetSparkline(aSourceRange.aStart); + + CPPUNIT_ASSERT(pSparkline); + CPPUNIT_ASSERT_EQUAL(SCCOL(0), pSparkline->getColumn()); + CPPUNIT_ASSERT_EQUAL(SCROW(6), pSparkline->getRow()); + + // Mark source range + pViewShell->GetViewData().GetMarkData().SetMarkArea(aSourceRange); + + // Cut + pViewShell->GetViewData().GetView()->CopyToClip(nullptr, true /*bCut*/, false, false, true); + + // Paste + ScRange aPasteRange(0, 7, 0, 0, 7, 0); + pViewShell->GetViewData().GetMarkData().SetMarkArea(aPasteRange); + ScClipUtil::PasteFromClipboard(pViewShell->GetViewData(), pViewShell, false); + + // Check + auto pSparklineCopy = rDocument.GetSparkline(aPasteRange.aStart); + CPPUNIT_ASSERT(pSparklineCopy); + + CPPUNIT_ASSERT_EQUAL(SCCOL(0), pSparklineCopy->getColumn()); + CPPUNIT_ASSERT_EQUAL(SCROW(7), pSparklineCopy->getRow()); + + xDocSh->DoClose(); +} + CPPUNIT_TEST_SUITE_REGISTRATION(SparklineTest); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |