[Zope3-checkins]
SVN: zope.testing/branches/mgedmin-fixes/src/zope/testing/testrunner
Implement a --list-modules option that lists all modules
matching your pattern,
Marius Gedminas
marius at pov.lt
Thu Jan 11 20:28:33 EST 2007
Log message for revision 71953:
Implement a --list-modules option that lists all modules matching your pattern,
but does not actually run any tests.
I hope this will help me figure out why test.py -s zope.testing in a Zope 3
checkout runs 0 tests.
Changed:
U zope.testing/branches/mgedmin-fixes/src/zope/testing/testrunner-test-selection.txt
U zope.testing/branches/mgedmin-fixes/src/zope/testing/testrunner.py
-=-
Modified: zope.testing/branches/mgedmin-fixes/src/zope/testing/testrunner-test-selection.txt
===================================================================
--- zope.testing/branches/mgedmin-fixes/src/zope/testing/testrunner-test-selection.txt 2007-01-12 00:56:28 UTC (rev 71952)
+++ zope.testing/branches/mgedmin-fixes/src/zope/testing/testrunner-test-selection.txt 2007-01-12 01:28:29 UTC (rev 71953)
@@ -336,6 +336,10 @@
Ran 20 tests with 0 failures and 0 errors in 0.004 seconds.
False
+
+Test Levels
+-----------
+
Sometimes, There are tests that you don't want to run by default.
For example, you might have tests that take a long time. Tests can
have a level attribute. If no level is specified, a level of 1 is
@@ -486,3 +490,65 @@
test_y0 (sampletests.test_one)
Ran 39 tests with 0 failures and 0 errors in 0.009 seconds.
False
+
+
+Listing Selected Tests
+----------------------
+
+When you're trying to figure out why the test you want is not matched by the
+pattern you specified, it is convenient to see which test modules match your
+specifications.
+
+ >>> sys.argv = 'test -s sample3 --list-modules'.split()
+ >>> from zope.testing import testrunner
+ >>> testrunner.run(defaults)
+ sample3.sampletests
+ False
+
+ >>> sys.argv = 'test -m test1 --list-modules'.split()
+ >>> from zope.testing import testrunner
+ >>> testrunner.run(defaults)
+ sample1.sampletests.test1
+ sample1.sampletests.test11
+ sample1.sampletests.test111
+ sample1.sampletests.test112
+ sample1.sampletests.test12
+ sample1.sampletests.test121
+ sample1.sampletests.test122
+ sampletests.test1
+ sampletests.test11
+ sampletests.test111
+ sampletests.test112
+ sampletests.test12
+ sampletests.test121
+ sampletests.test122
+ False
+
+Note that --layer has no effect, as --list-modules doesn't actually import the
+modules for performance reasons.
+
+ >>> sys.argv = 'test --layer 122 -s sample1 --list-modules'.split()
+ >>> from zope.testing import testrunner
+ >>> testrunner.run(defaults)
+ sample1.sampletestsf
+ sample1.sample11.sampletests
+ sample1.sample13.sampletests
+ sample1.sampletests.test1
+ sample1.sampletests.test11
+ sample1.sampletests.test111
+ sample1.sampletests.test112
+ sample1.sampletests.test12
+ sample1.sampletests.test121
+ sample1.sampletests.test122
+ sample1.sampletests.test_one
+ False
+
+For the same reason even if you specify a -t option that excludes all tests
+from a module, it may still be listed by --list-modules:
+
+ >>> sys.argv = 'test -s sample3 -t reallynosuchtestthere --list-modules'.split()
+ >>> from zope.testing import testrunner
+ >>> testrunner.run(defaults)
+ sample3.sampletests
+ False
+
Modified: zope.testing/branches/mgedmin-fixes/src/zope/testing/testrunner.py
===================================================================
--- zope.testing/branches/mgedmin-fixes/src/zope/testing/testrunner.py 2007-01-12 00:56:28 UTC (rev 71952)
+++ zope.testing/branches/mgedmin-fixes/src/zope/testing/testrunner.py 2007-01-12 01:28:29 UTC (rev 71953)
@@ -377,6 +377,11 @@
remove_stale_bytecode(options)
+ if options.list_modules:
+ for module in find_modules(options):
+ print module
+ return True
+
tests_by_layer_name = find_tests(options, found_suites)
ran = 0
@@ -1086,8 +1091,7 @@
yield (suite, layer)
break
-
-def find_suites(options):
+def find_modules(options):
for fpath, package in find_test_files(options):
for (prefix, prefix_package) in options.prefix:
if fpath.startswith(prefix) and package == prefix_package:
@@ -1105,35 +1109,41 @@
else:
continue
- try:
- module = import_name(module_name)
- except KeyboardInterrupt:
- raise
- except:
- suite = StartUpFailure(
- options, module_name,
- sys.exc_info()[:2]
- + (sys.exc_info()[2].tb_next.tb_next,),
+ yield module_name
+ break
+
+def find_suites(options, found_modules=None):
+ if found_modules is None:
+ found_modules = find_modules(options)
+ for module_name in found_modules:
+ try:
+ module = import_name(module_name)
+ except KeyboardInterrupt:
+ raise
+ except:
+ suite = StartUpFailure(
+ options, module_name,
+ sys.exc_info()[:2]
+ + (sys.exc_info()[2].tb_next.tb_next,),
+ )
+ else:
+ try:
+ suite = getattr(module, options.suite_name)()
+ if isinstance(suite, unittest.TestSuite):
+ check_suite(suite, module_name)
+ else:
+ raise TypeError(
+ "Invalid test_suite, %r, in %s"
+ % (suite, module_name)
)
- else:
- try:
- suite = getattr(module, options.suite_name)()
- if isinstance(suite, unittest.TestSuite):
- check_suite(suite, module_name)
- else:
- raise TypeError(
- "Invalid test_suite, %r, in %s"
- % (suite, module_name)
- )
- except KeyboardInterrupt:
- raise
- except:
- suite = StartUpFailure(
- options, module_name, sys.exc_info()[:2]+(None,))
+ except KeyboardInterrupt:
+ raise
+ except:
+ suite = StartUpFailure(
+ options, module_name, sys.exc_info()[:2]+(None,))
- yield suite
- break
+ yield suite
def check_suite(suite, module_name):
for x in suite:
@@ -1423,10 +1433,16 @@
string that does not match "bc", and vice versa). The option can be
specified multiple test-module filters. Test modules matching any of
the test filters are searched. If no test-module filter is specified,
-then all test moduless are used.
+then all test modules are used.
""")
searching.add_option(
+ '--list-modules', action="store_true", dest='list_modules', default=False,
+ help="""\
+List all test modules that matched your filters. Do not run any tests.
+""")
+
+searching.add_option(
'--test', '-t', action="append", dest='test',
help="""\
Specify a test filter as a regular expression. This is a
@@ -1794,7 +1810,7 @@
options.test = [test_filter]
if positional:
- parser.error("Too mant positional arguments")
+ parser.error("Too many positional arguments")
options.ignore_dir = dict([(d,1) for d in options.ignore_dir])
options.test_file_pattern = re.compile(options.test_file_pattern).search
More information about the Zope3-Checkins
mailing list