sc/qa/unit/mark_test.cxx | 43 +++++++++++++++++++++++++++++++++++++++ sc/source/core/data/markdata.cxx | 27 ++++++++++++++++-------- 2 files changed, 61 insertions(+), 9 deletions(-)
New commits: commit 4a2be39af5697356f2f4c0ae773f4b2530b2d9df Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Fri Apr 15 13:08:49 2016 +0200 add test for tdf#72240 Change-Id: Ia27b84094e21758286422921e2bd017f9874dc06 Reviewed-on: https://gerrit.libreoffice.org/24104 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Markus Mohrhard <markus.mohrh...@googlemail.com> diff --git a/sc/qa/unit/mark_test.cxx b/sc/qa/unit/mark_test.cxx index 41e0903..957d5fe 100644 --- a/sc/qa/unit/mark_test.cxx +++ b/sc/qa/unit/mark_test.cxx @@ -92,12 +92,21 @@ public: void testMultiMark_FourRanges(); void testMultiMark_NegativeMarking(); + void testInsertTabBeforeSelected(); + void testInsertTabAfterSelected(); + void testDeleteTabBeforeSelected(); + void testDeleteTabAfterSelected(); + CPPUNIT_TEST_SUITE(Test); CPPUNIT_TEST(testSimpleMark_Simple); CPPUNIT_TEST(testSimpleMark_Column); CPPUNIT_TEST(testSimpleMark_Row); CPPUNIT_TEST(testMultiMark_FourRanges); CPPUNIT_TEST(testMultiMark_NegativeMarking); + CPPUNIT_TEST(testInsertTabBeforeSelected); + CPPUNIT_TEST(testInsertTabAfterSelected); + CPPUNIT_TEST(testDeleteTabBeforeSelected); + CPPUNIT_TEST(testDeleteTabAfterSelected); CPPUNIT_TEST_SUITE_END(); private: @@ -801,7 +810,41 @@ void Test::testMultiMark_NegativeMarking() testMultiMark( aData ); } +void Test::testInsertTabBeforeSelected() +{ + ScMarkData aMark; + aMark.SelectOneTable(0); + aMark.InsertTab(0); + CPPUNIT_ASSERT_EQUAL(SCTAB(1), aMark.GetSelectCount()); + CPPUNIT_ASSERT_EQUAL(SCTAB(1), aMark.GetFirstSelected()); +} + +void Test::testInsertTabAfterSelected() +{ + ScMarkData aMark; + aMark.SelectOneTable(0); + aMark.InsertTab(1); + CPPUNIT_ASSERT_EQUAL(SCTAB(1), aMark.GetSelectCount()); + CPPUNIT_ASSERT_EQUAL(SCTAB(0), aMark.GetFirstSelected()); +} +void Test::testDeleteTabBeforeSelected() +{ + ScMarkData aMark; + aMark.SelectOneTable(1); + aMark.DeleteTab(0); + CPPUNIT_ASSERT_EQUAL(SCTAB(1), aMark.GetSelectCount()); + CPPUNIT_ASSERT_EQUAL(SCTAB(0), aMark.GetFirstSelected()); +} + +void Test::testDeleteTabAfterSelected() +{ + ScMarkData aMark; + aMark.SelectOneTable(0); + aMark.DeleteTab(1); + CPPUNIT_ASSERT_EQUAL(SCTAB(1), aMark.GetSelectCount()); + CPPUNIT_ASSERT_EQUAL(SCTAB(0), aMark.GetFirstSelected()); +} CPPUNIT_TEST_SUITE_REGISTRATION(Test); commit 67abc250e5f30844797996e09e66e61c2ef214db Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Fri Apr 15 13:07:54 2016 +0200 fix InsertTab and DeleteTab in ScMarkData, tdf#72240 Change-Id: Id3168e4cac6c52b36833b454518cce55b51e36b4 Reviewed-on: https://gerrit.libreoffice.org/24103 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Markus Mohrhard <markus.mohrh...@googlemail.com> diff --git a/sc/source/core/data/markdata.cxx b/sc/source/core/data/markdata.cxx index 154a693..53a5023 100644 --- a/sc/source/core/data/markdata.cxx +++ b/sc/source/core/data/markdata.cxx @@ -512,20 +512,29 @@ bool ScMarkData::HasAnyMultiMarks() const void ScMarkData::InsertTab( SCTAB nTab ) { - std::set<SCTAB> tabMarked(maTabMarked.begin(), maTabMarked.upper_bound(nTab)); - std::set<SCTAB>::iterator it = maTabMarked.upper_bound(nTab); - for (; it != maTabMarked.end(); ++it) - tabMarked.insert(*it + 1); + std::set<SCTAB> tabMarked; + for (auto itr = maTabMarked.begin(), itrEnd = maTabMarked.end(); + itr != itrEnd; ++itr) + { + if (*itr < nTab) + tabMarked.insert(*itr); + else if (*itr >= nTab) + tabMarked.insert(*itr + 1); + } maTabMarked.swap(tabMarked); } void ScMarkData::DeleteTab( SCTAB nTab ) { - std::set<SCTAB> tabMarked(maTabMarked.begin(), maTabMarked.find(nTab)); - tabMarked.erase( nTab ); - std::set<SCTAB>::iterator it = maTabMarked.find(nTab); - for (; it != maTabMarked.end(); ++it) - tabMarked.insert(*it + 1); + std::set<SCTAB> tabMarked; + for (auto itr = maTabMarked.begin(), itrEnd = maTabMarked.end(); + itr != itrEnd; ++itr) + { + if (*itr < nTab) + tabMarked.insert(*itr); + else if (*itr > nTab) + tabMarked.insert(*itr - 1); + } maTabMarked.swap(tabMarked); } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits