1 '''Test (selected) IDLE Edit menu items.
2
3 Edit modules have their own test files
4 '''
5 from test.support import requires
6 requires('gui')
7 import tkinter as tk
8 from tkinter import ttk
9 import unittest
10 from idlelib import pyshell
11
12 class ESC[4;38;5;81mPasteTest(ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
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
73 if __name__ == '__main__':
74 unittest.main(verbosity=2)