diff options
| author | nyamatongwe <devnull@localhost> | 2009-05-12 23:39:51 +0000 | 
|---|---|---|
| committer | nyamatongwe <devnull@localhost> | 2009-05-12 23:39:51 +0000 | 
| commit | 2642c1da70d5f1e26fda2cfee0deb2fa88b43b71 (patch) | |
| tree | a554b9ac64e53a35379ae6e6a7d3160ac293a4de /test/simpleTests.py | |
| parent | b529c73475f04af4f687a0d9b1328581734728ae (diff) | |
| download | scintilla-mirror-2642c1da70d5f1e26fda2cfee0deb2fa88b43b71.tar.gz | |
Include tests in standard repository.
Diffstat (limited to 'test/simpleTests.py')
| -rw-r--r-- | test/simpleTests.py | 897 | 
1 files changed, 897 insertions, 0 deletions
| diff --git a/test/simpleTests.py b/test/simpleTests.py new file mode 100644 index 000000000..3697e93f2 --- /dev/null +++ b/test/simpleTests.py @@ -0,0 +1,897 @@ +# -*- coding: utf-8 -*- + +from __future__ import with_statement + +import ctypes, os, unittest + +import XiteWin + +class TestSimple(unittest.TestCase): + +	def setUp(self): +		self.xite = XiteWin.xiteFrame +		self.ed = self.xite.ed +		self.ed.ClearAll() +		self.ed.EmptyUndoBuffer() + +	def testLength(self): +		self.assertEquals(self.ed.Length, 0) + +	def testAddText(self): +		self.ed.AddText(1, "x") +		self.assertEquals(self.ed.Length, 1) +		self.assertEquals(self.ed.GetCharAt(0), ord("x")) +		self.assertEquals(self.ed.GetStyleAt(0), 0) +		self.ed.ClearAll() +		self.assertEquals(self.ed.Length, 0) + +	def testAddStyledText(self): +		self.assertEquals(self.ed.EndStyled, 0) +		self.ed.AddStyledText(2, b"x\002") +		self.assertEquals(self.ed.Length, 1) +		self.assertEquals(self.ed.GetCharAt(0), ord("x")) +		self.assertEquals(self.ed.GetStyleAt(0), 2) +		self.assertEquals(self.ed.StyledTextRange(0, 1), b"x\002") +		self.ed.ClearDocumentStyle() +		self.assertEquals(self.ed.Length, 1) +		self.assertEquals(self.ed.GetCharAt(0), ord("x")) +		self.assertEquals(self.ed.GetStyleAt(0), 0) +		self.assertEquals(self.ed.StyledTextRange(0, 1), b"x\0") + +	def testStyling(self): +		self.assertEquals(self.ed.EndStyled, 0) +		self.ed.AddStyledText(4, b"x\002y\003") +		self.assertEquals(self.ed.StyledTextRange(0, 2), b"x\002y\003") +		self.ed.StartStyling(0,0xf) +		self.ed.SetStyling(1, 5) +		self.assertEquals(self.ed.StyledTextRange(0, 2), b"x\005y\003") +		# Set the mask so 0 bit changed but not 2 bit +		self.ed.StartStyling(0,0x1) +		self.ed.SetStyling(1, 0) +		self.assertEquals(self.ed.StyledTextRange(0, 2), b"x\004y\003") + +		self.ed.StartStyling(0,0xff) +		self.ed.SetStylingEx(2, b"\100\101") +		self.assertEquals(self.ed.StyledTextRange(0, 2), b"x\100y\101") + +	def testPosition(self): +		self.assertEquals(self.ed.CurrentPos, 0) +		self.assertEquals(self.ed.Anchor, 0) +		self.ed.AddText(1, "x") +		# Caret has automatically moved +		self.assertEquals(self.ed.CurrentPos, 1) +		self.assertEquals(self.ed.Anchor, 1) +		self.ed.SelectAll() +		self.assertEquals(self.ed.CurrentPos, 0) +		self.assertEquals(self.ed.Anchor, 1) +		self.ed.Anchor = 0 +		self.assertEquals(self.ed.Anchor, 0) +		# Check line positions +		self.assertEquals(self.ed.PositionFromLine(0), 0) +		self.assertEquals(self.ed.GetLineEndPosition(0), 1) +		self.assertEquals(self.ed.PositionFromLine(1), 1) + +		self.ed.CurrentPos = 1 +		self.assertEquals(self.ed.Anchor, 0) +		self.assertEquals(self.ed.CurrentPos, 1) + +	def testSelection(self): +		self.assertEquals(self.ed.CurrentPos, 0) +		self.assertEquals(self.ed.Anchor, 0) +		self.assertEquals(self.ed.SelectionStart, 0) +		self.assertEquals(self.ed.SelectionEnd, 0) +		self.ed.AddText(1, "x") +		self.ed.SelectionStart = 0 +		self.assertEquals(self.ed.CurrentPos, 1) +		self.assertEquals(self.ed.Anchor, 0) +		self.assertEquals(self.ed.SelectionStart, 0) +		self.assertEquals(self.ed.SelectionEnd, 1) +		self.ed.SelectionStart = 1 +		self.assertEquals(self.ed.CurrentPos, 1) +		self.assertEquals(self.ed.Anchor, 1) +		self.assertEquals(self.ed.SelectionStart, 1) +		self.assertEquals(self.ed.SelectionEnd, 1) + +		self.ed.SelectionEnd = 0 +		self.assertEquals(self.ed.CurrentPos, 0) +		self.assertEquals(self.ed.Anchor, 0) + +	def testSetSelection(self): +		self.ed.AddText(4, b"abcd") +		self.ed.SetSel(1, 3) +		self.assertEquals(self.ed.SelectionStart, 1) +		self.assertEquals(self.ed.SelectionEnd, 3) +		result = b"\0" * 5 +		length = self.ed.GetSelText(0, result) +		self.assertEquals(length, 3) +		self.assertEquals(result[:length], b"bc\0") +		self.ed.ReplaceSel(0, b"1234") +		self.assertEquals(self.ed.Length, 6) +		self.assertEquals(self.ed.Contents(), b"a1234d") + +	def testReadOnly(self): +		self.ed.AddText(1, b"x") +		self.assertEquals(self.ed.ReadOnly, 0) +		self.assertEquals(self.ed.Contents(), b"x") +		self.ed.ReadOnly = 1 +		self.assertEquals(self.ed.ReadOnly, 1) +		self.ed.AddText(1, b"x") +		self.assertEquals(self.ed.Contents(), b"x") +		self.ed.ReadOnly = 0 +		self.ed.AddText(1, b"x") +		self.assertEquals(self.ed.Contents(), b"xx") +		self.ed.Null() +		self.assertEquals(self.ed.Contents(), b"xx") + +	def testAddLine(self): +		data = b"x" * 70 + b"\n" +		for i in range(5): +			self.ed.AddText(len(data), data) +			self.xite.DoEvents() +			self.assertEquals(self.ed.LineCount, i + 2) +		self.assert_(self.ed.Length > 0) + +	def testInsertText(self): +		data = b"xy" +		self.ed.InsertText(0, data) +		self.assertEquals(self.ed.Length, 2) +		self.assertEquals(data, self.ed.ByteRange(0,2)) + +		self.ed.InsertText(1, data) +		# Should now be "xxyy" +		self.assertEquals(self.ed.Length, 4) +		self.assertEquals(b"xxyy", self.ed.ByteRange(0,4)) + +	def testInsertNul(self): +		data = b"\0" +		self.ed.AddText(1, data) +		self.assertEquals(self.ed.Length, 1) +		self.assertEquals(data, self.ed.ByteRange(0,1)) + +	def testUndoRedo(self): +		data = b"xy" +		self.assertEquals(self.ed.Modify, 0) +		self.assertEquals(self.ed.UndoCollection, 1) +		self.assertEquals(self.ed.CanRedo(), 0) +		self.assertEquals(self.ed.CanUndo(), 0) +		self.ed.InsertText(0, data) +		self.assertEquals(self.ed.Length, 2) +		self.assertEquals(self.ed.Modify, 1) +		self.assertEquals(self.ed.CanRedo(), 0) +		self.assertEquals(self.ed.CanUndo(), 1) +		self.ed.Undo() +		self.assertEquals(self.ed.Length, 0) +		self.assertEquals(self.ed.Modify, 0) +		self.assertEquals(self.ed.CanRedo(), 1) +		self.assertEquals(self.ed.CanUndo(), 0) +		self.ed.Redo() +		self.assertEquals(self.ed.Length, 2) +		self.assertEquals(self.ed.Modify, 1) +		self.assertEquals(data, self.ed.Contents()) +		self.assertEquals(self.ed.CanRedo(), 0) +		self.assertEquals(self.ed.CanUndo(), 1) + +	def testUndoSavePoint(self): +		data = b"xy" +		self.assertEquals(self.ed.Modify, 0) +		self.ed.InsertText(0, data) +		self.assertEquals(self.ed.Modify, 1) +		self.ed.SetSavePoint() +		self.assertEquals(self.ed.Modify, 0) +		self.ed.InsertText(0, data) +		self.assertEquals(self.ed.Modify, 1) + +	def testUndoCollection(self): +		data = b"xy" +		self.assertEquals(self.ed.UndoCollection, 1) +		self.ed.UndoCollection = 0 +		self.assertEquals(self.ed.UndoCollection, 0) +		self.ed.InsertText(0, data) +		self.assertEquals(self.ed.CanRedo(), 0) +		self.assertEquals(self.ed.CanUndo(), 0) +		self.ed.UndoCollection = 1 + +	def testGetColumn(self): +		self.ed.AddText(1, b"x") +		self.assertEquals(self.ed.GetColumn(0), 0) +		self.assertEquals(self.ed.GetColumn(1), 1) +		# Next line caused infinite loop in 1.71 +		self.assertEquals(self.ed.GetColumn(2), 1) +		self.assertEquals(self.ed.GetColumn(3), 1) + +	def testTabWidth(self): +		self.assertEquals(self.ed.TabWidth, 8) +		self.ed.AddText(3, b"x\tb") +		self.assertEquals(self.ed.GetColumn(0), 0) +		self.assertEquals(self.ed.GetColumn(1), 1) +		self.assertEquals(self.ed.GetColumn(2), 8) +		for col in range(10): +			if col == 0: +				self.assertEquals(self.ed.FindColumn(0, col), 0) +			elif col == 1: +				self.assertEquals(self.ed.FindColumn(0, col), 1) +			elif col == 9: +				self.assertEquals(self.ed.FindColumn(0, col), 3) +			else: +				self.assertEquals(self.ed.FindColumn(0, col), 2) +		self.ed.TabWidth = 4 +		self.assertEquals(self.ed.TabWidth, 4) +		self.assertEquals(self.ed.GetColumn(0), 0) +		self.assertEquals(self.ed.GetColumn(1), 1) +		self.assertEquals(self.ed.GetColumn(2), 4) + +	def testIndent(self): +		self.assertEquals(self.ed.Indent, 0) +		self.assertEquals(self.ed.UseTabs, 1) +		self.ed.Indent = 8 +		self.ed.UseTabs = 0 +		self.assertEquals(self.ed.Indent, 8) +		self.assertEquals(self.ed.UseTabs, 0) +		self.ed.AddText(3, b"x\tb") +		self.assertEquals(self.ed.GetLineIndentation(0), 0) +		self.ed.InsertText(0, b" ") +		self.assertEquals(self.ed.GetLineIndentation(0), 1) +		self.assertEquals(self.ed.GetLineIndentPosition(0), 1) +		self.assertEquals(self.ed.Contents(), b" x\tb") +		self.ed.SetLineIndentation(0,2) +		self.assertEquals(self.ed.Contents(), b"  x\tb") +		self.assertEquals(self.ed.GetLineIndentPosition(0), 2) +		self.ed.UseTabs = 1 +		self.ed.SetLineIndentation(0,8) +		self.assertEquals(self.ed.Contents(), b"\tx\tb") +		self.assertEquals(self.ed.GetLineIndentPosition(0), 1) + +	def testGetCurLine(self): +		self.ed.AddText(1, b"x") +		data = b"\0" * 100 +		caret = self.ed.GetCurLine(len(data), data) +		data = data.rstrip(b"\0") +		self.assertEquals(caret, 1) +		self.assertEquals(data, b"x") + +	def testGetLine(self): +		self.ed.AddText(1, b"x") +		data = b"\0" * 100 +		length = self.ed.GetLine(0, data) +		self.assertEquals(length, 1) +		data = data[:length] +		self.assertEquals(data, b"x") + +	def testLineEnds(self): +		self.ed.AddText(3, b"x\ny") +		self.assertEquals(self.ed.GetLineEndPosition(0), 1) +		self.assertEquals(self.ed.GetLineEndPosition(1), 3) +		self.assertEquals(self.ed.LineLength(0), 2) +		self.assertEquals(self.ed.LineLength(1), 1) +		self.assertEquals(self.ed.EOLMode, self.ed.SC_EOL_CRLF) +		lineEnds = [b"\r\n", b"\r", b"\n"] +		for lineEndType in [self.ed.SC_EOL_CR, self.ed.SC_EOL_LF, self.ed.SC_EOL_CRLF]: +			self.ed.EOLMode = lineEndType +			self.assertEquals(self.ed.EOLMode, lineEndType) +			self.ed.ConvertEOLs(lineEndType) +			self.assertEquals(self.ed.Contents(), b"x" + lineEnds[lineEndType] + b"y") +			self.assertEquals(self.ed.LineLength(0), 1 + len(lineEnds[lineEndType])) + +	def testGoto(self): +		self.ed.AddText(5, b"a\nb\nc") +		self.assertEquals(self.ed.CurrentPos, 5) +		self.ed.GotoLine(1) +		self.assertEquals(self.ed.CurrentPos, 2) +		self.ed.GotoPos(4) +		self.assertEquals(self.ed.CurrentPos, 4) + +	def testCutCopyPaste(self): +		self.ed.AddText(5, b"a1b2c") +		self.ed.SetSel(1,3) +		self.ed.Cut() +		self.assertEquals(self.ed.CanPaste(), 1) +		self.ed.SetSel(0, 0) +		self.ed.Paste() +		self.assertEquals(self.ed.Contents(), b"1ba2c") +		self.ed.SetSel(4,5) +		self.ed.Copy() +		self.ed.SetSel(1,3) +		self.ed.Paste() +		self.assertEquals(self.ed.Contents(), b"1c2c") +		self.ed.SetSel(2,4) +		self.ed.Clear() +		self.assertEquals(self.ed.Contents(), b"1c") + +	def testGetSet(self): +		self.ed.SetText(0, b"abc") +		self.assertEquals(self.ed.TextLength, 3) +		result = b"\0" * 5 +		length = self.ed.GetText(4, result) +		result = result[:length] +		self.assertEquals(result, b"abc") + +	def testAppend(self): +		self.ed.SetText(0, b"abc") +		self.assertEquals(self.ed.SelectionStart, 0) +		self.assertEquals(self.ed.SelectionEnd, 0) +		text = b"12" +		self.ed.AppendText(len(text), text) +		self.assertEquals(self.ed.SelectionStart, 0) +		self.assertEquals(self.ed.SelectionEnd, 0) +		self.assertEquals(self.ed.Contents(), b"abc12") + +	def testTarget(self): +		self.ed.SetText(0, b"abcd") +		self.ed.TargetStart = 1 +		self.ed.TargetEnd = 3 +		self.assertEquals(self.ed.TargetStart, 1) +		self.assertEquals(self.ed.TargetEnd, 3) +		rep = b"321" +		self.ed.ReplaceTarget(len(rep), rep) +		self.assertEquals(self.ed.Contents(), b"a321d") +		self.ed.SearchFlags = self.ed.SCFIND_REGEXP +		self.assertEquals(self.ed.SearchFlags, self.ed.SCFIND_REGEXP) +		searchString = b"\([1-9]+\)" +		pos = self.ed.SearchInTarget(len(searchString), searchString) +		self.assertEquals(1, pos) +		rep = b"\\1" +		self.ed.TargetStart = 0 +		self.ed.TargetEnd = 0 +		self.ed.ReplaceTargetRE(len(rep), rep) +		self.assertEquals(self.ed.Contents(), b"321a321d") +		self.ed.SetSel(4,5) +		self.ed.TargetFromSelection() +		self.assertEquals(self.ed.TargetStart, 4) +		self.assertEquals(self.ed.TargetEnd, 5) + +	def testPointsAndPositions(self): +		self.ed.AddText(1, b"x") +		# Start of text +		self.assertEquals(self.ed.PositionFromPoint(0,0), 0) +		# End of text +		self.assertEquals(self.ed.PositionFromPoint(0,100), 1) + +	def testLinePositions(self): +		text = b"ab\ncd\nef" +		self.ed.AddText(len(text), text) +		self.assertEquals(self.ed.LineFromPosition(-1), 0) +		line = 0 +		for pos in range(len(text)+1): +			self.assertEquals(self.ed.LineFromPosition(pos), line) +			if pos < len(text) and text[pos] == ord("\n"): +				line += 1 + +	def testWordPositions(self): +		text = b"ab cd\tef" +		self.ed.AddText(len(text), text) +		self.assertEquals(self.ed.WordStartPosition(3, 0), 2) +		self.assertEquals(self.ed.WordStartPosition(4, 0), 3) +		self.assertEquals(self.ed.WordStartPosition(5, 0), 3) +		self.assertEquals(self.ed.WordStartPosition(6, 0), 5) + +		self.assertEquals(self.ed.WordEndPosition(2, 0), 3) +		self.assertEquals(self.ed.WordEndPosition(3, 0), 5) +		self.assertEquals(self.ed.WordEndPosition(4, 0), 5) +		self.assertEquals(self.ed.WordEndPosition(5, 0), 6) +		self.assertEquals(self.ed.WordEndPosition(6, 0), 8) + +MODI = 1 +UNDO = 2 +REDO = 4 + +class TestContainerUndo(unittest.TestCase): + +	def setUp(self): +		self.xite = XiteWin.xiteFrame +		self.ed = self.xite.ed +		self.ed.ClearAll() +		self.ed.EmptyUndoBuffer() +		self.data = b"xy" + +	def UndoState(self): +		return (MODI if self.ed.Modify else 0) | \ +			(UNDO if self.ed.CanUndo() else 0) | \ +			(REDO if self.ed.CanRedo() else 0) + +	def testContainerActNoCoalesce(self): +		self.ed.InsertText(0, self.data) +		self.assertEquals(self.ed.Length, 2) +		self.assertEquals(self.UndoState(), MODI | UNDO) +		self.ed.AddUndoAction(5, 0) +		self.ed.Undo() +		self.assertEquals(self.ed.Length, 2) +		self.assertEquals(self.UndoState(), MODI | UNDO | REDO) +		self.ed.Redo() +		self.assertEquals(self.ed.Length, 2) +		self.assertEquals(self.UndoState(), MODI | UNDO) +		self.ed.Undo() +	 +	def testContainerActCoalesce(self): +		self.ed.InsertText(0, self.data) +		self.ed.AddUndoAction(5, 1) +		self.ed.Undo() +		self.assertEquals(self.ed.Length, 0) +		self.assertEquals(self.UndoState(), REDO) +		self.ed.Redo() +		self.assertEquals(self.ed.Length, 2) +		self.assertEquals(self.UndoState(), MODI | UNDO) + +	def testContainerMultiStage(self): +		self.ed.InsertText(0, self.data) +		self.ed.AddUndoAction(5, 1) +		self.ed.AddUndoAction(5, 1) +		self.assertEquals(self.ed.Length, 2) +		self.assertEquals(self.UndoState(), MODI | UNDO) +		self.ed.Undo() +		self.assertEquals(self.ed.Length, 0) +		self.assertEquals(self.UndoState(), REDO) +		self.ed.Redo() +		self.assertEquals(self.ed.Length, 2) +		self.assertEquals(self.UndoState(), MODI | UNDO) +		self.ed.AddUndoAction(5, 1) +		self.assertEquals(self.ed.Length, 2) +		self.assertEquals(self.UndoState(), MODI | UNDO) +		self.ed.Undo() +		self.assertEquals(self.ed.Length, 0) +		self.assertEquals(self.UndoState(), REDO) + +	def testContainerMultiStageNoText(self): +		self.ed.AddUndoAction(5, 1) +		self.ed.AddUndoAction(5, 1) +		self.assertEquals(self.UndoState(), MODI | UNDO) +		self.ed.Undo() +		self.assertEquals(self.UndoState(), REDO) +		self.ed.Redo() +		self.assertEquals(self.UndoState(), MODI | UNDO) +		self.ed.AddUndoAction(5, 1) +		self.assertEquals(self.UndoState(), MODI | UNDO) +		self.ed.Undo() +		self.assertEquals(self.UndoState(), REDO) + +	def testContainerActCoalesceEnd(self): +		self.ed.AddUndoAction(5, 1) +		self.assertEquals(self.ed.Length, 0) +		self.assertEquals(self.UndoState(), MODI | UNDO) +		self.ed.InsertText(0, self.data) +		self.assertEquals(self.ed.Length, 2) +		self.assertEquals(self.UndoState(), MODI | UNDO) +		self.ed.Undo() +		self.assertEquals(self.ed.Length, 0) +		self.assertEquals(self.UndoState(), REDO) +		self.ed.Redo() +		self.assertEquals(self.ed.Length, 2) +		self.assertEquals(self.UndoState(), MODI | UNDO) + +	def testContainerBetweenInsertAndInsert(self): +		self.assertEquals(self.ed.Length, 0) +		self.ed.InsertText(0, self.data) +		self.assertEquals(self.ed.Length, 2) +		self.assertEquals(self.UndoState(), MODI | UNDO) +		self.ed.AddUndoAction(5, 1) +		self.assertEquals(self.ed.Length, 2) +		self.assertEquals(self.UndoState(), MODI | UNDO) +		self.ed.InsertText(2, self.data) +		self.assertEquals(self.ed.Length, 4) +		self.assertEquals(self.UndoState(), MODI | UNDO) +		# Undoes both insertions and the containerAction in the middle +		self.ed.Undo() +		self.assertEquals(self.ed.Length, 0) +		self.assertEquals(self.UndoState(), REDO) + +	def testContainerNoCoalesceBetweenInsertAndInsert(self): +		self.assertEquals(self.ed.Length, 0) +		self.ed.InsertText(0, self.data) +		self.assertEquals(self.ed.Length, 2) +		self.assertEquals(self.UndoState(), MODI | UNDO) +		self.ed.AddUndoAction(5, 0) +		self.assertEquals(self.ed.Length, 2) +		self.assertEquals(self.UndoState(), MODI | UNDO) +		self.ed.InsertText(2, self.data) +		self.assertEquals(self.ed.Length, 4) +		self.assertEquals(self.UndoState(), MODI | UNDO) +		# Undo last insertion +		self.ed.Undo() +		self.assertEquals(self.ed.Length, 2) +		self.assertEquals(self.UndoState(), MODI | UNDO | REDO) +		# Undo container +		self.ed.Undo() +		self.assertEquals(self.ed.Length, 2) +		self.assertEquals(self.UndoState(), MODI | UNDO | REDO) +		# Undo first insertion +		self.ed.Undo() +		self.assertEquals(self.ed.Length, 0) +		self.assertEquals(self.UndoState(), REDO) + +	def testContainerBetweenDeleteAndDelete(self): +		self.ed.InsertText(0, self.data) +		self.ed.EmptyUndoBuffer() +		self.assertEquals(self.ed.Length, 2) +		self.assertEquals(self.UndoState(), 0) +		self.ed.SetSel(2,2) +		self.ed.DeleteBack() +		self.assertEquals(self.ed.Length, 1) +		self.ed.AddUndoAction(5, 1) +		self.ed.DeleteBack() +		self.assertEquals(self.ed.Length, 0) +		# Undoes both deletions and the containerAction in the middle +		self.ed.Undo() +		self.assertEquals(self.ed.Length, 2) +		self.assertEquals(self.UndoState(), REDO) + +	def testContainerBetweenInsertAndDelete(self): +		self.assertEquals(self.ed.Length, 0) +		self.ed.InsertText(0, self.data) +		self.assertEquals(self.ed.Length, 2) +		self.assertEquals(self.UndoState(), MODI | UNDO) +		self.ed.AddUndoAction(5, 1) +		self.assertEquals(self.UndoState(), MODI | UNDO) +		self.ed.SetSel(0,1) +		self.ed.Cut() +		self.assertEquals(self.ed.Length, 1) +		self.assertEquals(self.UndoState(), MODI | UNDO) +		self.ed.Undo()	# Only undoes the deletion +		self.assertEquals(self.ed.Length, 2) +		self.assertEquals(self.UndoState(), MODI | UNDO | REDO) + +class TestKeyCommands(unittest.TestCase): +	""" These commands are normally assigned to keys and take no arguments """ + +	def setUp(self): +		self.xite = XiteWin.xiteFrame +		self.ed = self.xite.ed +		self.ed.ClearAll() +		self.ed.EmptyUndoBuffer() + +	def selRange(self): +		return self.ed.CurrentPos, self.ed.Anchor + +	def testLineMove(self): +		self.ed.AddText(8, b"x1\ny2\nz3") +		self.ed.SetSel(0,0) +		self.ed.ChooseCaretX() +		self.ed.LineDown() +		self.ed.LineDown() +		self.assertEquals(self.selRange(), (6, 6)) +		self.ed.LineUp() +		self.assertEquals(self.selRange(), (3, 3)) +		self.ed.LineDownExtend() +		self.assertEquals(self.selRange(), (6, 3)) +		self.ed.LineUpExtend() +		self.ed.LineUpExtend() +		self.assertEquals(self.selRange(), (0, 3)) + +	def testCharMove(self): +		self.ed.AddText(8, b"x1\ny2\nz3") +		self.ed.SetSel(0,0) +		self.ed.CharRight() +		self.ed.CharRight() +		self.assertEquals(self.selRange(), (2, 2)) +		self.ed.CharLeft() +		self.assertEquals(self.selRange(), (1, 1)) +		self.ed.CharRightExtend() +		self.assertEquals(self.selRange(), (2, 1)) +		self.ed.CharLeftExtend() +		self.ed.CharLeftExtend() +		self.assertEquals(self.selRange(), (0, 1)) + +	def testWordMove(self): +		self.ed.AddText(10, b"a big boat") +		self.ed.SetSel(3,3) +		self.ed.WordRight() +		self.ed.WordRight() +		self.assertEquals(self.selRange(), (10, 10)) +		self.ed.WordLeft() +		self.assertEquals(self.selRange(), (6, 6)) +		self.ed.WordRightExtend() +		self.assertEquals(self.selRange(), (10, 6)) +		self.ed.WordLeftExtend() +		self.ed.WordLeftExtend() +		self.assertEquals(self.selRange(), (2, 6)) + +	def testHomeEndMove(self): +		self.ed.AddText(10, b"a big boat") +		self.ed.SetSel(3,3) +		self.ed.Home() +		self.assertEquals(self.selRange(), (0, 0)) +		self.ed.LineEnd() +		self.assertEquals(self.selRange(), (10, 10)) +		self.ed.SetSel(3,3) +		self.ed.HomeExtend() +		self.assertEquals(self.selRange(), (0, 3)) +		self.ed.LineEndExtend() +		self.assertEquals(self.selRange(), (10, 3)) + +	def testStartEndMove(self): +		self.ed.AddText(10, b"a\nbig\nboat") +		self.ed.SetSel(3,3) +		self.ed.DocumentStart() +		self.assertEquals(self.selRange(), (0, 0)) +		self.ed.DocumentEnd() +		self.assertEquals(self.selRange(), (10, 10)) +		self.ed.SetSel(3,3) +		self.ed.DocumentStartExtend() +		self.assertEquals(self.selRange(), (0, 3)) +		self.ed.DocumentEndExtend() +		self.assertEquals(self.selRange(), (10, 3)) + + +class TestMarkers(unittest.TestCase): + +	def setUp(self): +		self.xite = XiteWin.xiteFrame +		self.ed = self.xite.ed +		self.ed.ClearAll() +		self.ed.EmptyUndoBuffer() +		self.ed.AddText(5, b"x\ny\nz") + +	def testMarker(self): +		handle = self.ed.MarkerAdd(1,1) +		self.assertEquals(self.ed.MarkerLineFromHandle(handle), 1) +		self.ed.MarkerDelete(1,1) +		self.assertEquals(self.ed.MarkerLineFromHandle(handle), -1) + +	def testMarkerDeleteAll(self): +		h1 = self.ed.MarkerAdd(0,1) +		h2 = self.ed.MarkerAdd(1,2) +		self.assertEquals(self.ed.MarkerLineFromHandle(h1), 0) +		self.assertEquals(self.ed.MarkerLineFromHandle(h2), 1) +		self.ed.MarkerDeleteAll(1) +		self.assertEquals(self.ed.MarkerLineFromHandle(h1), -1) +		self.assertEquals(self.ed.MarkerLineFromHandle(h2), 1) +		self.ed.MarkerDeleteAll(-1) +		self.assertEquals(self.ed.MarkerLineFromHandle(h1), -1) +		self.assertEquals(self.ed.MarkerLineFromHandle(h2), -1) + +	def testMarkerDeleteHandle(self): +		handle = self.ed.MarkerAdd(0,1) +		self.assertEquals(self.ed.MarkerLineFromHandle(handle), 0) +		self.ed.MarkerDeleteHandle(handle) +		self.assertEquals(self.ed.MarkerLineFromHandle(handle), -1) + +	def testMarkerBits(self): +		self.assertEquals(self.ed.MarkerGet(0), 0) +		self.ed.MarkerAdd(0,1) +		self.assertEquals(self.ed.MarkerGet(0), 2) +		self.ed.MarkerAdd(0,2) +		self.assertEquals(self.ed.MarkerGet(0), 6) + +	def testMarkerAddSet(self): +		self.assertEquals(self.ed.MarkerGet(0), 0) +		self.ed.MarkerAddSet(0,5) +		self.assertEquals(self.ed.MarkerGet(0), 5) +		self.ed.MarkerDeleteAll(-1) + +	def testMarkerNext(self): +		h1 = self.ed.MarkerAdd(0,1) +		h2 = self.ed.MarkerAdd(2,1) +		self.assertEquals(self.ed.MarkerNext(0, 2), 0) +		self.assertEquals(self.ed.MarkerNext(1, 2), 2) +		self.assertEquals(self.ed.MarkerNext(2, 2), 2) +		self.assertEquals(self.ed.MarkerPrevious(0, 2), 0) +		self.assertEquals(self.ed.MarkerPrevious(1, 2), 0) +		self.assertEquals(self.ed.MarkerPrevious(2, 2), 2) + +	def testLineState(self): +		self.assertEquals(self.ed.MaxLineState, 0) +		self.assertEquals(self.ed.GetLineState(0), 0) +		self.assertEquals(self.ed.GetLineState(1), 0) +		self.assertEquals(self.ed.GetLineState(2), 0) +		self.ed.SetLineState(1, 100) +		self.assertNotEquals(self.ed.MaxLineState, 0) +		self.assertEquals(self.ed.GetLineState(0), 0) +		self.assertEquals(self.ed.GetLineState(1), 100) +		self.assertEquals(self.ed.GetLineState(2), 0) +		 +	def testSymbolRetrieval(self): +		self.ed.MarkerDefine(1,3) +		self.assertEquals(self.ed.MarkerSymbolDefined(1), 3) + +class TestIndicators(unittest.TestCase): + +	def setUp(self): +		self.xite = XiteWin.xiteFrame +		self.ed = self.xite.ed +		self.ed.ClearAll() +		self.ed.EmptyUndoBuffer() + +	def testSetIndicator(self): +		self.assertEquals(self.ed.IndicGetStyle(0), 1) +		self.assertEquals(self.ed.IndicGetFore(0), 0x007f00) +		self.ed.IndicSetStyle(0, 2) +		self.ed.IndicSetFore(0, 0xff0080) +		self.assertEquals(self.ed.IndicGetStyle(0), 2) +		self.assertEquals(self.ed.IndicGetFore(0), 0xff0080) + +class TestSearch(unittest.TestCase): + +	def setUp(self): +		self.xite = XiteWin.xiteFrame +		self.ed = self.xite.ed +		self.ed.ClearAll() +		self.ed.EmptyUndoBuffer() +		self.ed.InsertText(0, b"a\tbig boat\t") + +	def testFind(self): +		pos = self.ed.FindBytes(0, self.ed.Length, b"zzz", 0) +		self.assertEquals(pos, -1) +		pos = self.ed.FindBytes(0, self.ed.Length, b"big", 0) +		self.assertEquals(pos, 2) + +	def testCaseFind(self): +		self.assertEquals(self.ed.FindBytes(0, self.ed.Length, b"big", 0), 2) +		self.assertEquals(self.ed.FindBytes(0, self.ed.Length, b"bIg", 0), 2) +		self.assertEquals(self.ed.FindBytes(0, self.ed.Length, b"bIg", +			self.ed.SCFIND_MATCHCASE), -1) + +	def testWordFind(self): +		self.assertEquals(self.ed.FindBytes(0, self.ed.Length, b"bi", 0), 2) +		self.assertEquals(self.ed.FindBytes(0, self.ed.Length, b"bi", +			self.ed.SCFIND_WHOLEWORD), -1) + +	def testWordStartFind(self): +		self.assertEquals(self.ed.FindBytes(0, self.ed.Length, b"bi", 0), 2) +		self.assertEquals(self.ed.FindBytes(0, self.ed.Length, b"bi", +			self.ed.SCFIND_WORDSTART), 2) +		self.assertEquals(self.ed.FindBytes(0, self.ed.Length, b"ig", 0), 3) +		self.assertEquals(self.ed.FindBytes(0, self.ed.Length, b"ig", +			self.ed.SCFIND_WORDSTART), -1) + +	def testREFind(self): +		flags = self.ed.SCFIND_REGEXP +		self.assertEquals(-1, self.ed.FindBytes(0, self.ed.Length, b"b.g", 0)) +		self.assertEquals(2, self.ed.FindBytes(0, self.ed.Length, b"b.g", flags)) +		self.assertEquals(2, self.ed.FindBytes(0, self.ed.Length, b"\<b.g\>", flags)) +		self.assertEquals(-1, self.ed.FindBytes(0, self.ed.Length, b"b[A-Z]g", +			flags | self.ed.SCFIND_MATCHCASE)) +		self.assertEquals(2, self.ed.FindBytes(0, self.ed.Length, b"b[a-z]g", flags)) +		self.assertEquals(6, self.ed.FindBytes(0, self.ed.Length, b"b[a-z]*t", flags)) +		self.assertEquals(0, self.ed.FindBytes(0, self.ed.Length, b"^a", flags)) +		self.assertEquals(10, self.ed.FindBytes(0, self.ed.Length, b"\t$", flags)) +		self.assertEquals(0, self.ed.FindBytes(0, self.ed.Length, b"\([a]\).*\0", flags)) + +	def testPosixREFind(self): +		flags = self.ed.SCFIND_REGEXP | self.ed.SCFIND_POSIX +		self.assertEquals(-1, self.ed.FindBytes(0, self.ed.Length, b"b.g", 0)) +		self.assertEquals(2, self.ed.FindBytes(0, self.ed.Length, b"b.g", flags)) +		self.assertEquals(2, self.ed.FindBytes(0, self.ed.Length, b"\<b.g\>", flags)) +		self.assertEquals(-1, self.ed.FindBytes(0, self.ed.Length, b"b[A-Z]g", +			flags | self.ed.SCFIND_MATCHCASE)) +		self.assertEquals(2, self.ed.FindBytes(0, self.ed.Length, b"b[a-z]g", flags)) +		self.assertEquals(6, self.ed.FindBytes(0, self.ed.Length, b"b[a-z]*t", flags)) +		self.assertEquals(0, self.ed.FindBytes(0, self.ed.Length, b"^a", flags)) +		self.assertEquals(10, self.ed.FindBytes(0, self.ed.Length, b"\t$", flags)) +		self.assertEquals(0, self.ed.FindBytes(0, self.ed.Length, b"([a]).*\0", flags)) + +	def testPhilippeREFind(self): +		# Requires 1.,72 +		flags = self.ed.SCFIND_REGEXP +		self.assertEquals(0, self.ed.FindBytes(0, self.ed.Length, "\w", flags)) +		self.assertEquals(1, self.ed.FindBytes(0, self.ed.Length, "\W", flags)) +		self.assertEquals(-1, self.ed.FindBytes(0, self.ed.Length, "\d", flags)) +		self.assertEquals(0, self.ed.FindBytes(0, self.ed.Length, "\D", flags)) +		self.assertEquals(1, self.ed.FindBytes(0, self.ed.Length, "\s", flags)) +		self.assertEquals(0, self.ed.FindBytes(0, self.ed.Length, "\S", flags)) +		self.assertEquals(2, self.ed.FindBytes(0, self.ed.Length, "\x62", flags)) + +class TestProperties(unittest.TestCase): + +	def setUp(self): +		self.xite = XiteWin.xiteFrame +		self.ed = self.xite.ed +		self.ed.ClearAll() +		self.ed.EmptyUndoBuffer() + +	def testSet(self): +		self.ed.SetProperty(b"test", b"12") +		self.assertEquals(self.ed.GetPropertyInt(b"test"), 12) +		result = b"\0" * 10 +		length = self.ed.GetProperty(b"test", result) +		result = result[:length] +		self.assertEquals(result, b"12") +		self.ed.SetProperty(b"test.plus", b"[$(test)]") +		result = b"\0" * 10 +		length = self.ed.GetPropertyExpanded(b"test.plus", result) +		result = result[:length] +		self.assertEquals(result, b"[12]") + +class TestTextMargin(unittest.TestCase): + +	def setUp(self): +		self.xite = XiteWin.xiteFrame +		self.ed = self.xite.ed +		self.ed.ClearAll() +		self.ed.EmptyUndoBuffer() +		self.txt = b"abcd" +		self.ed.AddText(1, b"x") + +	def testAscent(self): +		lineHeight = self.ed.TextHeight(0) +		self.ed.ExtraAscent +		self.assertEquals(self.ed.ExtraAscent, 0) +		self.assertEquals(self.ed.ExtraDescent, 0) +		self.ed.ExtraAscent = 1 +		self.assertEquals(self.ed.ExtraAscent, 1) +		self.ed.ExtraDescent = 2 +		self.assertEquals(self.ed.ExtraDescent, 2) +		# Allow line height to recalculate +		self.xite.DoEvents() +		lineHeightIncreased = self.ed.TextHeight(0) +		self.assertEquals(lineHeightIncreased, lineHeight + 2 + 1) +		 +	def testTextMargin(self): +		self.ed.MarginSetText(0, self.txt) +		result = b"\0" * 10 +		length = self.ed.MarginGetText(0, result) +		result = result[:length] +		self.assertEquals(result, self.txt) +		self.ed.MarginTextClearAll() + +	def testTextMarginStyle(self): +		self.ed.MarginSetText(0, self.txt) +		self.ed.MarginSetStyle(0, 33) +		self.assertEquals(self.ed.MarginGetStyle(0), 33) +		self.ed.MarginTextClearAll() + +	def testTextMarginStyles(self): +		styles = b"\001\002\003\004" +		self.ed.MarginSetText(0, self.txt) +		self.ed.MarginSetStyles(0, styles) +		result = b"\0" * 10 +		length = self.ed.MarginGetStyles(0, result) +		result = result[:length] +		self.assertEquals(result, styles) +		self.ed.MarginTextClearAll() + +	def testTextMarginStyleOffset(self): +		self.ed.MarginSetStyleOffset(300) +		self.assertEquals(self.ed.MarginGetStyleOffset(), 300) + +class TestAnnotation(unittest.TestCase): + +	def setUp(self): +		self.xite = XiteWin.xiteFrame +		self.ed = self.xite.ed +		self.ed.ClearAll() +		self.ed.EmptyUndoBuffer() +		self.txt = b"abcd" +		self.ed.AddText(1, b"x") + +	def testTextAnnotation(self): +		self.assertEquals(self.ed.AnnotationGetLines(), 0) +		self.ed.AnnotationSetText(0, self.txt) +		self.assertEquals(self.ed.AnnotationGetLines(), 1) +		result = b"\0" * 10 +		length = self.ed.AnnotationGetText(0, result) +		self.assertEquals(length, 4) +		result = result[:length] +		self.assertEquals(result, self.txt) +		self.ed.AnnotationClearAll() + +	def testTextAnnotationStyle(self): +		self.ed.AnnotationSetText(0, self.txt) +		self.ed.AnnotationSetStyle(0, 33) +		self.assertEquals(self.ed.AnnotationGetStyle(0), 33) +		self.ed.AnnotationClearAll() + +	def testTextAnnotationStyles(self): +		styles = b"\001\002\003\004" +		self.ed.AnnotationSetText(0, self.txt) +		self.ed.AnnotationSetStyles(0, styles) +		result = b"\0" * 10 +		length = self.ed.AnnotationGetStyles(0, result) +		result = result[:length] +		self.assertEquals(result, styles) +		self.ed.AnnotationClearAll() + +	def testTextAnnotationStyleOffset(self): +		self.ed.AnnotationSetStyleOffset(300) +		self.assertEquals(self.ed.AnnotationGetStyleOffset(), 300) + +	def testTextAnnotationVisible(self): +		self.assertEquals(self.ed.AnnotationGetVisible(), 0) +		self.ed.AnnotationSetVisible(2) +		self.assertEquals(self.ed.AnnotationGetVisible(), 2) +		self.ed.AnnotationSetVisible(0) + +#~ import os +#~ for x in os.getenv("PATH").split(";"): +	#~ n = "scilexer.dll" +	#~ nf = x + "\\" + n +	#~ print os.access(nf, os.R_OK), nf +if __name__ == '__main__': +	XiteWin.main("simpleTests") | 
