Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit db4e5c5

Browse files
committed
Issue #15392: Create a unittest framework for IDLE.
Preliminary patch by Rajagopalasarma Jayakrishnan.
1 parent ecf0851 commit db4e5c5

9 files changed

Lines changed: 118 additions & 2 deletions

File tree

Lib/idlelib/CallTips.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,4 +264,6 @@ def test_non_callables():
264264
print("%d of %d tests failed" % (num_fail, num_tests))
265265

266266
if __name__ == '__main__':
267-
main()
267+
#main()
268+
from unittest import main
269+
main('idlelib.idle_test.test_calltips', verbosity=2, exit=False)

Lib/idlelib/PathBrowser.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,4 +95,5 @@ def main():
9595
mainloop()
9696

9797
if __name__ == "__main__":
98-
main()
98+
from unittest import main
99+
main('idlelib.idle_test.test_pathbrowser', verbosity=2, exit=False)

Lib/idlelib/idle_test/@README.txt

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
README FOR IDLE TESTS IN IDLELIB.IDLE_TEST
2+
3+
The idle directory, idlelib, has over 60 xyz.py files. The idle_test
4+
subdirectory should contain a test_xyy.py for each one. (For test modules,
5+
make 'xyz' lower case.) Each should start with the following cut-paste
6+
template, with the blanks after after '.'. 'as', and '_' filled in.
7+
---
8+
import unittest
9+
import idlelib. as
10+
11+
class Test_(unittest.TestCase):
12+
13+
def test_(self):
14+
15+
if __name__ == '__main__':
16+
unittest.main(verbosity=2, exit=2)
17+
---
18+
Idle tests are run with unittest; do not use regrtest's test_main.
19+
20+
Once test_xyy is written, the following should go at the end of xyy.py,
21+
with xyz (lowercased) added after 'test_'.
22+
---
23+
if __name__ == "__main__":
24+
import unittest
25+
unittest.main('idlelib.idle_test.test_', verbosity=2, exit=False)
26+
---
27+
28+
In Idle, pressing F5 in an editor window with either xyz.py or test_xyz.py
29+
loaded will then run the test with the version of Python running Idle and
30+
tracebacks will appear in the Shell window. The options are appropriate for
31+
developers running (as opposed to importing) either type of file during
32+
development: verbosity=2 lists all test_y methods; exit=False avoids a
33+
spurious sys.exit traceback when running in Idle. The following command
34+
lines also run test_xyz.py
35+
36+
python -m idlelib.xyz # With the capitalization of the xyz module
37+
python -m unittest -v idlelib.idle_test.test_xyz
38+
39+
To run all idle tests either interactively ('>>>', with unittest imported)
40+
or from a command line, use one of the following.
41+
42+
>>> unittest.main('idlelib.idle_test', verbosity=2, exit=False)
43+
python -m unittest -v idlelib.idle_test
44+
python -m test.test_idle
45+
python -m test test_idle
46+
47+
The idle tests are 'discovered' in idlelib.idle_test.__init__.load_tests,
48+
which is also imported into test.test_idle. Normally, neither file should be
49+
changed when working on individual test modules. The last command runs runs
50+
unittest indirectly through regrtest. The same happens when the entire test
51+
suite is run with 'python -m test'. So it must work for buildbots to stay green.
52+
53+
To run an individual Testcase or test method, extend the
54+
dotted name given to unittest on the command line.
55+
56+
python -m unittest -v idlelib.idle_test.text_xyz.Test_case.test_meth
57+
58+
To disable test/test_idle.py, there are at least two choices.
59+
a. Comment out 'load_tests' line, no no tests are discovered (simple and safe);
60+
Running no tests passes, so there is no indication that nothing was run.
61+
b.Before that line, make module an unexpected skip for regrtest with
62+
import unittest; raise unittest.SkipTest('skip for buildbots')
63+
When run directly with unittest, this causes a normal exit and traceback.

Lib/idlelib/idle_test/__init__.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
from os.path import dirname
2+
3+
def load_tests(loader, standard_tests, pattern):
4+
this_dir = dirname(__file__)
5+
top_dir = dirname(dirname(this_dir))
6+
package_tests = loader.discover(start_dir=this_dir, pattern='test*.py',
7+
top_level_dir=top_dir)
8+
standard_tests.addTests(package_tests)
9+
return standard_tests
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import unittest
2+
import idlelib.CallTips as ct
3+
4+
class Test_get_entity(unittest.TestCase):
5+
def test_bad_entity(self):
6+
self.assertIsNone(ct.get_entity('1/0'))
7+
def test_good_entity(self):
8+
self.assertIs(ct.get_entity('int'), int)
9+
10+
if __name__ == '__main__':
11+
unittest.main(verbosity=2, exit=False)
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import unittest
2+
import idlelib.PathBrowser as PathBrowser
3+
4+
class PathBrowserTest(unittest.TestCase):
5+
6+
def test_DirBrowserTreeItem(self):
7+
# Issue16226 - make sure that getting a sublist works
8+
d = PathBrowser.DirBrowserTreeItem('')
9+
d.GetSubList()
10+
11+
if __name__ == '__main__':
12+
unittest.main(verbosity=2, exit=False)

Lib/test/test_idle.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# Skip test if tkinter wasn't built or idlelib was deleted.
2+
from test.support import import_module
3+
import_module('tkinter') # discard return
4+
itdir = import_module('idlelib.idle_test')
5+
6+
# Without test_main present, regrtest.runtest_inner (line1219)
7+
# imitates unittest.main by calling
8+
# unittest.TestLoader().loadTestsFromModule(this_module)
9+
# which look for load_tests and uses it if found.
10+
load_tests = itdir.load_tests
11+
12+
if __name__ == '__main__':
13+
import unittest
14+
unittest.main(verbosity=2, exit=False)

Misc/ACKS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -575,6 +575,7 @@ Jack Jansen
575575
Bill Janssen
576576
Thomas Jarosch
577577
Juhana Jauhiainen
578+
Rajagopalasarma Jayakrishnan
578579
Zbigniew Jędrzejewski-Szmek
579580
Julien Jehannet
580581
Drew Jenkins

Misc/NEWS

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,9 @@ Library
4646
IDLE
4747
----
4848

49+
- Issue #15392: Create a unittest framework for IDLE.
50+
Rajagopalasarma Jayakrishnan
51+
4952
- Issue #14146: Highlight source line while debugging on Windows.
5053

5154
- Issue #17532: Always include Options menu for IDLE on OS X.

0 commit comments

Comments
 (0)