1import unittest 2import tkinter 3from test.support import requires 4from tkinter.test.support import AbstractTkTest 5 6requires('gui') 7 8class TextTest(AbstractTkTest, unittest.TestCase): 9 10 def setUp(self): 11 super().setUp() 12 self.text = tkinter.Text(self.root) 13 14 def test_debug(self): 15 text = self.text 16 olddebug = text.debug() 17 try: 18 text.debug(0) 19 self.assertEqual(text.debug(), 0) 20 text.debug(1) 21 self.assertEqual(text.debug(), 1) 22 finally: 23 text.debug(olddebug) 24 self.assertEqual(text.debug(), olddebug) 25 26 def test_search(self): 27 text = self.text 28 29 # pattern and index are obligatory arguments. 30 self.assertRaises(tkinter.TclError, text.search, None, '1.0') 31 self.assertRaises(tkinter.TclError, text.search, 'a', None) 32 self.assertRaises(tkinter.TclError, text.search, None, None) 33 34 # Invalid text index. 35 self.assertRaises(tkinter.TclError, text.search, '', 0) 36 37 # Check if we are getting the indices as strings -- you are likely 38 # to get Tcl_Obj under Tk 8.5 if Tkinter doesn't convert it. 39 text.insert('1.0', 'hi-test') 40 self.assertEqual(text.search('-test', '1.0', 'end'), '1.2') 41 self.assertEqual(text.search('test', '1.0', 'end'), '1.3') 42 43 def test_count(self): 44 # XXX Some assertions do not check against the intended result, 45 # but instead check the current result to prevent regression. 46 text = self.text 47 text.insert('1.0', 48 'Lorem ipsum dolor sit amet,\n' 49 'consectetur adipiscing elit,\n' 50 'sed do eiusmod tempor incididunt\n' 51 'ut labore et dolore magna aliqua.') 52 53 options = ('chars', 'indices', 'lines', 54 'displaychars', 'displayindices', 'displaylines', 55 'xpixels', 'ypixels') 56 if self.wantobjects: 57 self.assertEqual(len(text.count('1.0', 'end', *options)), 8) 58 else: 59 text.count('1.0', 'end', *options) 60 self.assertEqual(text.count('1.0', 'end', 'chars', 'lines'), (124, 4) 61 if self.wantobjects else '124 4') 62 self.assertEqual(text.count('1.3', '4.5', 'chars', 'lines'), (92, 3) 63 if self.wantobjects else '92 3') 64 self.assertEqual(text.count('4.5', '1.3', 'chars', 'lines'), (-92, -3) 65 if self.wantobjects else '-92 -3') 66 self.assertEqual(text.count('1.3', '1.3', 'chars', 'lines'), (0, 0) 67 if self.wantobjects else '0 0') 68 self.assertEqual(text.count('1.0', 'end', 'lines'), (4,) 69 if self.wantobjects else ('4',)) 70 self.assertEqual(text.count('end', '1.0', 'lines'), (-4,) 71 if self.wantobjects else ('-4',)) 72 self.assertEqual(text.count('1.3', '1.5', 'lines'), None 73 if self.wantobjects else ('0',)) 74 self.assertEqual(text.count('1.3', '1.3', 'lines'), None 75 if self.wantobjects else ('0',)) 76 self.assertEqual(text.count('1.0', 'end'), (124,) # 'indices' by default 77 if self.wantobjects else ('124',)) 78 self.assertRaises(tkinter.TclError, text.count, '1.0', 'end', 'spam') 79 self.assertRaises(tkinter.TclError, text.count, '1.0', 'end', '-lines') 80 81 self.assertIsInstance(text.count('1.3', '1.5', 'ypixels'), tuple) 82 self.assertIsInstance(text.count('1.3', '1.5', 'update', 'ypixels'), int 83 if self.wantobjects else str) 84 self.assertEqual(text.count('1.3', '1.3', 'update', 'ypixels'), None 85 if self.wantobjects else '0') 86 self.assertEqual(text.count('1.3', '1.5', 'update', 'indices'), 2 87 if self.wantobjects else '2') 88 self.assertEqual(text.count('1.3', '1.3', 'update', 'indices'), None 89 if self.wantobjects else '0') 90 self.assertEqual(text.count('1.3', '1.5', 'update'), (2,) 91 if self.wantobjects else ('2',)) 92 self.assertEqual(text.count('1.3', '1.3', 'update'), None 93 if self.wantobjects else ('0',)) 94 95 96if __name__ == "__main__": 97 unittest.main() 98