aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/simpleTests.py
diff options
context:
space:
mode:
authornyamatongwe <unknown>2010-03-25 12:10:59 +0000
committernyamatongwe <unknown>2010-03-25 12:10:59 +0000
commit295013083c4e9454656c0e94ab977057ee55ea11 (patch)
tree661dd867b477a189c846fada99399ba9a61bc191 /test/simpleTests.py
parent9f6eff4d795ec5cef078a432b89744f5542a1ade (diff)
downloadscintilla-mirror-295013083c4e9454656c0e94ab977057ee55ea11.tar.gz
New case insensitive searching implementation uses objects implementing
the CaseFolder interface to fold both search text and document text so they can be compared with a simple strcmp. A simple table based folder CaseFolderTable is used for 8 bit encodings and maps input bytes to folded bytes. For multi-byte encodings except for UTF-8 a null (output same as input) CaseFolderTable is used. For UTF-8, more complex subclasses are used which call platform APIs to perform the folding. Folding is approximately to lower case although this differs between platforms.
Diffstat (limited to 'test/simpleTests.py')
-rw-r--r--test/simpleTests.py78
1 files changed, 78 insertions, 0 deletions
diff --git a/test/simpleTests.py b/test/simpleTests.py
index f9a67f59b..8fac00cd4 100644
--- a/test/simpleTests.py
+++ b/test/simpleTests.py
@@ -1109,6 +1109,84 @@ class TestCaseMapping(unittest.TestCase):
self.assertEquals(self.ed.Length, 1)
self.assertEquals(self.ed.Contents(), r)
+class TestCaseInsensitiveSearch(unittest.TestCase):
+ def setUp(self):
+ self.xite = XiteWin.xiteFrame
+ self.ed = self.xite.ed
+ self.ed.ClearAll()
+ self.ed.EmptyUndoBuffer()
+
+ def tearDown(self):
+ self.ed.SetCodePage(0)
+ self.ed.StyleSetCharacterSet(self.ed.STYLE_DEFAULT, self.ed.SC_CHARSET_DEFAULT)
+
+ def testEmpty(self):
+ text = b" x X"
+ searchString = b""
+ self.ed.SetText(len(text), text)
+ self.ed.TargetStart = 0
+ self.ed.TargetEnd = self.ed.Length-1
+ self.ed.SearchFlags = 0
+ pos = self.ed.SearchInTarget(len(searchString), searchString)
+ self.assertEquals(-1, pos)
+
+ def testASCII(self):
+ text = b" x X"
+ searchString = b"X"
+ self.ed.SetText(len(text), text)
+ self.ed.TargetStart = 0
+ self.ed.TargetEnd = self.ed.Length-1
+ self.ed.SearchFlags = 0
+ pos = self.ed.SearchInTarget(len(searchString), searchString)
+ self.assertEquals(1, pos)
+
+ def testLatin1(self):
+ text = "Frånd Åå".encode("Latin-1")
+ searchString = "Å".encode("Latin-1")
+ self.ed.SetText(len(text), text)
+ self.ed.TargetStart = 0
+ self.ed.TargetEnd = self.ed.Length-1
+ self.ed.SearchFlags = 0
+ pos = self.ed.SearchInTarget(len(searchString), searchString)
+ self.assertEquals(2, pos)
+
+ def testRussian(self):
+ self.ed.StyleSetCharacterSet(self.ed.STYLE_DEFAULT, self.ed.SC_CHARSET_RUSSIAN)
+ text = "=(Б tex б)".encode("Windows-1251")
+ searchString = "б".encode("Windows-1251")
+ self.ed.SetText(len(text), text)
+ self.ed.TargetStart = 0
+ self.ed.TargetEnd = self.ed.Length-1
+ self.ed.SearchFlags = 0
+ pos = self.ed.SearchInTarget(len(searchString), searchString)
+ self.assertEquals(2, pos)
+
+ def testUTF(self):
+ self.ed.SetCodePage(65001)
+ text = "Frånd Åå".encode("UTF-8")
+ searchString = "Å".encode("UTF-8")
+ self.ed.SetText(len(text), text)
+ self.ed.TargetStart = 0
+ self.ed.TargetEnd = self.ed.Length-1
+ self.ed.SearchFlags = 0
+ pos = self.ed.SearchInTarget(len(searchString), searchString)
+ self.assertEquals(2, pos)
+
+ def testUTFDifferentLength(self):
+ # Searching for a two byte string "ı" finds a single byte "I"
+ self.ed.SetCodePage(65001)
+ text = "Fråndi Ååİ $".encode("UTF-8")
+ firstPosition = len("Frånd".encode("UTF-8"))
+ searchString = "İ".encode("UTF-8")
+ self.assertEquals(len(searchString), 2)
+ self.ed.SetText(len(text), text)
+ self.ed.TargetStart = 0
+ self.ed.TargetEnd = self.ed.Length-1
+ self.ed.SearchFlags = 0
+ pos = self.ed.SearchInTarget(len(searchString), searchString)
+ self.assertEquals(firstPosition, pos)
+ self.assertEquals(firstPosition+1, self.ed.TargetEnd)
+
class TestLexer(unittest.TestCase):
def setUp(self):
self.xite = XiteWin.xiteFrame