Coverage for idle_test/test_editmenu.py: 3%

53 statements  

« prev     ^ index     » next       coverage.py v7.2.5, created at 2023-05-11 13:22 -0700

1'''Test (selected) IDLE Edit menu items. 

2 

3Edit modules have their own test files 

4''' 

5from test.support import requires 

6requires('gui') 

7import tkinter as tk 

8from tkinter import ttk 

9import unittest 

10from idlelib import pyshell 

11 

12class PasteTest(unittest.TestCase): 

13 '''Test pasting into widgets that allow pasting. 

14 

15 On X11, replacing selections requires tk fix. 

16 ''' 

17 @classmethod 

18 def setUpClass(cls): 

19 cls.root = root = tk.Tk() 

20 cls.root.withdraw() 

21 pyshell.fix_x11_paste(root) 

22 cls.text = tk.Text(root) 

23 cls.entry = tk.Entry(root) 

24 cls.tentry = ttk.Entry(root) 

25 cls.spin = tk.Spinbox(root) 

26 root.clipboard_clear() 

27 root.clipboard_append('two') 

28 

29 @classmethod 

30 def tearDownClass(cls): 

31 del cls.text, cls.entry, cls.tentry 

32 cls.root.clipboard_clear() 

33 cls.root.update_idletasks() 

34 cls.root.destroy() 

35 del cls.root 

36 

37 def test_paste_text(self): 

38 "Test pasting into text with and without a selection." 

39 text = self.text 

40 for tag, ans in ('', 'onetwo\n'), ('sel', 'two\n'): 

41 with self.subTest(tag=tag, ans=ans): 

42 text.delete('1.0', 'end') 

43 text.insert('1.0', 'one', tag) 

44 text.event_generate('<<Paste>>') 

45 self.assertEqual(text.get('1.0', 'end'), ans) 

46 

47 def test_paste_entry(self): 

48 "Test pasting into an entry with and without a selection." 

49 # Generated <<Paste>> fails for tk entry without empty select 

50 # range for 'no selection'. Live widget works fine. 

51 for entry in self.entry, self.tentry: 

52 for end, ans in (0, 'onetwo'), ('end', 'two'): 

53 with self.subTest(entry=entry, end=end, ans=ans): 

54 entry.delete(0, 'end') 

55 entry.insert(0, 'one') 

56 entry.select_range(0, end) 

57 entry.event_generate('<<Paste>>') 

58 self.assertEqual(entry.get(), ans) 

59 

60 def test_paste_spin(self): 

61 "Test pasting into a spinbox with and without a selection." 

62 # See note above for entry. 

63 spin = self.spin 

64 for end, ans in (0, 'onetwo'), ('end', 'two'): 

65 with self.subTest(end=end, ans=ans): 

66 spin.delete(0, 'end') 

67 spin.insert(0, 'one') 

68 spin.selection('range', 0, end) # see note 

69 spin.event_generate('<<Paste>>') 

70 self.assertEqual(spin.get(), ans) 

71 

72 

73if __name__ == '__main__': 

74 unittest.main(verbosity=2)