"Test , coverage 17%." from idlelib import iomenu import unittest from test.support import requires from tkinter import Tk from idlelib.editor import EditorWindow from idlelib import util from idlelib.idle_test.mock_idle import Func # 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. class IOBindingTest(unittest.TestCase): @classmethod def setUpClass(cls): requires('gui') cls.root = Tk() cls.root.withdraw() cls.editwin = EditorWindow(root=cls.root) cls.io = iomenu.IOBinding(cls.editwin) @classmethod def tearDownClass(cls): cls.io.close() 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): 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 # Make the editor temporarily look like Shell. self.editwin.interp = None 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 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) 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('')) if __name__ == '__main__': unittest.main(verbosity=2)