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