- suite.addTest(module.suite)
- for modname,module in plugin.iter_plugins("becommands"):
- suite.addTest(doctest.DocTestSuite(module))
-
-#for s in suite._tests:
-# print s
-#exit(0)
-result = unittest.TextTestRunner(verbosity=2).run(suite)
-
-numErrors = len(result.errors)
-numFailures = len(result.failures)
-numBad = numErrors + numFailures
-if numBad > 126:
- numBad = 1
-sys.exit(numBad)
+ if f.parent == None:
+ f.modname = root_modname
+ else:
+ f.modname = f.parent.modname + '.' + f.name
+ f.parent.append(f)
+ return tree
+
+def add_module_tests(suite, modname):
+ try:
+ mod = import_by_name(modname)
+ except ValueError, e:
+ print >> sys.stderr, 'Failed to import "%s"' % (modname)
+ raise e
+ if hasattr(mod, 'suite'):
+ s = mod.suite
+ else:
+ s = unittest.TestLoader().loadTestsFromModule(mod)
+ try:
+ sdoc = doctest.DocTestSuite(mod)
+ suite.addTest(sdoc)
+ except ValueError:
+ pass
+ suite.addTest(s)
+
+if __name__ == '__main__':
+ import optparse
+ parser = optparse.OptionParser(usage='%prog [options] [modules ...]',
+ description=
+"""When called without optional module names, run the test suites for
+*all* modules. This may raise lots of errors if you haven't installed
+one of the versioning control systems.
+
+When called with module name arguments, only run the test suites from
+those modules and their submodules. For example::
+
+ $ python test.py libbe.bugdir libbe.storage
+""")
+ parser.add_option('-q', '--quiet', action='store_true', default=False,
+ help='Run unittests in quiet mode (verbosity 1).')
+ options,args = parser.parse_args()
+ print >> sys.stderr, 'Testing BE\n%s' % version(verbose=True)
+
+ verbosity = 2
+ if options.quiet == True:
+ verbosity = 1
+
+ suite = unittest.TestSuite()
+ tree = python_tree()
+ if len(args) == 0:
+ for node in tree.traverse():
+ add_module_tests(suite, node.modname)
+ else:
+ added = []
+ for modname in args:
+ for node in tree.traverse():
+ if node.modname == modname:
+ for n in node.traverse():
+ if n.modname not in added:
+ add_module_tests(suite, n.modname)
+ added.append(n.modname)
+ break
+
+ result = unittest.TextTestRunner(verbosity=verbosity).run(suite)
+
+ numErrors = len(result.errors)
+ numFailures = len(result.failures)
+ numBad = numErrors + numFailures
+ if numBad > 126:
+ numBad = 1
+ sys.exit(numBad)