aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authornyamatongwe <unknown>2012-09-12 13:44:09 +1000
committernyamatongwe <unknown>2012-09-12 13:44:09 +1000
commit103c297abc07dd7071cdba1abff97bef1b36cc9d (patch)
tree43710cb9de38ecde7ffe2f6db14f55fa0a59f378
parent50fd584ed6c1a30769f9aa78a73a20c6b1ce46a2 (diff)
downloadscintilla-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.cxx1
-rw-r--r--test/simpleTests.py33
-rw-r--r--test/unit/testRunStyles.cxx31
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));
+}