diff options
author | nyamatongwe <unknown> | 2012-09-12 13:44:09 +1000 |
---|---|---|
committer | nyamatongwe <unknown> | 2012-09-12 13:44:09 +1000 |
commit | 103c297abc07dd7071cdba1abff97bef1b36cc9d (patch) | |
tree | 43710cb9de38ecde7ffe2f6db14f55fa0a59f378 | |
parent | 50fd584ed6c1a30769f9aa78a73a20c6b1ce46a2 (diff) | |
download | scintilla-mirror-103c297abc07dd7071cdba1abff97bef1b36cc9d.tar.gz |
Fix bug where removing all characters from indicator at end of document did
not remove that run causing iteration over the indicator to hang.
-rw-r--r-- | src/RunStyles.cxx | 1 | ||||
-rw-r--r-- | test/simpleTests.py | 33 | ||||
-rw-r--r-- | test/unit/testRunStyles.cxx | 31 |
3 files changed, 65 insertions, 0 deletions
diff --git a/src/RunStyles.cxx b/src/RunStyles.cxx index 643d2fb2d..9c4e90a66 100644 --- a/src/RunStyles.cxx +++ b/src/RunStyles.cxx @@ -205,6 +205,7 @@ void RunStyles::DeleteRange(int position, int deleteLength) { if (runStart == runEnd) { // Deleting from inside one run starts->InsertText(runStart, -deleteLength); + RemoveRunIfEmpty(runStart); } else { runStart = SplitRun(position); runEnd = SplitRun(end); diff --git a/test/simpleTests.py b/test/simpleTests.py index 19de59a4e..275409a22 100644 --- a/test/simpleTests.py +++ b/test/simpleTests.py @@ -737,6 +737,39 @@ class TestIndicators(unittest.TestCase): self.assertEquals(self.ed.IndicGetStyle(0), 2) self.assertEquals(self.ed.IndicGetFore(0), 0xff0080) + def testIndicatorFill(self): + self.ed.InsertText(0, b"abc") + self.ed.IndicatorCurrent = 3 + self.ed.IndicatorFillRange(1,1) + self.assertEquals(self.ed.IndicatorValueAt(3, 0), 0) + self.assertEquals(self.ed.IndicatorValueAt(3, 1), 1) + self.assertEquals(self.ed.IndicatorValueAt(3, 2), 0) + self.assertEquals(self.ed.IndicatorStart(3, 0), 0) + self.assertEquals(self.ed.IndicatorEnd(3, 0), 1) + self.assertEquals(self.ed.IndicatorStart(3, 1), 1) + self.assertEquals(self.ed.IndicatorEnd(3, 1), 2) + self.assertEquals(self.ed.IndicatorStart(3, 2), 2) + self.assertEquals(self.ed.IndicatorEnd(3, 2), 3) + + def testIndicatorAtEnd(self): + self.ed.InsertText(0, b"ab") + self.ed.IndicatorCurrent = 3 + self.ed.IndicatorFillRange(1,1) + self.assertEquals(self.ed.IndicatorValueAt(3, 0), 0) + self.assertEquals(self.ed.IndicatorValueAt(3, 1), 1) + self.assertEquals(self.ed.IndicatorStart(3, 0), 0) + self.assertEquals(self.ed.IndicatorEnd(3, 0), 1) + self.assertEquals(self.ed.IndicatorStart(3, 1), 1) + self.assertEquals(self.ed.IndicatorEnd(3, 1), 2) + self.ed.DeleteRange(1, 1) + # Now only one character left and does not have indicator so indicator 3 is null + self.assertEquals(self.ed.IndicatorValueAt(3, 0), 0) + # Since null, remaining calls return 0 + self.assertEquals(self.ed.IndicatorStart(3, 0), 0) + self.assertEquals(self.ed.IndicatorEnd(3, 0), 0) + self.assertEquals(self.ed.IndicatorStart(3, 1), 0) + self.assertEquals(self.ed.IndicatorEnd(3, 1), 0) + class TestScrolling(unittest.TestCase): def setUp(self): diff --git a/test/unit/testRunStyles.cxx b/test/unit/testRunStyles.cxx index 5cf4b7e01..8fec25b56 100644 --- a/test/unit/testRunStyles.cxx +++ b/test/unit/testRunStyles.cxx @@ -281,3 +281,34 @@ TEST_F(RunStylesTest, DeleteAll) { EXPECT_EQ(1, prs->Runs()); } +TEST_F(RunStylesTest, DeleteSecond) { + prs->InsertSpace(0, 3); + int startFill = 1; + int lengthFill = 1; + EXPECT_EQ(true, prs->FillRange(startFill, 99, lengthFill)); + EXPECT_EQ(3, prs->Length()); + EXPECT_EQ(3, prs->Runs()); + prs->DeleteRange(1, 1); + EXPECT_EQ(2, prs->Length()); + EXPECT_EQ(1, prs->Runs()); +} + +TEST_F(RunStylesTest, DeleteEndRun) { + prs->InsertSpace(0, 2); + int startFill = 1; + int lengthFill = 1; + EXPECT_EQ(true, prs->FillRange(startFill, 99, lengthFill)); + EXPECT_EQ(2, prs->Length()); + EXPECT_EQ(2, prs->Runs()); + EXPECT_EQ(0, prs->StartRun(0)); + EXPECT_EQ(1, prs->EndRun(0)); + EXPECT_EQ(1, prs->StartRun(1)); + EXPECT_EQ(2, prs->EndRun(1)); + prs->DeleteRange(1, 1); + EXPECT_EQ(1, prs->Length()); + EXPECT_EQ(1, prs->Runs()); + EXPECT_EQ(0, prs->StartRun(0)); + EXPECT_EQ(1, prs->EndRun(0)); + EXPECT_EQ(0, prs->StartRun(1)); + EXPECT_EQ(1, prs->EndRun(1)); +} |