##// END OF EJS Templates
run-tests: extract onStart and onEnd into the test result...
Boris Feld -
r38636:948691ea default
parent child Browse files
Show More
@@ -1710,6 +1710,14 b' class TestResult(unittest._TextTestResul'
1710 1710 else: # 'always', for testing purposes
1711 1711 self.color = pygmentspresent
1712 1712
1713 def onStart(self, test):
1714 """ Can be overriden by custom TestResult
1715 """
1716
1717 def onEnd(self):
1718 """ Can be overriden by custom TestResult
1719 """
1720
1713 1721 def addFailure(self, test, reason):
1714 1722 self.failures.append((test, reason))
1715 1723
@@ -2098,71 +2106,73 b' class TextTestRunner(unittest.TextTestRu'
2098 2106 super(TextTestRunner, self).__init__(*args, **kwargs)
2099 2107
2100 2108 self._runner = runner
2109 self._result = getTestResult()(self._runner.options, self.stream,
2110 self.descriptions, 0)
2101 2111
2102 2112 def listtests(self, test):
2103 result = getTestResult()(self._runner.options, self.stream,
2104 self.descriptions, 0)
2105 2113 test = sorted(test, key=lambda t: t.name)
2114
2115 self._result.onStart(test)
2116
2106 2117 for t in test:
2107 2118 print(t.name)
2108 result.addSuccess(t)
2119 self._result.addSuccess(t)
2109 2120
2110 2121 if self._runner.options.xunit:
2111 2122 with open(self._runner.options.xunit, "wb") as xuf:
2112 self._writexunit(result, xuf)
2123 self._writexunit(self._result, xuf)
2113 2124
2114 2125 if self._runner.options.json:
2115 2126 jsonpath = os.path.join(self._runner._outputdir, b'report.json')
2116 2127 with open(jsonpath, 'w') as fp:
2117 self._writejson(result, fp)
2118
2119 return result
2128 self._writejson(self._result, fp)
2129
2130 return self._result
2120 2131
2121 2132 def run(self, test):
2122 result = getTestResult()(self._runner.options, self.stream,
2123 self.descriptions, self.verbosity)
2124 test(result)
2125
2126 failed = len(result.failures)
2127 skipped = len(result.skipped)
2128 ignored = len(result.ignored)
2133 self._result.onStart(test)
2134 test(self._result)
2135
2136 failed = len(self._result.failures)
2137 skipped = len(self._result.skipped)
2138 ignored = len(self._result.ignored)
2129 2139
2130 2140 with iolock:
2131 2141 self.stream.writeln('')
2132 2142
2133 2143 if not self._runner.options.noskips:
2134 for test, msg in result.skipped:
2144 for test, msg in self._result.skipped:
2135 2145 formatted = 'Skipped %s: %s\n' % (test.name, msg)
2136 self.stream.write(highlightmsg(formatted, result.color))
2137 for test, msg in result.failures:
2146 self.stream.write(highlightmsg(formatted, self._result.color))
2147 for test, msg in self._result.failures:
2138 2148 formatted = 'Failed %s: %s\n' % (test.name, msg)
2139 self.stream.write(highlightmsg(formatted, result.color))
2140 for test, msg in result.errors:
2149 self.stream.write(highlightmsg(formatted, self._result.color))
2150 for test, msg in self._result.errors:
2141 2151 self.stream.writeln('Errored %s: %s' % (test.name, msg))
2142 2152
2143 2153 if self._runner.options.xunit:
2144 2154 with open(self._runner.options.xunit, "wb") as xuf:
2145 self._writexunit(result, xuf)
2155 self._writexunit(self._result, xuf)
2146 2156
2147 2157 if self._runner.options.json:
2148 2158 jsonpath = os.path.join(self._runner._outputdir, b'report.json')
2149 2159 with open(jsonpath, 'w') as fp:
2150 self._writejson(result, fp)
2160 self._writejson(self._result, fp)
2151 2161
2152 2162 self._runner._checkhglib('Tested')
2153 2163
2154 savetimes(self._runner._outputdir, result)
2164 savetimes(self._runner._outputdir, self._result)
2155 2165
2156 2166 if failed and self._runner.options.known_good_rev:
2157 self._bisecttests(t for t, m in result.failures)
2167 self._bisecttests(t for t, m in self._result.failures)
2158 2168 self.stream.writeln(
2159 2169 '# Ran %d tests, %d skipped, %d failed.'
2160 % (result.testsRun, skipped + ignored, failed))
2170 % (self._result.testsRun, skipped + ignored, failed))
2161 2171 if failed:
2162 2172 self.stream.writeln('python hash seed: %s' %
2163 2173 os.environ['PYTHONHASHSEED'])
2164 2174 if self._runner.options.time:
2165 self.printtimes(result.times)
2175 self.printtimes(self._result.times)
2166 2176
2167 2177 if self._runner.options.exceptions:
2168 2178 exceptions = aggregateexceptions(
@@ -2185,7 +2195,7 b' class TextTestRunner(unittest.TextTestRu'
2185 2195
2186 2196 self.stream.flush()
2187 2197
2188 return result
2198 return self._result
2189 2199
2190 2200 def _bisecttests(self, tests):
2191 2201 bisectcmd = ['hg', 'bisect']
@@ -2751,6 +2761,8 b' class TestRunner(object):'
2751 2761 if result.failures:
2752 2762 failed = True
2753 2763
2764 result.onEnd()
2765
2754 2766 if self.options.anycoverage:
2755 2767 self._outputcoverage()
2756 2768 except KeyboardInterrupt:
General Comments 0
You need to be logged in to leave comments. Login now