diff options
| author | nyamatongwe <unknown> | 2009-05-12 23:39:51 +0000 | 
|---|---|---|
| committer | nyamatongwe <unknown> | 2009-05-12 23:39:51 +0000 | 
| commit | 77e5724a36c60f1f8318cd68cf1551a7892bfae7 (patch) | |
| tree | a554b9ac64e53a35379ae6e6a7d3160ac293a4de /test/lexTests.py | |
| parent | d423d335288c9420c684d4123497b2ece9fbfbe0 (diff) | |
| download | scintilla-mirror-77e5724a36c60f1f8318cd68cf1551a7892bfae7.tar.gz | |
Include tests in standard repository.
Diffstat (limited to 'test/lexTests.py')
| -rw-r--r-- | test/lexTests.py | 106 | 
1 files changed, 106 insertions, 0 deletions
| diff --git a/test/lexTests.py b/test/lexTests.py new file mode 100644 index 000000000..b4caa95f6 --- /dev/null +++ b/test/lexTests.py @@ -0,0 +1,106 @@ +# -*- coding: utf-8 -*- + +from __future__ import with_statement + +import io +import os +import unittest + +import XiteWin + +keywordsHTML = [ +b"b body content head href html link meta " +	b"name rel script strong title type xmlns", +b"function", +b"sub" +] + +class TestLexers(unittest.TestCase): + +	def setUp(self): +		self.xite = XiteWin.xiteFrame +		self.ed = self.xite.ed +		self.ed.ClearAll() +		self.ed.EmptyUndoBuffer() + +	def AsStyled(self): +		data = io.StringIO() +		len = 0 +		prevStyle = -1 +		for o in range(self.ed.Length): +			styleNow = self.ed.GetStyleAt(len) +			if styleNow != prevStyle: +				styleBuf = "{%0d}" % styleNow +				data.write(styleBuf) +				prevStyle = styleNow +			data.write(chr(self.ed.GetCharAt(len))) +			len += 1 +		return data.getvalue( ) + +	def LexExample(self, name, lexerName, keywords=None): +		if keywords is None: +			keywords = [] +		self.ed.LexerLanguage = lexerName +		bits = self.ed.StyleBitsNeeded +		mask = 2 << bits - 1 +		self.ed.StyleBits = bits +		for i in range(len(keywords)): +			self.ed.SetKeyWords(i, keywords[i]) + +		nameExample = os.path.join("examples", name) +		namePrevious = nameExample +".styled" +		nameNew = nameExample +".new" +		with open(nameExample, "rb") as f: +			prog = f.read() +		lenDocument = len(prog) +		self.ed.AddText(lenDocument, prog) +		self.ed.Colourise(0, lenDocument) +		self.assertEquals(self.ed.EndStyled, lenDocument) +		with open(namePrevious, "rb") as f: +			prevStyled = f.read() +		progStyled = self.AsStyled().encode('utf-8') +		if progStyled != prevStyled: +			with open(nameNew, "wb") as f: +				f.write(progStyled) +			print(progStyled) +			print(prevStyled) +			self.assertEquals(progStyled, prevStyled) +			# The whole file doesn't parse like it did before so don't try line by line +			# as that is likely to fail many times. +			return + +		# Try partial lexes from the start of every line which should all be identical. +		for line in range(self.ed.LineCount): +			lineStart = self.ed.PositionFromLine(line) +			self.ed.StartStyling(lineStart, mask) +			self.assertEquals(self.ed.EndStyled, lineStart) +			self.ed.Colourise(0, lenDocument) +			progStyled = self.AsStyled().encode('utf-8') +			if progStyled != prevStyled: +				with open(nameNew, "wb") as f: +					f.write(progStyled) +				assertEquals(progStyled, prevStyled) +				# Give up after one failure +				return + +	def testCXX(self): +		self.LexExample("x.cxx", b"cpp", [b"int"]) + +	def testPython(self): +		self.LexExample("x.py", b"python", +			[b"class def else for if import in print return while"]) + +	def testHTML(self): +		self.LexExample("x.html", b"hypertext", keywordsHTML) + +	def testASP(self): +		self.LexExample("x.asp", b"hypertext", keywordsHTML) + +	def testPHP(self): +		self.LexExample("x.php", b"hypertext", keywordsHTML) + +	def testVB(self): +		self.LexExample("x.vb", b"vb", [b"as dim or string"]) + +if __name__ == '__main__': +	XiteWin.main("lexTests") | 
