Download lib/python3.9/idlelib/idle_test/test_browser.py from camenduru/slahmr-test: direct link, hf CLI and curl.
- Browser
- Download file 7.96 kB
-
https://huggingface.co/camenduru/slahmr-test/resolve/main/lib/python3.9/idlelib/idle_test/test_browser.py
- Command line
-
hf download hf://camenduru/slahmr-test/lib/python3.9/idlelib/idle_test/test_browser.py
-
curl -L -o test_browser.py https://huggingface.co/camenduru/slahmr-test/resolve/main/lib/python3.9/idlelib/idle_test/test_browser.py
7.96 kB
| "Test browser, coverage 90%." | |
| from idlelib import browser | |
| from test.support import requires | |
| import unittest | |
| from unittest import mock | |
| from idlelib.idle_test.mock_idle import Func | |
| from collections import deque | |
| import os.path | |
| import pyclbr | |
| from tkinter import Tk | |
| from idlelib.tree import TreeNode | |
| class ModuleBrowserTest(unittest.TestCase): | |
| def setUpClass(cls): | |
| requires('gui') | |
| cls.root = Tk() | |
| cls.root.withdraw() | |
| cls.mb = browser.ModuleBrowser(cls.root, __file__, _utest=True) | |
| def tearDownClass(cls): | |
| cls.mb.close() | |
| cls.root.update_idletasks() | |
| cls.root.destroy() | |
| del cls.root, cls.mb | |
| def test_init(self): | |
| mb = self.mb | |
| eq = self.assertEqual | |
| eq(mb.path, __file__) | |
| eq(pyclbr._modules, {}) | |
| self.assertIsInstance(mb.node, TreeNode) | |
| self.assertIsNotNone(browser.file_open) | |
| def test_settitle(self): | |
| mb = self.mb | |
| self.assertIn(os.path.basename(__file__), mb.top.title()) | |
| self.assertEqual(mb.top.iconname(), 'Module Browser') | |
| def test_rootnode(self): | |
| mb = self.mb | |
| rn = mb.rootnode() | |
| self.assertIsInstance(rn, browser.ModuleBrowserTreeItem) | |
| def test_close(self): | |
| mb = self.mb | |
| mb.top.destroy = Func() | |
| mb.node.destroy = Func() | |
| mb.close() | |
| self.assertTrue(mb.top.destroy.called) | |
| self.assertTrue(mb.node.destroy.called) | |
| del mb.top.destroy, mb.node.destroy | |
| # Nested tree same as in test_pyclbr.py except for supers on C0. C1. | |
| mb = pyclbr | |
| module, fname = 'test', 'test.py' | |
| C0 = mb.Class(module, 'C0', ['base'], fname, 1) | |
| F1 = mb._nest_function(C0, 'F1', 3) | |
| C1 = mb._nest_class(C0, 'C1', 6, ['']) | |
| C2 = mb._nest_class(C1, 'C2', 7) | |
| F3 = mb._nest_function(C2, 'F3', 9) | |
| f0 = mb.Function(module, 'f0', fname, 11) | |
| f1 = mb._nest_function(f0, 'f1', 12) | |
| f2 = mb._nest_function(f1, 'f2', 13) | |
| c1 = mb._nest_class(f0, 'c1', 15) | |
| mock_pyclbr_tree = {'C0': C0, 'f0': f0} | |
| # Adjust C0.name, C1.name so tests do not depend on order. | |
| browser.transform_children(mock_pyclbr_tree, 'test') # C0(base) | |
| browser.transform_children(C0.children) # C1() | |
| # The class below checks that the calls above are correct | |
| # and that duplicate calls have no effect. | |
| class TransformChildrenTest(unittest.TestCase): | |
| def test_transform_module_children(self): | |
| eq = self.assertEqual | |
| transform = browser.transform_children | |
| # Parameter matches tree module. | |
| tcl = list(transform(mock_pyclbr_tree, 'test')) | |
| eq(tcl, [C0, f0]) | |
| eq(tcl[0].name, 'C0(base)') | |
| eq(tcl[1].name, 'f0') | |
| # Check that second call does not change suffix. | |
| tcl = list(transform(mock_pyclbr_tree, 'test')) | |
| eq(tcl[0].name, 'C0(base)') | |
| # Nothing to traverse if parameter name isn't same as tree module. | |
| tcl = list(transform(mock_pyclbr_tree, 'different name')) | |
| eq(tcl, []) | |
| def test_transform_node_children(self): | |
| eq = self.assertEqual | |
| transform = browser.transform_children | |
| # Class with two children, one name altered. | |
| tcl = list(transform(C0.children)) | |
| eq(tcl, [F1, C1]) | |
| eq(tcl[0].name, 'F1') | |
| eq(tcl[1].name, 'C1()') | |
| tcl = list(transform(C0.children)) | |
| eq(tcl[1].name, 'C1()') | |
| # Function with two children. | |
| eq(list(transform(f0.children)), [f1, c1]) | |
| class ModuleBrowserTreeItemTest(unittest.TestCase): | |
| def setUpClass(cls): | |
| cls.mbt = browser.ModuleBrowserTreeItem(fname) | |
| def test_init(self): | |
| self.assertEqual(self.mbt.file, fname) | |
| def test_gettext(self): | |
| self.assertEqual(self.mbt.GetText(), fname) | |
| def test_geticonname(self): | |
| self.assertEqual(self.mbt.GetIconName(), 'python') | |
| def test_isexpandable(self): | |
| self.assertTrue(self.mbt.IsExpandable()) | |
| def test_listchildren(self): | |
| save_rex = browser.pyclbr.readmodule_ex | |
| save_tc = browser.transform_children | |
| browser.pyclbr.readmodule_ex = Func(result=mock_pyclbr_tree) | |
| browser.transform_children = Func(result=[f0, C0]) | |
| try: | |
| self.assertEqual(self.mbt.listchildren(), [f0, C0]) | |
| finally: | |
| browser.pyclbr.readmodule_ex = save_rex | |
| browser.transform_children = save_tc | |
| def test_getsublist(self): | |
| mbt = self.mbt | |
| mbt.listchildren = Func(result=[f0, C0]) | |
| sub0, sub1 = mbt.GetSubList() | |
| del mbt.listchildren | |
| self.assertIsInstance(sub0, browser.ChildBrowserTreeItem) | |
| self.assertIsInstance(sub1, browser.ChildBrowserTreeItem) | |
| self.assertEqual(sub0.name, 'f0') | |
| self.assertEqual(sub1.name, 'C0(base)') | |
| def test_ondoubleclick(self, fopen): | |
| mbt = self.mbt | |
| with mock.patch('os.path.exists', return_value=False): | |
| mbt.OnDoubleClick() | |
| fopen.assert_not_called() | |
| with mock.patch('os.path.exists', return_value=True): | |
| mbt.OnDoubleClick() | |
| fopen.assert_called() | |
| fopen.called_with(fname) | |
| class ChildBrowserTreeItemTest(unittest.TestCase): | |
| def setUpClass(cls): | |
| CBT = browser.ChildBrowserTreeItem | |
| cls.cbt_f1 = CBT(f1) | |
| cls.cbt_C1 = CBT(C1) | |
| cls.cbt_F1 = CBT(F1) | |
| def tearDownClass(cls): | |
| del cls.cbt_C1, cls.cbt_f1, cls.cbt_F1 | |
| def test_init(self): | |
| eq = self.assertEqual | |
| eq(self.cbt_C1.name, 'C1()') | |
| self.assertFalse(self.cbt_C1.isfunction) | |
| eq(self.cbt_f1.name, 'f1') | |
| self.assertTrue(self.cbt_f1.isfunction) | |
| def test_gettext(self): | |
| self.assertEqual(self.cbt_C1.GetText(), 'class C1()') | |
| self.assertEqual(self.cbt_f1.GetText(), 'def f1(...)') | |
| def test_geticonname(self): | |
| self.assertEqual(self.cbt_C1.GetIconName(), 'folder') | |
| self.assertEqual(self.cbt_f1.GetIconName(), 'python') | |
| def test_isexpandable(self): | |
| self.assertTrue(self.cbt_C1.IsExpandable()) | |
| self.assertTrue(self.cbt_f1.IsExpandable()) | |
| self.assertFalse(self.cbt_F1.IsExpandable()) | |
| def test_getsublist(self): | |
| eq = self.assertEqual | |
| CBT = browser.ChildBrowserTreeItem | |
| f1sublist = self.cbt_f1.GetSubList() | |
| self.assertIsInstance(f1sublist[0], CBT) | |
| eq(len(f1sublist), 1) | |
| eq(f1sublist[0].name, 'f2') | |
| eq(self.cbt_F1.GetSubList(), []) | |
| def test_ondoubleclick(self, fopen): | |
| goto = fopen.return_value.gotoline = mock.Mock() | |
| self.cbt_F1.OnDoubleClick() | |
| fopen.assert_called() | |
| goto.assert_called() | |
| goto.assert_called_with(self.cbt_F1.obj.lineno) | |
| # Failure test would have to raise OSError or AttributeError. | |
| class NestedChildrenTest(unittest.TestCase): | |
| "Test that all the nodes in a nested tree are added to the BrowserTree." | |
| def test_nested(self): | |
| queue = deque() | |
| actual_names = [] | |
| # The tree items are processed in breadth first order. | |
| # Verify that processing each sublist hits every node and | |
| # in the right order. | |
| expected_names = ['f0', 'C0(base)', | |
| 'f1', 'c1', 'F1', 'C1()', | |
| 'f2', 'C2', | |
| 'F3'] | |
| CBT = browser.ChildBrowserTreeItem | |
| queue.extend((CBT(f0), CBT(C0))) | |
| while queue: | |
| cb = queue.popleft() | |
| sublist = cb.GetSubList() | |
| queue.extend(sublist) | |
| self.assertIn(cb.name, cb.GetText()) | |
| self.assertIn(cb.GetIconName(), ('python', 'folder')) | |
| self.assertIs(cb.IsExpandable(), sublist != []) | |
| actual_names.append(cb.name) | |
| self.assertEqual(actual_names, expected_names) | |
| if __name__ == '__main__': | |
| unittest.main(verbosity=2) | |