mirror of
https://github.com/python/cpython.git
synced 2025-08-02 08:02:56 +00:00
Issue #15392: Create a unittest framework for IDLE.
Preliminary patch by Rajagopalasarma Jayakrishnan.
This commit is contained in:
parent
ecf0851809
commit
db4e5c53c9
9 changed files with 118 additions and 2 deletions
|
@ -264,4 +264,6 @@ def main():
|
||||||
print("%d of %d tests failed" % (num_fail, num_tests))
|
print("%d of %d tests failed" % (num_fail, num_tests))
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
main()
|
#main()
|
||||||
|
from unittest import main
|
||||||
|
main('idlelib.idle_test.test_calltips', verbosity=2, exit=False)
|
||||||
|
|
|
@ -95,4 +95,5 @@ def main():
|
||||||
mainloop()
|
mainloop()
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
from unittest import main
|
||||||
|
main('idlelib.idle_test.test_pathbrowser', verbosity=2, exit=False)
|
||||||
|
|
63
Lib/idlelib/idle_test/@README.txt
Normal file
63
Lib/idlelib/idle_test/@README.txt
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
README FOR IDLE TESTS IN IDLELIB.IDLE_TEST
|
||||||
|
|
||||||
|
The idle directory, idlelib, has over 60 xyz.py files. The idle_test
|
||||||
|
subdirectory should contain a test_xyy.py for each one. (For test modules,
|
||||||
|
make 'xyz' lower case.) Each should start with the following cut-paste
|
||||||
|
template, with the blanks after after '.'. 'as', and '_' filled in.
|
||||||
|
---
|
||||||
|
import unittest
|
||||||
|
import idlelib. as
|
||||||
|
|
||||||
|
class Test_(unittest.TestCase):
|
||||||
|
|
||||||
|
def test_(self):
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
unittest.main(verbosity=2, exit=2)
|
||||||
|
---
|
||||||
|
Idle tests are run with unittest; do not use regrtest's test_main.
|
||||||
|
|
||||||
|
Once test_xyy is written, the following should go at the end of xyy.py,
|
||||||
|
with xyz (lowercased) added after 'test_'.
|
||||||
|
---
|
||||||
|
if __name__ == "__main__":
|
||||||
|
import unittest
|
||||||
|
unittest.main('idlelib.idle_test.test_', verbosity=2, exit=False)
|
||||||
|
---
|
||||||
|
|
||||||
|
In Idle, pressing F5 in an editor window with either xyz.py or test_xyz.py
|
||||||
|
loaded will then run the test with the version of Python running Idle and
|
||||||
|
tracebacks will appear in the Shell window. The options are appropriate for
|
||||||
|
developers running (as opposed to importing) either type of file during
|
||||||
|
development: verbosity=2 lists all test_y methods; exit=False avoids a
|
||||||
|
spurious sys.exit traceback when running in Idle. The following command
|
||||||
|
lines also run test_xyz.py
|
||||||
|
|
||||||
|
python -m idlelib.xyz # With the capitalization of the xyz module
|
||||||
|
python -m unittest -v idlelib.idle_test.test_xyz
|
||||||
|
|
||||||
|
To run all idle tests either interactively ('>>>', with unittest imported)
|
||||||
|
or from a command line, use one of the following.
|
||||||
|
|
||||||
|
>>> unittest.main('idlelib.idle_test', verbosity=2, exit=False)
|
||||||
|
python -m unittest -v idlelib.idle_test
|
||||||
|
python -m test.test_idle
|
||||||
|
python -m test test_idle
|
||||||
|
|
||||||
|
The idle tests are 'discovered' in idlelib.idle_test.__init__.load_tests,
|
||||||
|
which is also imported into test.test_idle. Normally, neither file should be
|
||||||
|
changed when working on individual test modules. The last command runs runs
|
||||||
|
unittest indirectly through regrtest. The same happens when the entire test
|
||||||
|
suite is run with 'python -m test'. So it must work for buildbots to stay green.
|
||||||
|
|
||||||
|
To run an individual Testcase or test method, extend the
|
||||||
|
dotted name given to unittest on the command line.
|
||||||
|
|
||||||
|
python -m unittest -v idlelib.idle_test.text_xyz.Test_case.test_meth
|
||||||
|
|
||||||
|
To disable test/test_idle.py, there are at least two choices.
|
||||||
|
a. Comment out 'load_tests' line, no no tests are discovered (simple and safe);
|
||||||
|
Running no tests passes, so there is no indication that nothing was run.
|
||||||
|
b.Before that line, make module an unexpected skip for regrtest with
|
||||||
|
import unittest; raise unittest.SkipTest('skip for buildbots')
|
||||||
|
When run directly with unittest, this causes a normal exit and traceback.
|
9
Lib/idlelib/idle_test/__init__.py
Normal file
9
Lib/idlelib/idle_test/__init__.py
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
from os.path import dirname
|
||||||
|
|
||||||
|
def load_tests(loader, standard_tests, pattern):
|
||||||
|
this_dir = dirname(__file__)
|
||||||
|
top_dir = dirname(dirname(this_dir))
|
||||||
|
package_tests = loader.discover(start_dir=this_dir, pattern='test*.py',
|
||||||
|
top_level_dir=top_dir)
|
||||||
|
standard_tests.addTests(package_tests)
|
||||||
|
return standard_tests
|
11
Lib/idlelib/idle_test/test_calltips.py
Normal file
11
Lib/idlelib/idle_test/test_calltips.py
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
import unittest
|
||||||
|
import idlelib.CallTips as ct
|
||||||
|
|
||||||
|
class Test_get_entity(unittest.TestCase):
|
||||||
|
def test_bad_entity(self):
|
||||||
|
self.assertIsNone(ct.get_entity('1/0'))
|
||||||
|
def test_good_entity(self):
|
||||||
|
self.assertIs(ct.get_entity('int'), int)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
unittest.main(verbosity=2, exit=False)
|
12
Lib/idlelib/idle_test/test_pathbrowser.py
Normal file
12
Lib/idlelib/idle_test/test_pathbrowser.py
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
import unittest
|
||||||
|
import idlelib.PathBrowser as PathBrowser
|
||||||
|
|
||||||
|
class PathBrowserTest(unittest.TestCase):
|
||||||
|
|
||||||
|
def test_DirBrowserTreeItem(self):
|
||||||
|
# Issue16226 - make sure that getting a sublist works
|
||||||
|
d = PathBrowser.DirBrowserTreeItem('')
|
||||||
|
d.GetSubList()
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
unittest.main(verbosity=2, exit=False)
|
14
Lib/test/test_idle.py
Normal file
14
Lib/test/test_idle.py
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
# Skip test if tkinter wasn't built or idlelib was deleted.
|
||||||
|
from test.support import import_module
|
||||||
|
import_module('tkinter') # discard return
|
||||||
|
itdir = import_module('idlelib.idle_test')
|
||||||
|
|
||||||
|
# Without test_main present, regrtest.runtest_inner (line1219)
|
||||||
|
# imitates unittest.main by calling
|
||||||
|
# unittest.TestLoader().loadTestsFromModule(this_module)
|
||||||
|
# which look for load_tests and uses it if found.
|
||||||
|
load_tests = itdir.load_tests
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
import unittest
|
||||||
|
unittest.main(verbosity=2, exit=False)
|
|
@ -575,6 +575,7 @@ Jack Jansen
|
||||||
Bill Janssen
|
Bill Janssen
|
||||||
Thomas Jarosch
|
Thomas Jarosch
|
||||||
Juhana Jauhiainen
|
Juhana Jauhiainen
|
||||||
|
Rajagopalasarma Jayakrishnan
|
||||||
Zbigniew Jędrzejewski-Szmek
|
Zbigniew Jędrzejewski-Szmek
|
||||||
Julien Jehannet
|
Julien Jehannet
|
||||||
Drew Jenkins
|
Drew Jenkins
|
||||||
|
|
|
@ -46,6 +46,9 @@ Library
|
||||||
IDLE
|
IDLE
|
||||||
----
|
----
|
||||||
|
|
||||||
|
- Issue #15392: Create a unittest framework for IDLE.
|
||||||
|
Rajagopalasarma Jayakrishnan
|
||||||
|
|
||||||
- Issue #14146: Highlight source line while debugging on Windows.
|
- Issue #14146: Highlight source line while debugging on Windows.
|
||||||
|
|
||||||
- Issue #17532: Always include Options menu for IDLE on OS X.
|
- Issue #17532: Always include Options menu for IDLE on OS X.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue