mirror of
https://github.com/python/cpython
synced 2026-11-13 17:47:24 +03:00
DevDanzin bug 73: In idlelib.idle_test, test_xyz.py files should end with
if __name__ == '__main__':
unittest.main(verbosity=2)
The default exit is True. This need not and should not be added.
5 files add the confusing equivalent exit=2 ("why the weird value?"),
4 files add exit=False. This is nonsensical when there is nothing more to run;
main will immediately exit anyway. When running a test file from an IDLE editor,
this argument has no visible effect. However, a Claude-based
bug finder claims that in other circumstances (such as a program running
the test in a shell), the good test may falsely fail. Even if this is
not true, it can only confuse a reader.
(The only place in idlelib for exit=False is in idlelib/abc.py files where the unittest
is followed by an htest. The default exit=True exits the process, skipping the htest.)
As part of editing the discussion of this in idle_test/htest.py, I clarified other things.
(cherry picked from commit c20318bf09)
Co-authored-by: Terry Jan Reedy <tjreedy@udel.edu>
86 lines
2.4 KiB
Python
86 lines
2.4 KiB
Python
"Test pathbrowser, coverage 95%."
|
|
|
|
from idlelib import pathbrowser
|
|
import unittest
|
|
from test.support import requires
|
|
from tkinter import Tk
|
|
|
|
import os.path
|
|
import pyclbr # for _modules
|
|
import sys # for sys.path
|
|
|
|
from idlelib.idle_test.mock_idle import Func
|
|
import idlelib # for __file__
|
|
from idlelib import browser
|
|
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('')
|
|
d.GetSubList()
|
|
self.assertEqual('', d.GetText())
|
|
|
|
dir = os.path.split(os.path.abspath(idlelib.__file__))[0]
|
|
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')
|
|
sub = p.GetSubList()
|
|
self.assertEqual(len(sub), len(sys.path))
|
|
self.assertEqual(type(sub[0]), pathbrowser.DirBrowserTreeItem)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main(verbosity=2)
|