summaryrefslogtreecommitdiffstats
path: root/sc/qa/unit/rangelst_test.cxx
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 16:51:28 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 16:51:28 +0000
commit940b4d1848e8c70ab7642901a68594e8016caffc (patch)
treeeb72f344ee6c3d9b80a7ecc079ea79e9fba8676d /sc/qa/unit/rangelst_test.cxx
parentInitial commit. (diff)
downloadlibreoffice-upstream.tar.xz
libreoffice-upstream.zip
Adding upstream version 1:7.0.4.upstream/1%7.0.4upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'sc/qa/unit/rangelst_test.cxx')
-rw-r--r--sc/qa/unit/rangelst_test.cxx572
1 files changed, 572 insertions, 0 deletions
diff --git a/sc/qa/unit/rangelst_test.cxx b/sc/qa/unit/rangelst_test.cxx
new file mode 100644
index 000000000..e0f8bbefb
--- /dev/null
+++ b/sc/qa/unit/rangelst_test.cxx
@@ -0,0 +1,572 @@
+/* -*- 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 <sal/config.h>
+#include <test/bootstrapfixture.hxx>
+#include <docsh.hxx>
+#include <scdll.hxx>
+
+#include <rangelst.hxx>
+
+class Test : public test::BootstrapFixture
+{
+public:
+ Test()
+ : m_pDoc(nullptr)
+ {
+ }
+
+ virtual void setUp() override;
+ virtual void tearDown() override;
+
+ void testDeleteArea_4Ranges();
+ void testDeleteArea_3Ranges();
+ void testDeleteArea_3Ranges_Case2();
+ void testDeleteArea_3Ranges_Case3();
+ void testDeleteArea_3Ranges_Case4();
+ void testDeleteArea_3Ranges_Case5();
+ void testDeleteArea_2Ranges();
+ void testDeleteArea_2Ranges_Case2();
+ void testDeleteArea_2Ranges_Case3();
+ void testDeleteArea_2Ranges_Case4();
+ void testDeleteArea_2Ranges_Case5();
+ void testDeleteArea_2Ranges_Case6();
+ void testDeleteArea_2Ranges_Case7();
+ void testDeleteArea_2Ranges_Case8();
+ void testDeleteArea_1Range();
+ void testDeleteArea_0Ranges();
+ void testJoin_Case1();
+ void testJoin_Case2();
+ void testJoin_Case3();
+ void testJoin_Case4();
+ void testJoin_Case5();
+ void testGetIntersectedRange();
+
+ void testUpdateReference_DeleteRow();
+ void testUpdateReference_DeleteLastRow();
+ void testUpdateReference_DeleteCol();
+
+ void testInsertRow();
+ void testInsertCol();
+
+ CPPUNIT_TEST_SUITE(Test);
+ CPPUNIT_TEST(testDeleteArea_4Ranges);
+ CPPUNIT_TEST(testDeleteArea_3Ranges);
+ CPPUNIT_TEST(testDeleteArea_3Ranges_Case2);
+ CPPUNIT_TEST(testDeleteArea_3Ranges_Case3);
+ CPPUNIT_TEST(testDeleteArea_3Ranges_Case4);
+ CPPUNIT_TEST(testDeleteArea_3Ranges_Case5);
+ CPPUNIT_TEST(testDeleteArea_2Ranges);
+ CPPUNIT_TEST(testDeleteArea_2Ranges_Case2);
+ CPPUNIT_TEST(testDeleteArea_2Ranges_Case3);
+ CPPUNIT_TEST(testDeleteArea_2Ranges_Case4);
+ CPPUNIT_TEST(testDeleteArea_2Ranges_Case5);
+ CPPUNIT_TEST(testDeleteArea_2Ranges_Case6);
+ CPPUNIT_TEST(testDeleteArea_2Ranges_Case7);
+ CPPUNIT_TEST(testDeleteArea_2Ranges_Case8);
+ CPPUNIT_TEST(testDeleteArea_1Range);
+ CPPUNIT_TEST(testDeleteArea_0Ranges);
+ CPPUNIT_TEST(testJoin_Case1);
+ CPPUNIT_TEST(testJoin_Case2);
+ CPPUNIT_TEST(testJoin_Case3);
+ CPPUNIT_TEST(testJoin_Case4);
+ CPPUNIT_TEST(testJoin_Case5);
+ CPPUNIT_TEST(testUpdateReference_DeleteRow);
+ CPPUNIT_TEST(testUpdateReference_DeleteLastRow);
+ CPPUNIT_TEST(testUpdateReference_DeleteCol);
+ CPPUNIT_TEST(testGetIntersectedRange);
+ CPPUNIT_TEST(testInsertRow);
+ CPPUNIT_TEST(testInsertCol);
+ CPPUNIT_TEST_SUITE_END();
+
+private:
+ ScDocument *m_pDoc;
+ ScDocShellRef m_xDocShRef;
+};
+
+void Test::setUp()
+{
+ BootstrapFixture::setUp();
+
+ ScDLL::Init();
+ m_xDocShRef = new ScDocShell(
+ SfxModelFlags::EMBEDDED_OBJECT |
+ SfxModelFlags::DISABLE_EMBEDDED_SCRIPTS |
+ SfxModelFlags::DISABLE_DOCUMENT_RECOVERY);
+
+ m_pDoc = &m_xDocShRef->GetDocument();
+}
+
+void Test::tearDown()
+{
+ m_xDocShRef.clear();
+ BootstrapFixture::tearDown();
+}
+
+void Test::testDeleteArea_4Ranges()
+{
+ ScRangeList aList(ScRange(0,0,0,5,5,0));
+ aList.DeleteArea(2,2,0,3,3,0);
+
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(4), aList.size());
+ for(SCCOL nCol = 0; nCol <= 5; ++nCol)
+ {
+ for(SCROW nRow = 0; nRow <= 5; ++nRow)
+ {
+ if((nCol == 2 || nCol == 3) && ( nRow == 2 || nRow == 3))
+ CPPUNIT_ASSERT(!aList.In(ScRange(nCol, nRow, 0)));
+ else
+ CPPUNIT_ASSERT(aList.In(ScRange(nCol, nRow, 0)));
+ }
+ }
+}
+
+void Test::testDeleteArea_3Ranges()
+{
+ ScRangeList aList(ScRange(1,1,0,6,6,0));
+ aList.DeleteArea(3,3,0,8,4,0);
+
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(3), aList.size());
+ for(SCCOL nCol = 1; nCol <= 6; ++nCol)
+ {
+ for(SCROW nRow = 1; nRow <= 6; ++nRow)
+ {
+ if((nRow == 3 || nRow == 4) && (nCol >= 3))
+ CPPUNIT_ASSERT(!aList.In(ScRange(nCol, nRow, 0)));
+ else
+ CPPUNIT_ASSERT(aList.In(ScRange(nCol, nRow, 0)));
+ }
+ }
+
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(28), aList.GetCellCount());
+}
+
+void Test::testDeleteArea_3Ranges_Case2()
+{
+ ScRangeList aList(ScRange(1,1,0,6,6,0));
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), aList.size());
+ aList.DeleteArea(0,2,0,2,4,0);
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(3), aList.size());
+
+ // Column 1-2 && Row 2-4 should not be in the range list. The rest should
+ // be in the list.
+ for (SCCOL nCol = 1; nCol <= 6; ++nCol)
+ {
+ for (SCROW nRow = 1; nRow <= 6; ++nRow)
+ {
+ if ((1 <= nCol && nCol <= 2) && (2 <= nRow && nRow <= 4))
+ CPPUNIT_ASSERT(!aList.In(ScRange(nCol, nRow, 0)));
+ else
+ CPPUNIT_ASSERT(aList.In(ScRange(nCol, nRow, 0)));
+ }
+ }
+}
+
+void Test::testDeleteArea_3Ranges_Case3()
+{
+ ScRangeList aList(ScRange(1,5,0,6,11,0));
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), aList.size());
+ aList.DeleteArea(3,2,0,4,8,0);
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(3), aList.size());
+
+ // Column 3-4 && Row 5-8 should not be in the range list.
+ for (SCCOL nCol = 1; nCol <= 6; ++nCol)
+ {
+ for (SCROW nRow = 5; nRow <= 11; ++nRow)
+ {
+ if ((3 <= nCol && nCol <= 4) && (5 <= nRow && nRow <= 8))
+ CPPUNIT_ASSERT(!aList.In(ScRange(nCol, nRow, 0)));
+ else
+ CPPUNIT_ASSERT(aList.In(ScRange(nCol, nRow, 0)));
+ }
+ }
+}
+
+void Test::testDeleteArea_3Ranges_Case4()
+{
+ ScRangeList aList(ScRange(1,5,0,6,11,0));
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), aList.size());
+ aList.DeleteArea(3,5,0,4,5,0);
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(3), aList.size());
+
+ // Column 3-4 && Row 5 should not be in the range list.
+ for (SCCOL nCol = 1; nCol <= 6; ++nCol)
+ {
+ for (SCROW nRow = 5; nRow <= 11; ++nRow)
+ {
+ if ((3 <= nCol && nCol <= 4) && 5 == nRow )
+ CPPUNIT_ASSERT(!aList.In(ScRange(nCol, nRow, 0)));
+ else
+ CPPUNIT_ASSERT(aList.In(ScRange(nCol, nRow, 0)));
+ }
+ }
+}
+
+void Test::testDeleteArea_3Ranges_Case5()
+{
+ ScRangeList aList(ScRange(1,5,0,6,11,0));
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), aList.size());
+ aList.DeleteArea(6,7,0,6,9,0);
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(3), aList.size());
+
+ // Column 6 && Row 7-9 should not be in the range list.
+ for (SCCOL nCol = 1; nCol <= 6; ++nCol)
+ {
+ for (SCROW nRow = 5; nRow <= 11; ++nRow)
+ {
+ if ( nCol == 6 && (7 <= nRow && nRow <= 9))
+ CPPUNIT_ASSERT(!aList.In(ScRange(nCol, nRow, 0)));
+ else
+ CPPUNIT_ASSERT(aList.In(ScRange(nCol, nRow, 0)));
+ }
+ }
+}
+
+void Test::testDeleteArea_2Ranges()
+{
+ ScRangeList aList(ScRange(0,0,0,5,5,5));
+ ScRangeList aList2(aList);
+
+ aList.DeleteArea(4,4,0,6,7,0);
+ aList2.DeleteArea(4,4,0,6,7,0);
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(2), aList.size());
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(2), aList2.size());
+
+ for(SCCOL nCol = 0; nCol <= 5; ++nCol)
+ {
+ for(SCROW nRow = 0; nRow <= 5; ++nRow)
+ {
+ if(nCol>=4 && nRow >= 4)
+ CPPUNIT_ASSERT(!aList.In(ScRange(nCol, nRow, 0)));
+ else
+ CPPUNIT_ASSERT(aList.In(ScRange(nCol, nRow, 0)));
+ }
+ }
+}
+
+void Test::testDeleteArea_2Ranges_Case2()
+{
+ ScRangeList aList(ScRange(1,1,0,1,5,0));
+ aList.DeleteArea(0,3,0,MAXCOL,3,0);
+
+ for(SCROW nRow = 1; nRow <= 5; ++nRow)
+ {
+ if(nRow == 3)
+ CPPUNIT_ASSERT(!aList.In(ScRange(1,3,0)));
+ else
+ CPPUNIT_ASSERT(aList.In(ScRange(1,nRow,0)));
+ }
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(4), aList.GetCellCount());
+}
+
+void Test::testDeleteArea_2Ranges_Case3()
+{
+ ScRangeList aList(ScRange(0,5,0,2,10,0));
+ aList.DeleteArea(2,3,0,3,7,0);
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(2), aList.size());
+
+ // Column 2 Row 5-7 shouldn't be in the list.
+ for (SCCOL nCol = 0; nCol <= 2; ++nCol)
+ {
+ for (SCROW nRow = 5; nRow <= 10; ++nRow)
+ {
+ if (nCol == 2 && (5 <= nRow && nRow <= 7))
+ CPPUNIT_ASSERT(!aList.In(ScRange(nCol,nRow,0)));
+ else
+ CPPUNIT_ASSERT(aList.In(ScRange(nCol,nRow,0)));
+ }
+ }
+}
+
+void Test::testDeleteArea_2Ranges_Case4()
+{
+ ScRangeList aList(ScRange(2,3,0,4,7,0));
+ aList.DeleteArea(0,1,0,2,5,0);
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(2), aList.size());
+
+ // Column 2 Row 3-5 shouldn't be in the list.
+ for (SCCOL nCol = 2; nCol <= 4; ++nCol)
+ {
+ for (SCROW nRow = 3; nRow <= 7; ++nRow)
+ {
+ if (nCol == 2 && (3 <= nRow && nRow <= 5))
+ CPPUNIT_ASSERT(!aList.In(ScRange(nCol,nRow,0)));
+ else
+ CPPUNIT_ASSERT(aList.In(ScRange(nCol,nRow,0)));
+ }
+ }
+}
+
+void Test::testDeleteArea_2Ranges_Case5()
+{
+ ScRangeList aList(ScRange(2,2,0,5,5,0));
+ aList.DeleteArea(4,5,0,5,5,0);
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(2), aList.size());
+
+ // Column 4 and 5 Row 5 shouldn't be in the list.
+ for(SCCOL nCol = 2; nCol <= 5; ++nCol)
+ {
+ for(SCROW nRow = 2; nRow <= 5; ++nRow)
+ {
+ if(nRow == 5 && 4 <= nCol)
+ CPPUNIT_ASSERT(!aList.In(ScRange(nCol, nRow, 0)));
+ else
+ CPPUNIT_ASSERT(aList.In(ScRange(nCol, nRow, 0)));
+ }
+ }
+}
+
+void Test::testDeleteArea_2Ranges_Case6()
+{
+ ScRangeList aList(ScRange(2,2,0,5,5,0));
+ aList.DeleteArea(4,2,0,5,2,0);
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(2), aList.size());
+
+ // Column 4 and 5 Row 2 shouldn't be in the list.
+ for(SCCOL nCol = 2; nCol <= 5; ++nCol)
+ {
+ for(SCROW nRow = 2; nRow <= 5; ++nRow)
+ {
+ if(nRow == 2 && 4 <= nCol)
+ CPPUNIT_ASSERT(!aList.In(ScRange(nCol, nRow, 0)));
+ else
+ CPPUNIT_ASSERT(aList.In(ScRange(nCol, nRow, 0)));
+ }
+ }
+}
+
+void Test::testDeleteArea_2Ranges_Case7()
+{
+ ScRangeList aList(ScRange(2,2,0,5,5,0));
+ aList.DeleteArea(2,5,0,2,5,0);
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(2), aList.size());
+
+ // Column 2 Row 5 shouldn't be in the list.
+ for(SCCOL nCol = 2; nCol <= 5; ++nCol)
+ {
+ for(SCROW nRow = 2; nRow <= 5; ++nRow)
+ {
+ if(nRow == 5 && nCol == 2)
+ CPPUNIT_ASSERT(!aList.In(ScRange(nCol, nRow, 0)));
+ else
+ CPPUNIT_ASSERT(aList.In(ScRange(nCol, nRow, 0)));
+ }
+ }
+}
+
+void Test::testDeleteArea_2Ranges_Case8()
+{
+ ScRangeList aList(ScRange(2,2,0,5,5,0));
+ aList.DeleteArea(2,2,0,3,2,0);
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(2), aList.size());
+
+ // Column 2 & 3 Row 2 shouldn't be in the list.
+ for(SCCOL nCol = 2; nCol <= 5; ++nCol)
+ {
+ for(SCROW nRow = 2; nRow <= 5; ++nRow)
+ {
+ if(nRow == 2 && nCol <= 3)
+ CPPUNIT_ASSERT(!aList.In(ScRange(nCol, nRow, 0)));
+ else
+ CPPUNIT_ASSERT(aList.In(ScRange(nCol, nRow, 0)));
+ }
+ }
+}
+
+void Test::testDeleteArea_1Range()
+{
+ ScRangeList aList(ScRange(1,1,0,3,3,0));
+ aList.DeleteArea(1,1,0,2,3,0);
+
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), aList.size());
+
+ for(SCROW nRow = 1; nRow <= 3; ++nRow)
+ {
+ CPPUNIT_ASSERT(aList.In(ScRange(3,nRow,0)));
+ }
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(3), aList.GetCellCount());
+}
+
+void Test::testDeleteArea_0Ranges()
+{
+ ScRangeList aList(ScRange(1,1,0,3,3,0));
+ aList.DeleteArea(1,1,0,3,3,0);
+
+ CPPUNIT_ASSERT(aList.empty());
+
+ ScRangeList aList2(ScRange(1,1,0,3,3,0));
+ aList2.DeleteArea(0,0,0,4,4,0);
+
+ CPPUNIT_ASSERT(aList.empty());
+}
+
+void Test::testJoin_Case1()
+{
+ ScRangeList aList;
+ aList.push_back(ScRange(1,1,0,3,3,0));
+ aList.Join(ScRange(4,1,0,6,3,0));
+
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), aList.size());
+ CPPUNIT_ASSERT_EQUAL( ScRange(1,1,0,6,3,0), aList[0]);
+}
+
+void Test::testJoin_Case2()
+{
+ ScRangeList aList;
+ aList.push_back(ScRange(1,1,0,3,3,0));
+ aList.push_back(ScRange(4,1,0,6,3,0));
+ aList.push_back(ScRange(7,1,0,9,3,0));
+
+ aList.Join(aList[2], true);
+
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), aList.size());
+ CPPUNIT_ASSERT_EQUAL(ScRange(1,1,0,9,3,0), aList[0]);
+}
+
+void Test::testJoin_Case3()
+{
+ ScRangeList aList;
+ aList.Join(ScRange(1,1,0,6,6,0));
+ aList.Join(ScRange(3,3,0,4,4,0));
+
+ // The second one should have been swallowed by the first one
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), aList.size());
+ CPPUNIT_ASSERT_EQUAL(ScRange(1,1,0,6,6,0), aList[0]);
+
+ // Add a disjoint one
+ aList.Join(ScRange(8,8,0,9,9,0));
+
+ // Should be two ones now
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(2), aList.size());
+ // The first one should still be as is
+ CPPUNIT_ASSERT_EQUAL(ScRange(1,1,0,6,6,0), aList[0]);
+ // Ditto for the second one
+ CPPUNIT_ASSERT_EQUAL(ScRange(8,8,0,9,9,0), aList[1]);
+}
+
+void Test::testJoin_Case4()
+{
+ ScRangeList aList;
+ aList.Join(ScRange(1,1,0,2,6,0));
+ // Join a range that overlaps it and extends it vertically
+ aList.Join(ScRange(1,4,0,2,8,0));
+
+ // The one range in the list should have been extended
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), aList.size());
+ CPPUNIT_ASSERT_EQUAL(ScRange(1,1,0,2,8,0), aList[0]);
+
+ // Join a range that overlaps it and extends it horizontally
+ aList.Join(ScRange(2,1,0,4,8,0));
+
+ // Again, should have just been extended
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), aList.size());
+ CPPUNIT_ASSERT_EQUAL(ScRange(1,1,0,4,8,0), aList[0]);
+
+ // And then the same but on top / to the left of existing range
+ ScRangeList aList2;
+ aList2.Join(ScRange(4,4,0,8,8,0));
+ aList2.Join(ScRange(4,1,0,8,6,0));
+
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), aList2.size());
+ CPPUNIT_ASSERT_EQUAL(ScRange(4,1,0,8,8,0), aList2[0]);
+
+ aList2.Join(ScRange(1,1,0,6,8,0));
+
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), aList2.size());
+ CPPUNIT_ASSERT_EQUAL(ScRange(1,1,0,8,8,0), aList2[0]);
+}
+
+void Test::testJoin_Case5()
+{
+ ScRangeList aList;
+ aList.Join(ScRange(0,0,0,4,4,0));
+ aList.Join(ScRange(8,0,0,10,4,0));
+
+ // Nothing special so far, two disjoint ranges
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(2), aList.size());
+ CPPUNIT_ASSERT_EQUAL(ScRange(0,0,0,4,4,0), aList[0]);
+ CPPUNIT_ASSERT_EQUAL(ScRange(8,0,0,10,4,0), aList[1]);
+
+ // This should join the two ranges into one
+ aList.Join(ScRange(5,0,0,9,4,0));
+
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), aList.size());
+ CPPUNIT_ASSERT_EQUAL(ScRange(0,0,0,10,4,0), aList[0]);
+}
+
+void Test::testUpdateReference_DeleteRow()
+{
+ ScRangeList aList(ScRange(1,1,0,4,4,0));
+ bool bUpdated = aList.UpdateReference(URM_INSDEL, m_pDoc, ScRange(0,3,0,MAXCOL,MAXROW,0), 0, -1, 0);
+ CPPUNIT_ASSERT(bUpdated);
+
+ for(SCCOL nCol = 1; nCol <= 4; ++nCol)
+ {
+ for(SCROW nRow = 1; nRow <= 3; ++nRow)
+ {
+ CPPUNIT_ASSERT(aList.In(ScRange(nCol, nRow, 0)));
+ }
+ CPPUNIT_ASSERT(!aList.In(ScRange(nCol, 4, 0)));
+ }
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(12), aList.GetCellCount());
+
+ ScRangeList aList2(ScRange(2,2,0,2,2,0));
+ aList2.UpdateReference(URM_INSDEL, m_pDoc, ScRange(0,3,0,MAXCOL,MAXROW,0), 0, -1, 0);
+ CPPUNIT_ASSERT(aList2.empty());
+}
+
+void Test::testUpdateReference_DeleteLastRow()
+{
+ ScRangeList aList(ScRange(1,1,0,4,4,0));
+ bool bUpdated = aList.UpdateReference(URM_INSDEL, m_pDoc, ScRange(0,4,0,MAXCOL,4,0), 0, -1, 0);
+ CPPUNIT_ASSERT(bUpdated);
+}
+
+void Test::testUpdateReference_DeleteCol()
+{
+ ScRangeList aList(ScRange(1,1,0,4,4,0));
+ bool bUpdated = aList.UpdateReference(URM_INSDEL, m_pDoc, ScRange(3,0,0,MAXCOL,MAXROW,0), -1, 0, 0);
+ CPPUNIT_ASSERT(bUpdated);
+
+ for(SCROW nRow = 1; nRow <= 4; ++nRow)
+ {
+ for(SCCOL nCol = 1; nCol <= 3; ++nCol)
+ {
+ CPPUNIT_ASSERT(aList.In(ScRange(nCol, nRow, 0)));
+ }
+ CPPUNIT_ASSERT(!aList.In(ScRange(4, nRow, 0)));
+ }
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(12), aList.GetCellCount());
+}
+
+void Test::testGetIntersectedRange()
+{
+ ScRangeList aList(ScRange(2, 2, 0, 5, 5, 0));
+ ScRangeList aIntersecting = aList.GetIntersectedRange(ScRange(0, 0, 0, 3, 3, 0));
+ CPPUNIT_ASSERT_EQUAL(ScRangeList(ScRange(2,2,0,3,3,0)), aIntersecting);
+}
+
+void Test::testInsertRow()
+{
+ ScRangeList aList(ScRange(1,1,0,4,4,0));
+ aList.InsertRow(0, 0, MAXCOL, 5, 2);
+ CPPUNIT_ASSERT_EQUAL(ScRangeList(ScRange(1,1,0,4,6,0)), aList);
+}
+
+void Test::testInsertCol()
+{
+ ScRangeList aList(ScRange(1,1,0,4,4,0));
+ aList.InsertCol(0, 0, MAXROW, 5, 2);
+ CPPUNIT_ASSERT_EQUAL(ScRangeList(ScRange(1,1,0,6,4,0)), aList);
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(Test);
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */