Commit 5783febe authored by Terry Jan Reedy's avatar Terry Jan Reedy

Issue #15392: Create a unittest framework for IDLE, 2.7 version.

Preliminary patch by Rajagopalasarma Jayakrishnan.
parent 51b6a984
...@@ -223,4 +223,6 @@ if __name__=='__main__': ...@@ -223,4 +223,6 @@ if __name__=='__main__':
tests = (t1, t2, t3, t4, t5, t6, t7, tests = (t1, t2, t3, t4, t5, t6, t7,
TC, tc.t1, tc.t2, tc.t3, tc.t4, tc.t5, tc.t6, tc.t7) TC, tc.t1, tc.t2, tc.t3, tc.t4, tc.t5, tc.t6, tc.t7)
test(tests) # test(tests)
from unittest import main
main('idlelib.idle_test.test_calltips', verbosity=2, exit=False)
...@@ -92,4 +92,5 @@ def main(): ...@@ -92,4 +92,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)
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
CTi = ct.CallTips()
class Test_get_entity(unittest.TestCase):
# In 3.x, get_entity changed from 'instance method' to module function
# since 'self' not used. Use dummy instance until change 2.7 also.
def test_bad_entity(self):
self.assertIsNone(CTi.get_entity('1/0'))
def test_good_entity(self):
self.assertIs(CTi.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 or _thread wasn't built or idlelib was deleted.
try:
import Tkinter
import threading # imported by PyShell, imports _thread
import idlelib.idle_test as idletest
except ImportError:
import unittest
raise unittest.SkipTest
# Without test_main present, regrtest.runtest_inner (line1219) calls
# unittest.TestLoader().loadTestsFromModule(this_module) which calls
# load_tests() if it finds it. (Unittest.main does the same.)
load_tests = idletest.load_tests
if __name__ == '__main__':
import unittest
unittest.main(verbosity=2, exit=False)
...@@ -478,6 +478,7 @@ Geert Jansen ...@@ -478,6 +478,7 @@ Geert Jansen
Jack Jansen Jack Jansen
Bill Janssen Bill Janssen
Thomas Jarosch Thomas Jarosch
Rajagopalasarma Jayakrishnan
Drew Jenkins Drew Jenkins
Flemming Kjær Jensen Flemming Kjær Jensen
Philip H. Jensen Philip H. Jensen
......
...@@ -47,6 +47,9 @@ Build ...@@ -47,6 +47,9 @@ Build
IDLE IDLE
---- ----
- Issue #15392: Create a unittest framework for IDLE.
Preliminary patch by 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.
......
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