| 
									
										
										
										
											2016-06-11 02:06:26 -04:00
										 |  |  | '''Test (selected) IDLE Edit menu items.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-28 22:14:26 +03:00
										 |  |  | Edit modules have their own test files | 
					
						
							| 
									
										
										
										
											2016-06-11 02:06:26 -04:00
										 |  |  | '''
 | 
					
						
							|  |  |  | from test.support import requires | 
					
						
							|  |  |  | requires('gui') | 
					
						
							|  |  |  | import tkinter as tk | 
					
						
							| 
									
										
										
										
											2016-06-11 02:10:59 -04:00
										 |  |  | from tkinter import ttk | 
					
						
							| 
									
										
										
										
											2016-06-11 02:06:26 -04:00
										 |  |  | import unittest | 
					
						
							| 
									
										
										
										
											2016-06-11 02:10:59 -04:00
										 |  |  | from idlelib import pyshell | 
					
						
							| 
									
										
										
										
											2016-06-11 02:06:26 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | class PasteTest(unittest.TestCase): | 
					
						
							|  |  |  |     '''Test pasting into widgets that allow pasting.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     On X11, replacing selections requires tk fix. | 
					
						
							|  |  |  |     '''
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     def setUpClass(cls): | 
					
						
							|  |  |  |         cls.root = root = tk.Tk() | 
					
						
							| 
									
										
										
										
											2016-08-31 21:09:02 -04:00
										 |  |  |         cls.root.withdraw() | 
					
						
							| 
									
										
										
										
											2016-06-11 02:10:59 -04:00
										 |  |  |         pyshell.fix_x11_paste(root) | 
					
						
							| 
									
										
										
										
											2016-06-11 02:06:26 -04:00
										 |  |  |         cls.text = tk.Text(root) | 
					
						
							|  |  |  |         cls.entry = tk.Entry(root) | 
					
						
							| 
									
										
										
										
											2016-06-11 02:10:59 -04:00
										 |  |  |         cls.tentry = ttk.Entry(root) | 
					
						
							| 
									
										
										
										
											2016-06-11 02:06:26 -04:00
										 |  |  |         cls.spin = tk.Spinbox(root) | 
					
						
							|  |  |  |         root.clipboard_clear() | 
					
						
							|  |  |  |         root.clipboard_append('two') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     def tearDownClass(cls): | 
					
						
							| 
									
										
										
										
											2016-06-11 02:10:59 -04:00
										 |  |  |         del cls.text, cls.entry, cls.tentry | 
					
						
							| 
									
										
										
										
											2016-06-11 02:06:26 -04:00
										 |  |  |         cls.root.clipboard_clear() | 
					
						
							|  |  |  |         cls.root.update_idletasks() | 
					
						
							|  |  |  |         cls.root.destroy() | 
					
						
							|  |  |  |         del cls.root | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_paste_text(self): | 
					
						
							|  |  |  |         "Test pasting into text with and without a selection." | 
					
						
							|  |  |  |         text = self.text | 
					
						
							|  |  |  |         for tag, ans in ('', 'onetwo\n'), ('sel', 'two\n'): | 
					
						
							|  |  |  |             with self.subTest(tag=tag, ans=ans): | 
					
						
							|  |  |  |                 text.delete('1.0', 'end') | 
					
						
							|  |  |  |                 text.insert('1.0', 'one', tag) | 
					
						
							|  |  |  |                 text.event_generate('<<Paste>>') | 
					
						
							|  |  |  |                 self.assertEqual(text.get('1.0', 'end'), ans) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_paste_entry(self): | 
					
						
							|  |  |  |         "Test pasting into an entry with and without a selection." | 
					
						
							| 
									
										
										
										
											2016-06-11 02:10:59 -04:00
										 |  |  |         # Generated <<Paste>> fails for tk entry without empty select | 
					
						
							|  |  |  |         # range for 'no selection'.  Live widget works fine. | 
					
						
							|  |  |  |         for entry in self.entry, self.tentry: | 
					
						
							|  |  |  |             for end, ans in (0, 'onetwo'), ('end', 'two'): | 
					
						
							|  |  |  |                 with self.subTest(entry=entry, end=end, ans=ans): | 
					
						
							|  |  |  |                     entry.delete(0, 'end') | 
					
						
							|  |  |  |                     entry.insert(0, 'one') | 
					
						
							|  |  |  |                     entry.select_range(0, end) | 
					
						
							|  |  |  |                     entry.event_generate('<<Paste>>') | 
					
						
							|  |  |  |                     self.assertEqual(entry.get(), ans) | 
					
						
							| 
									
										
										
										
											2016-06-11 02:06:26 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_paste_spin(self): | 
					
						
							|  |  |  |         "Test pasting into a spinbox with and without a selection." | 
					
						
							|  |  |  |         # See note above for entry. | 
					
						
							|  |  |  |         spin = self.spin | 
					
						
							|  |  |  |         for end, ans in (0, 'onetwo'), ('end', 'two'): | 
					
						
							|  |  |  |             with self.subTest(end=end, ans=ans): | 
					
						
							|  |  |  |                 spin.delete(0, 'end') | 
					
						
							|  |  |  |                 spin.insert(0, 'one') | 
					
						
							|  |  |  |                 spin.selection('range', 0, end)  # see note | 
					
						
							|  |  |  |                 spin.event_generate('<<Paste>>') | 
					
						
							|  |  |  |                 self.assertEqual(spin.get(), ans) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if __name__ == '__main__': | 
					
						
							|  |  |  |     unittest.main(verbosity=2) |