Merge mozilla-central and tracemonkey. (a=blockers)
[mozilla-central.git] / config / mozunit.py
blob727a7c7d6fa0634d62cdb73df92b3a9012369c55
1 from unittest import TextTestRunner as _TestRunner, TestResult as _TestResult
2 import inspect
4 '''Helper to make python unit tests report the way that the Mozilla
5 unit test infrastructure expects tests to report.
7 Usage:
9 import unittest
10 from mozunit import MozTestRunner
12 if __name__ == '__main__':
13 unittest.main(testRunner=MozTestRunner())
14 '''
16 class _MozTestResult(_TestResult):
17 def __init__(self, stream, descriptions):
18 _TestResult.__init__(self)
19 self.stream = stream
20 self.descriptions = descriptions
22 def getDescription(self, test):
23 if self.descriptions:
24 return test.shortDescription() or str(test)
25 else:
26 return str(test)
28 def addSuccess(self, test):
29 _TestResult.addSuccess(self, test)
30 filename = inspect.getfile(test.__class__)
31 testname = test._testMethodName
32 self.stream.writeln("TEST-PASS | %s | %s" % (filename, testname))
34 def addError(self, test, err):
35 _TestResult.addError(self, test, err)
36 self.printFail(test, err)
38 def addFailure(self, test, err):
39 _TestResult.addFailure(self, test, err)
40 self.printFail(test,err)
42 def printFail(self, test, err):
43 exctype, value, tb = err
44 # Skip test runner traceback levels
45 while tb and self._is_relevant_tb_level(tb):
46 tb = tb.tb_next
47 if not tb:
48 self.stream.writeln("TEST-UNEXPECTED-FAIL | NO TRACEBACK |")
49 _f, _ln, _t = inspect.getframeinfo(tb)[:3]
50 self.stream.writeln("TEST-UNEXPECTED-FAIL | %s | line %d, %s: %s" %
51 (_f, _ln, _t, value.message))
53 def printErrorList(self):
54 for test, err in self.errors:
55 self.stream.writeln("ERROR: %s" % self.getDescription(test))
56 self.stream.writeln("%s" % err)
59 class MozTestRunner(_TestRunner):
60 def _makeResult(self):
61 return _MozTestResult(self.stream, self.descriptions)
62 def run(self, test):
63 result = self._makeResult()
64 test(result)
65 result.printErrorList()
66 return result