##// END OF EJS Templates
run-tests: add support for external test result...
Boris Feld -
r38635:c44ae599 default
parent child Browse files
Show More
@@ -0,0 +1,46 b''
1 from __future__ import print_function
2
3 import unittest
4
5 class TestResult(unittest._TextTestResult):
6
7 def __init__(self, options, *args, **kwargs):
8 super(TestResult, self).__init__(*args, **kwargs)
9 self._options = options
10
11 # unittest.TestResult didn't have skipped until 2.7. We need to
12 # polyfill it.
13 self.skipped = []
14
15 # We have a custom "ignored" result that isn't present in any Python
16 # unittest implementation. It is very similar to skipped. It may make
17 # sense to map it into skip some day.
18 self.ignored = []
19
20 self.times = []
21 self._firststarttime = None
22 # Data stored for the benefit of generating xunit reports.
23 self.successes = []
24 self.faildata = {}
25
26 def addFailure(self, test, reason):
27 print("FAILURE!", test, reason)
28
29 def addSuccess(self, test):
30 print("SUCCESS!", test)
31
32 def addError(self, test, err):
33 print("ERR!", test, err)
34
35 # Polyfill.
36 def addSkip(self, test, reason):
37 print("SKIP!", test, reason)
38
39 def addIgnore(self, test, reason):
40 print("IGNORE!", test, reason)
41
42 def addOutputMismatch(self, test, ret, got, expected):
43 return False
44
45 def stopTest(self, test, interrupted=False):
46 super(TestResult, self).stopTest(test)
@@ -1851,6 +1851,16 b' class TestResult(unittest._TextTestResul'
1851 self.stream.writeln('INTERRUPTED: %s (after %d seconds)' % (
1851 self.stream.writeln('INTERRUPTED: %s (after %d seconds)' % (
1852 test.name, self.times[-1][3]))
1852 test.name, self.times[-1][3]))
1853
1853
1854 def getTestResult():
1855 """
1856 Returns the relevant test result
1857 """
1858 if "CUSTOM_TEST_RESULT" in os.environ:
1859 testresultmodule = __import__(os.environ["CUSTOM_TEST_RESULT"])
1860 return testresultmodule.TestResult
1861 else:
1862 return TestResult
1863
1854 class TestSuite(unittest.TestSuite):
1864 class TestSuite(unittest.TestSuite):
1855 """Custom unittest TestSuite that knows how to execute Mercurial tests."""
1865 """Custom unittest TestSuite that knows how to execute Mercurial tests."""
1856
1866
@@ -2090,8 +2100,8 b' class TextTestRunner(unittest.TextTestRu'
2090 self._runner = runner
2100 self._runner = runner
2091
2101
2092 def listtests(self, test):
2102 def listtests(self, test):
2093 result = TestResult(self._runner.options, self.stream,
2103 result = getTestResult()(self._runner.options, self.stream,
2094 self.descriptions, 0)
2104 self.descriptions, 0)
2095 test = sorted(test, key=lambda t: t.name)
2105 test = sorted(test, key=lambda t: t.name)
2096 for t in test:
2106 for t in test:
2097 print(t.name)
2107 print(t.name)
@@ -2109,9 +2119,8 b' class TextTestRunner(unittest.TextTestRu'
2109 return result
2119 return result
2110
2120
2111 def run(self, test):
2121 def run(self, test):
2112 result = TestResult(self._runner.options, self.stream,
2122 result = getTestResult()(self._runner.options, self.stream,
2113 self.descriptions, self.verbosity)
2123 self.descriptions, self.verbosity)
2114
2115 test(result)
2124 test(result)
2116
2125
2117 failed = len(result.failures)
2126 failed = len(result.failures)
@@ -1246,6 +1246,15 b' Test globbing of local IP addresses'
1246 $ echo dead:beef::1
1246 $ echo dead:beef::1
1247 $LOCALIP (glob)
1247 $LOCALIP (glob)
1248
1248
1249 Add support for external test formatter
1250 =======================================
1251
1252 $ CUSTOM_TEST_RESULT=basic_test_result $PYTHON $TESTDIR/run-tests.py --with-hg=`which hg` "$@" test-success.t test-failure.t
1253
1254 # Ran 2 tests, 0 skipped, 0 failed.
1255 FAILURE! test-failure.t output changed
1256 SUCCESS! test-success.t
1257
1249 Test reusability for third party tools
1258 Test reusability for third party tools
1250 ======================================
1259 ======================================
1251
1260
General Comments 0
You need to be logged in to leave comments. Login now