creating ModuleBrowserTreeItem as the rootnode for
the tree and subsequently in the children.
"""
- global file_open
- if not (_htest or _utest):
- file_open = pyshell.flist.open
self.master = master
self.path = path
self._htest = _htest
def init(self):
"Create browser tkinter widgets, including the tree."
+ global file_open
root = self.master
- # reset pyclbr
+ flist = (pyshell.flist if not (self._htest or self._utest)
+ else pyshell.PyShellFileList(root))
+ file_open = flist.open
pyclbr._modules.clear()
+
# create top
self.top = top = ListedToplevel(root)
top.protocol("WM_DELETE_WINDOW", self.close)
(root.winfo_rootx(), root.winfo_rooty() + 200))
self.settitle()
top.focus_set()
+
# create scrolled canvas
theme = idleConf.CurrentTheme()
background = idleConf.GetHighlight(theme, 'normal')['background']
def nested_in_class(): pass
def closure():
class Nested_in_closure: pass
- global file_open
- file_open = pyshell.PyShellFileList(parent).open
ModuleBrowser(parent, file, _htest=True)
if __name__ == "__main__":
def open_path_browser(self, event=None):
from idlelib import pathbrowser
- pathbrowser.PathBrowser(self.flist)
+ pathbrowser.PathBrowser(self.root)
return "break"
def open_turtle_demo(self, event = None):
(Higher, because should exclude 3 lines that .coveragerc won't exclude.)
"""
+from collections import deque
import os.path
-import unittest
import pyclbr
+from tkinter import Tk
-from idlelib import browser, filelist
-from idlelib.tree import TreeNode
from test.support import requires
+import unittest
from unittest import mock
-from tkinter import Tk
from idlelib.idle_test.mock_idle import Func
-from collections import deque
+
+from idlelib import browser
+from idlelib import filelist
+from idlelib.tree import TreeNode
class ModuleBrowserTest(unittest.TestCase):
@classmethod
def tearDownClass(cls):
cls.mb.close()
+ cls.root.update_idletasks()
cls.root.destroy()
del cls.root, cls.mb
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.assertEqual(sub0.name, 'f0')
self.assertEqual(sub1.name, 'C0(base)')
-
- def test_ondoubleclick(self):
+ @mock.patch('idlelib.browser.file_open')
+ def test_ondoubleclick(self, fopen):
mbt = self.mbt
- fopen = browser.file_open = mock.Mock()
with mock.patch('os.path.exists', return_value=False):
mbt.OnDoubleClick()
fopen.assert_called()
fopen.called_with(fname)
- del browser.file_open
-
class ChildBrowserTreeItemTest(unittest.TestCase):
eq(self.cbt_F1.GetSubList(), [])
- def test_ondoubleclick(self):
- fopen = browser.file_open = mock.Mock()
+ @mock.patch('idlelib.browser.file_open')
+ 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)
- del browser.file_open
# Failure test would have to raise OSError or AttributeError.
+""" Test idlelib.pathbrowser.
+"""
+
+
+import os.path
+import pyclbr # for _modules
+import sys # for sys.path
+from tkinter import Tk
+
+from test.support import requires
import unittest
-import os
-import sys
-import idlelib
+from idlelib.idle_test.mock_idle import Func
+
+import idlelib # for __file__
+from idlelib import browser
from idlelib import pathbrowser
+from idlelib.tree import TreeNode
+
class PathBrowserTest(unittest.TestCase):
+ @classmethod
+ def setUpClass(cls):
+ requires('gui')
+ cls.root = Tk()
+ cls.root.withdraw()
+ cls.pb = pathbrowser.PathBrowser(cls.root, _utest=True)
+
+ @classmethod
+ def tearDownClass(cls):
+ cls.pb.close()
+ cls.root.update_idletasks()
+ cls.root.destroy()
+ del cls.root, cls.pb
+
+ def test_init(self):
+ pb = self.pb
+ eq = self.assertEqual
+ eq(pb.master, self.root)
+ eq(pyclbr._modules, {})
+ self.assertIsInstance(pb.node, TreeNode)
+ self.assertIsNotNone(browser.file_open)
+
+ def test_settitle(self):
+ pb = self.pb
+ self.assertEqual(pb.top.title(), 'Path Browser')
+ self.assertEqual(pb.top.iconname(), 'Path Browser')
+
+ def test_rootnode(self):
+ pb = self.pb
+ rn = pb.rootnode()
+ self.assertIsInstance(rn, pathbrowser.PathBrowserTreeItem)
+
+ def test_close(self):
+ pb = self.pb
+ pb.top.destroy = Func()
+ pb.node.destroy = Func()
+ pb.close()
+ self.assertTrue(pb.top.destroy.called)
+ self.assertTrue(pb.node.destroy.called)
+ del pb.top.destroy, pb.node.destroy
+
+
+class DirBrowserTreeItemTest(unittest.TestCase):
+
def test_DirBrowserTreeItem(self):
# Issue16226 - make sure that getting a sublist works
d = pathbrowser.DirBrowserTreeItem('')
self.assertEqual(d.ispackagedir(dir), True)
self.assertEqual(d.ispackagedir(dir + '/Icons'), False)
+
+class PathBrowserTreeItemTest(unittest.TestCase):
+
def test_PathBrowserTreeItem(self):
p = pathbrowser.PathBrowserTreeItem()
self.assertEqual(p.GetText(), 'sys.path')
self.assertEqual(len(sub), len(sys.path))
self.assertEqual(type(sub[0]), pathbrowser.DirBrowserTreeItem)
+
if __name__ == '__main__':
unittest.main(verbosity=2, exit=False)
class PathBrowser(ModuleBrowser):
- def __init__(self, flist, *, _htest=False, _utest=False):
+ def __init__(self, master, *, _htest=False, _utest=False):
"""
_htest - bool, change box location when running htest
"""
+ self.master = master
self._htest = _htest
self._utest = _utest
- self.init(flist)
+ self.init()
def settitle(self):
"Set window titles."
def _path_browser(parent): # htest #
- flist = PyShellFileList(parent)
- PathBrowser(flist, _htest=True)
+ PathBrowser(parent, _htest=True)
parent.mainloop()
if __name__ == "__main__":
--- /dev/null
+IDLE: Fix old and new bugs in pathbrowser; improve tests.
+Patch mostly by Cheryl Sabella.