| 
									
										
										
										
											2019-11-12 03:54:10 -07:00
										 |  |  | "Test , coverage 17%." | 
					
						
							| 
									
										
										
										
											2015-03-24 19:46:54 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-02 00:10:39 -04:00
										 |  |  | from idlelib import iomenu | 
					
						
							| 
									
										
										
										
											2018-06-18 04:47:59 -04:00
										 |  |  | import unittest | 
					
						
							|  |  |  | from test.support import requires | 
					
						
							|  |  |  | from tkinter import Tk | 
					
						
							|  |  |  | from idlelib.editor import EditorWindow | 
					
						
							| 
									
										
										
										
											2022-08-02 00:10:39 -04:00
										 |  |  | from idlelib import util | 
					
						
							|  |  |  | from idlelib.idle_test.mock_idle import Func | 
					
						
							| 
									
										
										
										
											2018-06-18 04:47:59 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-24 04:43:56 -04:00
										 |  |  | # Fail if either tokenize.open and t.detect_encoding does not exist. | 
					
						
							|  |  |  | # These are used in loadfile and encode. | 
					
						
							|  |  |  | # Also used in pyshell.MI.execfile and runscript.tabnanny. | 
					
						
							|  |  |  | from tokenize import open, detect_encoding | 
					
						
							|  |  |  | # Remove when we have proper tests that use both. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-18 04:47:59 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-12 03:54:10 -07:00
										 |  |  | class IOBindingTest(unittest.TestCase): | 
					
						
							| 
									
										
										
										
											2018-06-18 04:47:59 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     def setUpClass(cls): | 
					
						
							|  |  |  |         requires('gui') | 
					
						
							|  |  |  |         cls.root = Tk() | 
					
						
							|  |  |  |         cls.root.withdraw() | 
					
						
							|  |  |  |         cls.editwin = EditorWindow(root=cls.root) | 
					
						
							| 
									
										
										
										
											2019-11-12 03:54:10 -07:00
										 |  |  |         cls.io = iomenu.IOBinding(cls.editwin) | 
					
						
							| 
									
										
										
										
											2018-06-18 04:47:59 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     def tearDownClass(cls): | 
					
						
							| 
									
										
										
										
											2019-11-12 03:54:10 -07:00
										 |  |  |         cls.io.close() | 
					
						
							| 
									
										
										
										
											2018-06-18 04:47:59 -04:00
										 |  |  |         cls.editwin._close() | 
					
						
							|  |  |  |         del cls.editwin | 
					
						
							|  |  |  |         cls.root.update_idletasks() | 
					
						
							|  |  |  |         for id in cls.root.tk.call('after', 'info'): | 
					
						
							|  |  |  |             cls.root.after_cancel(id)  # Need for EditorWindow. | 
					
						
							|  |  |  |         cls.root.destroy() | 
					
						
							|  |  |  |         del cls.root | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_init(self): | 
					
						
							| 
									
										
										
										
											2019-11-12 03:54:10 -07:00
										 |  |  |         self.assertIs(self.io.editwin, self.editwin) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_fixnewlines_end(self): | 
					
						
							|  |  |  |         eq = self.assertEqual | 
					
						
							|  |  |  |         io = self.io | 
					
						
							|  |  |  |         fix = io.fixnewlines | 
					
						
							|  |  |  |         text = io.editwin.text | 
					
						
							| 
									
										
										
										
											2022-08-02 00:10:39 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |         # Make the editor temporarily look like Shell. | 
					
						
							| 
									
										
										
										
											2019-11-12 03:54:10 -07:00
										 |  |  |         self.editwin.interp = None | 
					
						
							| 
									
										
										
										
											2022-08-02 00:10:39 -04:00
										 |  |  |         shelltext = '>>> if 1' | 
					
						
							|  |  |  |         self.editwin.get_prompt_text = Func(result=shelltext) | 
					
						
							|  |  |  |         eq(fix(), shelltext)  # Get... call and '\n' not added. | 
					
						
							|  |  |  |         del self.editwin.interp, self.editwin.get_prompt_text | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-12 03:54:10 -07:00
										 |  |  |         text.insert(1.0, 'a') | 
					
						
							|  |  |  |         eq(fix(), 'a'+io.eol_convention) | 
					
						
							|  |  |  |         eq(text.get('1.0', 'end-1c'), 'a\n') | 
					
						
							|  |  |  |         eq(fix(), 'a'+io.eol_convention) | 
					
						
							| 
									
										
										
										
											2015-03-24 19:46:54 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-02-13 00:04:48 +00:00
										 |  |  | def _extension_in_filetypes(extension): | 
					
						
							|  |  |  |     return any( | 
					
						
							|  |  |  |         f'*{extension}' in filetype_tuple[1] | 
					
						
							|  |  |  |         for filetype_tuple in iomenu.IOBinding.filetypes | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class FiletypesTest(unittest.TestCase): | 
					
						
							|  |  |  |     def test_python_source_files(self): | 
					
						
							|  |  |  |         for extension in util.py_extensions: | 
					
						
							|  |  |  |             with self.subTest(extension=extension): | 
					
						
							|  |  |  |                 self.assertTrue( | 
					
						
							|  |  |  |                     _extension_in_filetypes(extension) | 
					
						
							|  |  |  |                 ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_text_files(self): | 
					
						
							|  |  |  |         self.assertTrue(_extension_in_filetypes('.txt')) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_all_files(self): | 
					
						
							|  |  |  |         self.assertTrue(_extension_in_filetypes('')) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-24 19:46:54 +02:00
										 |  |  | if __name__ == '__main__': | 
					
						
							| 
									
										
										
										
											2016-08-31 00:50:55 -04:00
										 |  |  |     unittest.main(verbosity=2) |