(original) (raw)
diff -r 33843896ce4e Lib/idlelib/idle_test/mock_tk.py --- a/Lib/idlelib/idle_test/mock_tk.py Thu May 29 23:42:14 2014 -0700 +++ b/Lib/idlelib/idle_test/mock_tk.py Sun Jun 01 20:12:37 2014 +0530 @@ -67,6 +67,7 @@ showwarning = Mbox_func() # None from _tkinter import TclError +import re class Text: """A semi-functional non-gui replacement for tkinter.Text text editors. @@ -106,6 +107,13 @@ * 'line.char lineend', where lineend='lineend' (and char is ignored); * 'line.end', where end='end' (same as above); * 'insert', the positions before terminal \n; + * 'insert linestart', the position of start of line 'insert' + * 'insert lineend', the position of end of line 'insert' + * 'insert wordstart', position before word contained at 'insert' + * 'insert wordend', position after end of word contained at 'insert' + * 'insert +/- x chars', position 'x' characters after/before 'insert' + Implemented when on same line only. x is an int + overflow beyond a single line not implemented. * 'end', whose meaning depends on the endflag passed to ._endex. * 'sel.first' or 'sel.last', where sel is a tag -- not implemented. """ @@ -117,8 +125,29 @@ raise TclError('bad text index "%s"' % index) from None lastline = len(self.data) - 1 # same as number of text lines - if index == 'insert': - return lastline, len(self.data[lastline]) - 1 + if index.startswith('insert'): + if index == 'insert': + return lastline, len(self.data[lastline]) - 1 + if index.endswith(' linestart'): + index = '%d.0' %(self._decode('insert')[0]) + if index.endswith(' lineend'): + index = '%d.%d' %(self._decode('insert')) + if index.endswith(' wordstart'): + index = self.index('insert') + if index.endswith(' wordend'): + index = self.index('end') + if index.endswith(' chars'): + m = re.match('insert(?P( )?[+-]( )?[\d+]*( )?)chars', index) + x = int(m.groups('x')[0].replace(' ', '')) + + line, char = map(int, self.index('insert').split('.')) + if char + x > len(self.data[line]) - 1: + line = line + 1 + char = 0 + else: + char = char + x + index = '%d.%d' %(line, char) + elif index == 'end': return self._endex(endflag) @@ -277,3 +306,6 @@ def bind(sequence=None, func=None, add=None): "Bind to this widget at event sequence a call to function func." pass + + def bell(*args): + pass diff -r 33843896ce4e Lib/idlelib/idle_test/test_text.py --- a/Lib/idlelib/idle_test/test_text.py Thu May 29 23:42:14 2014 -0700 +++ b/Lib/idlelib/idle_test/test_text.py Sun Jun 01 20:12:37 2014 +0530 @@ -207,7 +207,12 @@ Equal(decode('3.1', -1), (2, 5)) Equal(decode('end', 0), (2, 6)) Equal(decode('3.1', 0), (2, 6)) - + Equal(decode('insert linestart'), (2, 0)) + Equal(decode('insert lineend'), (2, 5)) + Equal(decode('insert wordstart'), (2,5)) + Equal(decode('insert wordend'), (2,6)) + Equal(decode('insert + 3 chars'), (2,6)) + Equal(decode('insert -3 chars'), (2,2)) class TkTextTest(TextTest, unittest.TestCase):