Commit 94d3e03c authored by Terry Jan Reedy's avatar Terry Jan Reedy

Issue #15392: Create a unittest framework for IDLE.

Preliminary patch by Rajagopalasarma Jayakrishnan.
parent c03331dc
......@@ -264,4 +264,6 @@ def main():
print("%d of %d tests failed" % (num_fail, num_tests))
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()
if __name__ == "__main__":
main()
from unittest import main
main('idlelib.idle_test.test_pathbrowser', verbosity=2, exit=False)
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.
\ No newline at end of file
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
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)
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)
# 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
Thomas Jarosch
Juhana Jauhiainen
Rajagopalasarma Jayakrishnan
Zbigniew Jędrzejewski-Szmek
Julien Jehannet
Drew Jenkins
......
......@@ -46,6 +46,9 @@ Library
IDLE
----
- Issue #15392: Create a unittest framework for IDLE.
Rajagopalasarma Jayakrishnan
- Issue #14146: Highlight source line while debugging on Windows.
- Issue #17532: Always include Options menu for IDLE on OS X.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment