16e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy"""Unit tests for idlelib.AutoExpand""" 26e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedyimport unittest 36e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedyfrom test.test_support import requires 46e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedyfrom Tkinter import Text, Tk 56e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy#from idlelib.idle_test.mock_tk import Text 66e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedyfrom idlelib.AutoExpand import AutoExpand 76e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy 86e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy 96e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedyclass Dummy_Editwin: 106e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy # AutoExpand.__init__ only needs .text 116e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy def __init__(self, text): 126e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy self.text = text 136e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy 146e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedyclass AutoExpandTest(unittest.TestCase): 156e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy 166e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy @classmethod 176e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy def setUpClass(cls): 1890bcdd71a5802faeb2d64f1d20914d01afb2f249Zachary Ware if 'Tkinter' in str(Text): 196e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy requires('gui') 206e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy cls.tk = Tk() 216e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy cls.text = Text(cls.tk) 226e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy else: 236e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy cls.text = Text() 246e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy cls.auto_expand = AutoExpand(Dummy_Editwin(cls.text)) 256e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy 266e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy @classmethod 276e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy def tearDownClass(cls): 28bbf29ee6e4c5d46dfd48685cd65ef4bdd132dd40Terry Jan Reedy del cls.text, cls.auto_expand 296e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy if hasattr(cls, 'tk'): 306e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy cls.tk.destroy() 316e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy del cls.tk 326e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy 336e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy def tearDown(self): 346e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy self.text.delete('1.0', 'end') 356e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy 366e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy def test_get_prevword(self): 376e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy text = self.text 386e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy previous = self.auto_expand.getprevword 396e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy equal = self.assertEqual 406e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy 416e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy equal(previous(), '') 426e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy 436e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy text.insert('insert', 't') 446e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy equal(previous(), 't') 456e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy 466e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy text.insert('insert', 'his') 476e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy equal(previous(), 'this') 486e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy 496e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy text.insert('insert', ' ') 506e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy equal(previous(), '') 516e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy 526e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy text.insert('insert', 'is') 536e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy equal(previous(), 'is') 546e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy 556e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy text.insert('insert', '\nsample\nstring') 566e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy equal(previous(), 'string') 576e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy 586e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy text.delete('3.0', 'insert') 596e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy equal(previous(), '') 606e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy 616e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy text.delete('1.0', 'end') 626e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy equal(previous(), '') 636e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy 646e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy def test_before_only(self): 656e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy previous = self.auto_expand.getprevword 666e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy expand = self.auto_expand.expand_word_event 676e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy equal = self.assertEqual 686e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy 696e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy self.text.insert('insert', 'ab ac bx ad ab a') 706e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy equal(self.auto_expand.getwords(), ['ab', 'ad', 'ac', 'a']) 716e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy expand('event') 726e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy equal(previous(), 'ab') 736e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy expand('event') 746e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy equal(previous(), 'ad') 756e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy expand('event') 766e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy equal(previous(), 'ac') 776e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy expand('event') 786e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy equal(previous(), 'a') 796e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy 806e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy def test_after_only(self): 816e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy # Also add punctuation 'noise' that shoud be ignored. 826e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy text = self.text 836e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy previous = self.auto_expand.getprevword 846e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy expand = self.auto_expand.expand_word_event 856e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy equal = self.assertEqual 866e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy 876e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy text.insert('insert', 'a, [ab] ac: () bx"" cd ac= ad ya') 886e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy text.mark_set('insert', '1.1') 896e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy equal(self.auto_expand.getwords(), ['ab', 'ac', 'ad', 'a']) 906e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy expand('event') 916e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy equal(previous(), 'ab') 926e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy expand('event') 936e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy equal(previous(), 'ac') 946e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy expand('event') 956e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy equal(previous(), 'ad') 966e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy expand('event') 976e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy equal(previous(), 'a') 986e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy 996e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy def test_both_before_after(self): 1006e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy text = self.text 1016e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy previous = self.auto_expand.getprevword 1026e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy expand = self.auto_expand.expand_word_event 1036e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy equal = self.assertEqual 1046e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy 1056e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy text.insert('insert', 'ab xy yz\n') 1066e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy text.insert('insert', 'a ac by ac') 1076e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy 1086e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy text.mark_set('insert', '2.1') 1096e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy equal(self.auto_expand.getwords(), ['ab', 'ac', 'a']) 1106e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy expand('event') 1116e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy equal(previous(), 'ab') 1126e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy expand('event') 1136e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy equal(previous(), 'ac') 1146e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy expand('event') 1156e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy equal(previous(), 'a') 1166e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy 1176e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy def test_other_expand_cases(self): 1186e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy text = self.text 1196e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy expand = self.auto_expand.expand_word_event 1206e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy equal = self.assertEqual 1216e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy 1226e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy # no expansion candidate found 1236e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy equal(self.auto_expand.getwords(), []) 1246e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy equal(expand('event'), 'break') 1256e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy 1266e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy text.insert('insert', 'bx cy dz a') 1276e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy equal(self.auto_expand.getwords(), []) 1286e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy 1296e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy # reset state by successfully expanding once 1306e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy # move cursor to another position and expand again 1316e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy text.insert('insert', 'ac xy a ac ad a') 1326e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy text.mark_set('insert', '1.7') 1336e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy expand('event') 1346e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy initial_state = self.auto_expand.state 1356e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy text.mark_set('insert', '1.end') 1366e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy expand('event') 1376e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy new_state = self.auto_expand.state 1386e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy self.assertNotEqual(initial_state, new_state) 1396e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy 1406e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedyif __name__ == '__main__': 1416e66cb03b7b8ee12d95f66175fe8061cdb188fa4Terry Jan Reedy unittest.main(verbosity=2) 142