1# Test wrapper from Quod Libet
2# http://www.sacredchao.net/quodlibet/
3import unittest, sys
4suites = []
5add = registerCase = suites.append
6from unittest import TestCase
7
8class Mock(object):
9    # A generic mocking object.
10    def __init__(self, **kwargs): self.__dict__.update(kwargs)
11
12import test_intnum
13import test_symrec
14import test_bytecode
15import test_expr
16
17class Result(unittest.TestResult):
18
19    separator1 = '=' * 70
20    separator2 = '-' * 70
21
22    def addSuccess(self, test):
23        unittest.TestResult.addSuccess(self, test)
24        sys.stdout.write('.')
25
26    def addError(self, test, err):
27        unittest.TestResult.addError(self, test, err)
28        sys.stdout.write('E')
29
30    def addFailure(self, test, err):
31        unittest.TestResult.addFailure(self, test, err)
32        sys.stdout.write('F')
33
34    def printErrors(self):
35        succ = self.testsRun - (len(self.errors) + len(self.failures))
36        v = "%3d" % succ
37        count = 50 - self.testsRun
38        sys.stdout.write((" " * count) + v + "\n")
39        self.printErrorList('ERROR', self.errors)
40        self.printErrorList('FAIL', self.failures)
41
42    def printErrorList(self, flavour, errors):
43        for test, err in errors:
44            sys.stdout.write(self.separator1 + "\n")
45            sys.stdout.write("%s: %s\n" % (flavour, str(test)))
46            sys.stdout.write(self.separator2 + "\n")
47            sys.stdout.write("%s\n" % err)
48
49class Runner:
50    def run(self, test):
51        suite = unittest.makeSuite(test)
52        pref = '%s (%d): ' % (test.__name__, len(suite._tests))
53        print pref + " " * (25 - len(pref)),
54        result = Result()
55        suite(result)
56        result.printErrors()
57        return bool(result.failures + result.errors)
58
59def unit(run = []):
60    runner = Runner()
61    failures = False
62    for test in suites:
63        if not run or test.__name__ in run:
64            failures |= runner.run(test)
65    return failures
66
67if __name__ == "__main__":
68    raise SystemExit(unit(sys.argv[1:]))
69
70