8 TestCase = unittest.TestCase
9 TestSuite = unittest.TestSuite
11 def load_modules(names):
12 return [__import__(name, None, None, "x") for name in names]
14 def module_suite(module, classnames=None):
15 """Makes a suite from a module."""
17 return unittest.TestLoader().loadTestsFromNames(classnames, module)
18 elif hasattr(module, 'suite'):
21 return unittest.TestLoader().loadTestsFromModule(module)
23 def doctest_suite(module_names):
24 """Makes a test suite from doctests."""
27 for mod in load_modules(module_names):
28 suite.addTest(doctest.DocTestSuite(mod))
31 def suite(module_names):
32 """Creates a suite from multiple modules."""
34 for mod in load_modules(module_names):
35 suite.addTest(module_suite(mod))
39 runner = unittest.TextTestRunner()
40 return runner.run(suite)
44 main_module = __import__('__main__')
45 # allow command line switches
46 args = [a for a in sys.argv[1:] if not a.startswith('-')]
47 suite = module_suite(main_module, args or None)
49 result = runTests(suite)
50 sys.exit(not result.wasSuccessful())