1f1ffcfd804889b85ce17932f4e80485420e2140
[be.git] / test.py
1 """Usage: python test.py [module(s) ...]
2
3 When called without optional module names, run the doctests from *all*
4 modules.  This may raise lots of errors if you haven't installed one
5 of the versioning control systems.
6
7 When called with module name arguments, only run the doctests from
8 those modules.
9 """
10
11 from libbe import plugin
12 import unittest
13 import doctest
14 import sys
15
16 suite = unittest.TestSuite()
17
18 if len(sys.argv) > 1:
19     for submodname in sys.argv[1:]:
20         match = False
21         mod = plugin.get_plugin("libbe", submodname)
22         if mod is not None:
23             if hasattr(mod, "suite"):
24                 suite.addTest(mod.suite)
25                 match = True
26             else:
27                 print "Module \"%s\" has no test suite" % submodname
28         mod = plugin.get_plugin("becommands", submodname)
29         if mod is not None:
30             suite.addTest(doctest.DocTestSuite(mod))
31             match = True
32         if not match:
33             print "No modules match \"%s\"" % submodname
34             sys.exit(1)
35 else:
36     failed = False
37     for modname,module in plugin.iter_plugins("libbe"):
38         if not hasattr(module, "suite"):
39             continue
40         suite.addTest(module.suite)
41     for modname,module in plugin.iter_plugins("becommands"):
42         suite.addTest(doctest.DocTestSuite(module))
43
44 #for s in suite._tests:
45 #    print s
46 #exit(0)
47 result = unittest.TextTestRunner(verbosity=2).run(suite)
48
49 numErrors = len(result.errors)
50 numFailures = len(result.failures)
51 numBad = numErrors + numFailures
52 if numBad > 126:
53     numBad = 1
54 sys.exit(numBad)