bpo-33718: regrtest: use "xxx then yyy" result if re-run (GH-7521) (G… · python/cpython@b4f8bc5 (original) (raw)
`@@ -92,6 +92,7 @@ def parse_executed_tests(self, output):
`
92
92
``
93
93
`def check_executed_tests(self, output, tests, skipped=(), failed=(),
`
94
94
`env_changed=(), omitted=(),
`
``
95
`+
rerun=(),
`
95
96
`randomize=False, interrupted=False,
`
96
97
`fail_env_changed=False):
`
97
98
`if isinstance(tests, str):
`
`@@ -104,6 +105,8 @@ def check_executed_tests(self, output, tests, skipped=(), failed=(),
`
104
105
`env_changed = [env_changed]
`
105
106
`if isinstance(omitted, str):
`
106
107
`omitted = [omitted]
`
``
108
`+
if isinstance(rerun, str):
`
``
109
`+
rerun = [rerun]
`
107
110
``
108
111
`executed = self.parse_executed_tests(output)
`
109
112
`if randomize:
`
`@@ -138,6 +141,14 @@ def list_regex(line_format, tests):
`
138
141
`regex = list_regex('%s test%s omitted', omitted)
`
139
142
`self.check_line(output, regex)
`
140
143
``
``
144
`+
if rerun:
`
``
145
`+
regex = list_regex('%s re-run test%s', rerun)
`
``
146
`+
self.check_line(output, regex)
`
``
147
`+
self.check_line(output, "Re-running failed tests in verbose mode")
`
``
148
`+
for name in rerun:
`
``
149
`+
regex = "Re-running test %r in verbose mode" % name
`
``
150
`+
self.check_line(output, regex)
`
``
151
+
141
152
`good = (len(tests) - len(skipped) - len(failed)
`
142
153
`- len(omitted) - len(env_changed))
`
143
154
`if good:
`
`@@ -149,14 +160,19 @@ def list_regex(line_format, tests):
`
149
160
`if interrupted:
`
150
161
`self.check_line(output, 'Test suite interrupted by signal SIGINT.')
`
151
162
``
``
163
`+
result = []
`
152
164
`if failed:
`
153
``
`-
result = 'FAILURE'
`
154
``
`-
elif interrupted:
`
155
``
`-
result = 'INTERRUPTED'
`
``
165
`+
result.append('FAILURE')
`
156
166
`elif fail_env_changed and env_changed:
`
157
``
`-
result = 'ENV CHANGED'
`
158
``
`-
else:
`
159
``
`-
result = 'SUCCESS'
`
``
167
`+
result.append('ENV CHANGED')
`
``
168
`+
if interrupted:
`
``
169
`+
result.append('INTERRUPTED')
`
``
170
`+
if not result:
`
``
171
`+
result.append('SUCCESS')
`
``
172
`+
result = ', '.join(result)
`
``
173
`+
if rerun:
`
``
174
`+
self.check_line(output, 'Tests result: %s' % result)
`
``
175
`+
result = 'FAILURE then %s' % result
`
160
176
`self.check_line(output, 'Tests result: %s' % result)
`
161
177
``
162
178
`def parse_random_seed(self, output):
`
`@@ -648,6 +664,24 @@ def test_main():
`
648
664
`self.check_executed_tests(output, [testname], env_changed=testname,
`
649
665
`fail_env_changed=True)
`
650
666
``
``
667
`+
def test_rerun_fail(self):
`
``
668
`+
code = textwrap.dedent("""
`
``
669
`+
import unittest
`
``
670
+
``
671
`+
class Tests(unittest.TestCase):
`
``
672
`+
def test_bug(self):
`
``
673
`+
test always fail
`
``
674
`+
self.fail("bug")
`
``
675
+
``
676
`+
def test_main():
`
``
677
`+
support.run_unittest(Tests)
`
``
678
`+
""")
`
``
679
`+
testname = self.create_test(code=code)
`
``
680
+
``
681
`+
output = self.run_tests("-w", testname, exitcode=2)
`
``
682
`+
self.check_executed_tests(output, [testname],
`
``
683
`+
failed=testname, rerun=testname)
`
``
684
+
651
685
``
652
686
`def test_main():
`
653
687
`support.run_unittest(ProgramsTestCase, ArgsTestCase)
`