mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	Merge with 3.5
This commit is contained in:
		
						commit
						b5c43f4c01
					
				
					 2 changed files with 85 additions and 1 deletions
				
			
		|  | @ -1403,6 +1403,17 @@ def close(self): | ||||||
|         self.shell.close() |         self.shell.close() | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | def fix_x11_paste(root): | ||||||
|  |     "Make paste replace selection on x11.  See issue #5124." | ||||||
|  |     if root._windowingsystem == 'x11': | ||||||
|  |         for cls in 'Text', 'Entry', 'Spinbox': | ||||||
|  |             root.bind_class( | ||||||
|  |                 cls, | ||||||
|  |                 '<<Paste>>', | ||||||
|  |                 'catch {%W delete sel.first sel.last}\n' + | ||||||
|  |                         root.bind_class(cls, '<<Paste>>')) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| usage_msg = """\ | usage_msg = """\ | ||||||
| 
 | 
 | ||||||
| USAGE: idle  [-deins] [-t title] [file]* | USAGE: idle  [-deins] [-t title] [file]* | ||||||
|  | @ -1535,8 +1546,10 @@ def main(): | ||||||
|                                     'editor-on-startup', type='bool') |                                     'editor-on-startup', type='bool') | ||||||
|     enable_edit = enable_edit or edit_start |     enable_edit = enable_edit or edit_start | ||||||
|     enable_shell = enable_shell or not enable_edit |     enable_shell = enable_shell or not enable_edit | ||||||
|  | 
 | ||||||
|     # start editor and/or shell windows: |     # start editor and/or shell windows: | ||||||
|     root = Tk(className="Idle") |     root = Tk(className="Idle") | ||||||
|  |     root.withdraw() | ||||||
| 
 | 
 | ||||||
|     # set application icon |     # set application icon | ||||||
|     icondir = os.path.join(os.path.dirname(__file__), 'Icons') |     icondir = os.path.join(os.path.dirname(__file__), 'Icons') | ||||||
|  | @ -1551,7 +1564,7 @@ def main(): | ||||||
|         root.wm_iconphoto(True, *icons) |         root.wm_iconphoto(True, *icons) | ||||||
| 
 | 
 | ||||||
|     fixwordbreaks(root) |     fixwordbreaks(root) | ||||||
|     root.withdraw() |     fix_x11_paste(root) | ||||||
|     flist = PyShellFileList(root) |     flist = PyShellFileList(root) | ||||||
|     macosx.setupApp(root, flist) |     macosx.setupApp(root, flist) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										71
									
								
								Lib/idlelib/idle_test/test_editmenu.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								Lib/idlelib/idle_test/test_editmenu.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,71 @@ | ||||||
|  | '''Test (selected) IDLE Edit menu items. | ||||||
|  | 
 | ||||||
|  | Edit modules have their own test files files | ||||||
|  | ''' | ||||||
|  | from test.support import requires | ||||||
|  | requires('gui') | ||||||
|  | import tkinter as tk | ||||||
|  | import unittest | ||||||
|  | from idlelib import PyShell | ||||||
|  | 
 | ||||||
|  | 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() | ||||||
|  |         PyShell.fix_x11_paste(root) | ||||||
|  |         cls.text = tk.Text(root) | ||||||
|  |         cls.entry = tk.Entry(root) | ||||||
|  |         cls.spin = tk.Spinbox(root) | ||||||
|  |         root.clipboard_clear() | ||||||
|  |         root.clipboard_append('two') | ||||||
|  | 
 | ||||||
|  |     @classmethod | ||||||
|  |     def tearDownClass(cls): | ||||||
|  |         del cls.text, cls.entry, cls.spin | ||||||
|  |         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." | ||||||
|  |         # On 3.6, generated <<Paste>> fails without empty select range | ||||||
|  |         # for 'no selection'.  Live widget works fine. | ||||||
|  |         entry = self.entry | ||||||
|  |         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)  # see note | ||||||
|  |                 entry.event_generate('<<Paste>>') | ||||||
|  |                 self.assertEqual(entry.get(), ans) | ||||||
|  | 
 | ||||||
|  |     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) | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Terry Jan Reedy
						Terry Jan Reedy