source: python/trunk/Lib/idlelib/idle_test/README.txt

Last change on this file was 391, checked in by dmik, 11 years ago

python: Merge vendor 2.7.6 to trunk.

  • Property svn:eol-style set to native
File size: 4.4 KB
Line 
1README FOR IDLE TESTS IN IDLELIB.IDLE_TEST
2
3
41. Test Files
5
6The idle directory, idlelib, has over 60 xyz.py files. The idle_test
7subdirectory should contain a test_xyy.py for each. (For test modules, make
8'xyz' lower case, and possibly shorten it.) Each file should start with the
9something like the following template, with the blanks after after '.' and 'as',
10and before and after '_' filled in.
11---
12import unittest
13from test.support import requires
14import idlelib. as
15
16class _Test(unittest.TestCase):
17
18 def test_(self):
19
20if __name__ == '__main__':
21 unittest.main(verbosity=2, exit=2)
22---
23Idle tests are run with unittest; do not use regrtest's test_main.
24
25Once test_xyy is written, the following should go at the end of xyy.py,
26with xyz (lowercased) added after 'test_'.
27---
28if __name__ == "__main__":
29 from test import support; support.use_resources = ['gui']
30 import unittest
31 unittest.main('idlelib.idle_test.test_', verbosity=2, exit=False)
32---
33
34
352. Gui Tests
36
37Gui tests need 'requires' and 'use_resources' from test.support
38(test.test_support in 2.7). A test is a gui test if it creates a Tk root or
39master object either directly or indirectly by instantiating a tkinter or
40idle class. For the benefit of buildbot machines that do not have a graphics
41screen, gui tests must be 'guarded' by "requires('gui')" in a setUp
42function or method. This will typically be setUpClass.
43
44All gui objects must be destroyed by the end of the test, perhaps in a tearDown
45function. Creating the Tk root directly in a setUp allows a reference to be saved
46so it can be properly destroyed in the corresponding tearDown.
47---
48 @classmethod
49 def setUpClass(cls):
50 requires('gui')
51 cls.root = tk.Tk()
52
53 @classmethod
54 def tearDownClass(cls):
55 cls.root.destroy()
56---
57
58Support.requires('gui') returns true if it is either called in a main module
59(which never happens on buildbots) or if use_resources contains 'gui'.
60Use_resources is set by test.regrtest but not by unittest. So when running
61tests in another module with unittest, we set it ourselves, as in the xyz.py
62template above.
63
64Since non-gui tests always run, but gui tests only sometimes, tests of non-gui
65operations should best avoid needing a gui. Methods that make incidental use of
66tkinter (tk) variables and messageboxes can do this by using the mock classes in
67idle_test/mock_tk.py. There is also a mock text that will handle some uses of the
68tk Text widget.
69
70
713. Running Tests
72
73Assume that xyz.py and test_xyz.py end with the "if __name__" statements given
74above. In Idle, pressing F5 in an editor window with either loaded will run all
75tests in the test_xyz file with the version of Python running Idle. The test
76report and any tracebacks will appear in the Shell window. The options in these
77"if __name__" statements are appropriate for developers running (as opposed to
78importing) either of the files during development: verbosity=2 lists all test
79methods in the file; exit=False avoids a spurious sys.exit traceback that would
80otherwise occur when running in Idle. The following command lines also run
81all test methods, including gui tests, in test_xyz.py. (The exceptions are that
82idlelib and idlelib.idle start Idle and idlelib.PyShell should (issue 18330).)
83
84python -m idlelib.xyz # With the capitalization of the xyz module
85python -m idlelib.idle_test.test_xyz
86
87To run all idle_test/test_*.py tests, either interactively
88('>>>', with unittest imported) or from a command line, use one of the
89following. (Notes: unittest does not run gui tests; in 2.7, 'test ' (with the
90space) is 'test.regrtest '; where present, -v and -ugui can be omitted.)
91
92>>> unittest.main('idlelib.idle_test', verbosity=2, exit=False)
93python -m unittest -v idlelib.idle_test
94python -m test -v -ugui test_idle
95python -m test.test_idle
96
97The idle tests are 'discovered' by idlelib.idle_test.__init__.load_tests,
98which is also imported into test.test_idle. Normally, neither file should be
99changed when working on individual test modules. The third command runs runs
100unittest indirectly through regrtest. The same happens when the entire test
101suite is run with 'python -m test'. So that command must work for buildbots
102to stay green. Idle tests must not disturb the environment in a way that
103makes other tests fail (issue 18081).
104
105To run an individual Testcase or test method, extend the dotted name given to
106unittest on the command line. (But gui tests will not this way.)
107
108python -m unittest -v idlelib.idle_test.text_xyz.Test_case.test_meth
Note: See TracBrowser for help on using the repository browser.