aboutsummaryrefslogtreecommitdiffstats
path: root/test.py
blob: 57091c79ca7be177f830b46193febf0275640335 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
"""Usage: python test.py [module(s) ...]

When called without optional module names, run the doctests from *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 doctests from
those modules.
"""

from libbe import plugin, vcs
import unittest
import doctest
import sys

suite = unittest.TestSuite()

if len(sys.argv) > 1:
    for submodname in sys.argv[1:]:
        match = False
        mod = plugin.get_plugin("libbe", submodname)
        if mod is not None:
            if hasattr(mod, "suite"):
                suite.addTest(mod.suite)
                match = True
            else:
                print "Module \"%s\" has no test suite" % submodname
        mod = plugin.get_plugin("becommands", submodname)
        if mod is not None:
            suite.addTest(doctest.DocTestSuite(mod))
            match = True
        if not match:
            print "No modules match \"%s\"" % submodname
            sys.exit(1)
else:
    failed = False
    for modname,module in plugin.iter_plugins("libbe"):
        if not hasattr(module, "suite"):
            continue
        suite.addTest(module.suite)
    for modname,module in plugin.iter_plugins("becommands"):
        suite.addTest(doctest.DocTestSuite(module))

_vcs = vcs.installed_vcs()
vcs.set_preferred_vcs(_vcs.name)
print 'Using %s as the testing VCS' % _vcs.name

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)