|
4 | 4 | import time |
5 | 5 | import warnings |
6 | 6 |
|
7 | | -from _colorize import get_colors |
| 7 | +from _colorize import get_theme |
8 | 8 |
|
9 | 9 | from . import result |
10 | 10 | from .case import _SubTest |
@@ -45,7 +45,7 @@ def __init__(self, stream, descriptions, verbosity, *, durations=None): |
45 | 45 | self.showAll = verbosity > 1 |
46 | 46 | self.dots = verbosity == 1 |
47 | 47 | self.descriptions = descriptions |
48 | | - self._ansi = get_colors(file=stream) |
| 48 | + self._theme = get_theme(tty_file=stream).unittest |
49 | 49 | self._newline = True |
50 | 50 | self.durations = durations |
51 | 51 |
|
@@ -79,101 +79,99 @@ def _write_status(self, test, status): |
79 | 79 |
|
80 | 80 | def addSubTest(self, test, subtest, err): |
81 | 81 | if err is not None: |
82 | | - red, reset = self._ansi.RED, self._ansi.RESET |
| 82 | + t = self._theme |
83 | 83 | if self.showAll: |
84 | 84 | if issubclass(err[0], subtest.failureException): |
85 | | - self._write_status(subtest, f"{red}FAIL{reset}") |
| 85 | + self._write_status(subtest, f"{t.fail}FAIL{t.reset}") |
86 | 86 | else: |
87 | | - self._write_status(subtest, f"{red}ERROR{reset}") |
| 87 | + self._write_status(subtest, f"{t.fail}ERROR{t.reset}") |
88 | 88 | elif self.dots: |
89 | 89 | if issubclass(err[0], subtest.failureException): |
90 | | - self.stream.write(f"{red}F{reset}") |
| 90 | + self.stream.write(f"{t.fail}F{t.reset}") |
91 | 91 | else: |
92 | | - self.stream.write(f"{red}E{reset}") |
| 92 | + self.stream.write(f"{t.fail}E{t.reset}") |
93 | 93 | self.stream.flush() |
94 | 94 | super(TextTestResult, self).addSubTest(test, subtest, err) |
95 | 95 |
|
96 | 96 | def addSuccess(self, test): |
97 | 97 | super(TextTestResult, self).addSuccess(test) |
98 | | - green, reset = self._ansi.GREEN, self._ansi.RESET |
| 98 | + t = self._theme |
99 | 99 | if self.showAll: |
100 | | - self._write_status(test, f"{green}ok{reset}") |
| 100 | + self._write_status(test, f"{t.passed}ok{t.reset}") |
101 | 101 | elif self.dots: |
102 | | - self.stream.write(f"{green}.{reset}") |
| 102 | + self.stream.write(f"{t.passed}.{t.reset}") |
103 | 103 | self.stream.flush() |
104 | 104 |
|
105 | 105 | def addError(self, test, err): |
106 | 106 | super(TextTestResult, self).addError(test, err) |
107 | | - red, reset = self._ansi.RED, self._ansi.RESET |
| 107 | + t = self._theme |
108 | 108 | if self.showAll: |
109 | | - self._write_status(test, f"{red}ERROR{reset}") |
| 109 | + self._write_status(test, f"{t.fail}ERROR{t.reset}") |
110 | 110 | elif self.dots: |
111 | | - self.stream.write(f"{red}E{reset}") |
| 111 | + self.stream.write(f"{t.fail}E{t.reset}") |
112 | 112 | self.stream.flush() |
113 | 113 |
|
114 | 114 | def addFailure(self, test, err): |
115 | 115 | super(TextTestResult, self).addFailure(test, err) |
116 | | - red, reset = self._ansi.RED, self._ansi.RESET |
| 116 | + t = self._theme |
117 | 117 | if self.showAll: |
118 | | - self._write_status(test, f"{red}FAIL{reset}") |
| 118 | + self._write_status(test, f"{t.fail}FAIL{t.reset}") |
119 | 119 | elif self.dots: |
120 | | - self.stream.write(f"{red}F{reset}") |
| 120 | + self.stream.write(f"{t.fail}F{t.reset}") |
121 | 121 | self.stream.flush() |
122 | 122 |
|
123 | 123 | def addSkip(self, test, reason): |
124 | 124 | super(TextTestResult, self).addSkip(test, reason) |
125 | | - yellow, reset = self._ansi.YELLOW, self._ansi.RESET |
| 125 | + t = self._theme |
126 | 126 | if self.showAll: |
127 | | - self._write_status(test, f"{yellow}skipped{reset} {reason!r}") |
| 127 | + self._write_status(test, f"{t.warn}skipped{t.reset} {reason!r}") |
128 | 128 | elif self.dots: |
129 | | - self.stream.write(f"{yellow}s{reset}") |
| 129 | + self.stream.write(f"{t.warn}s{t.reset}") |
130 | 130 | self.stream.flush() |
131 | 131 |
|
132 | 132 | def addExpectedFailure(self, test, err): |
133 | 133 | super(TextTestResult, self).addExpectedFailure(test, err) |
134 | | - yellow, reset = self._ansi.YELLOW, self._ansi.RESET |
| 134 | + t = self._theme |
135 | 135 | if self.showAll: |
136 | | - self.stream.writeln(f"{yellow}expected failure{reset}") |
| 136 | + self.stream.writeln(f"{t.warn}expected failure{t.reset}") |
137 | 137 | self.stream.flush() |
138 | 138 | elif self.dots: |
139 | | - self.stream.write(f"{yellow}x{reset}") |
| 139 | + self.stream.write(f"{t.warn}x{t.reset}") |
140 | 140 | self.stream.flush() |
141 | 141 |
|
142 | 142 | def addUnexpectedSuccess(self, test): |
143 | 143 | super(TextTestResult, self).addUnexpectedSuccess(test) |
144 | | - red, reset = self._ansi.RED, self._ansi.RESET |
| 144 | + t = self._theme |
145 | 145 | if self.showAll: |
146 | | - self.stream.writeln(f"{red}unexpected success{reset}") |
| 146 | + self.stream.writeln(f"{t.fail}unexpected success{t.reset}") |
147 | 147 | self.stream.flush() |
148 | 148 | elif self.dots: |
149 | | - self.stream.write(f"{red}u{reset}") |
| 149 | + self.stream.write(f"{t.fail}u{t.reset}") |
150 | 150 | self.stream.flush() |
151 | 151 |
|
152 | 152 | def printErrors(self): |
153 | | - bold_red = self._ansi.BOLD_RED |
154 | | - red = self._ansi.RED |
155 | | - reset = self._ansi.RESET |
| 153 | + t = self._theme |
156 | 154 | if self.dots or self.showAll: |
157 | 155 | self.stream.writeln() |
158 | 156 | self.stream.flush() |
159 | | - self.printErrorList(f"{red}ERROR{reset}", self.errors) |
160 | | - self.printErrorList(f"{red}FAIL{reset}", self.failures) |
| 157 | + self.printErrorList(f"{t.fail}ERROR{t.reset}", self.errors) |
| 158 | + self.printErrorList(f"{t.fail}FAIL{t.reset}", self.failures) |
161 | 159 | unexpectedSuccesses = getattr(self, "unexpectedSuccesses", ()) |
162 | 160 | if unexpectedSuccesses: |
163 | 161 | self.stream.writeln(self.separator1) |
164 | 162 | for test in unexpectedSuccesses: |
165 | 163 | self.stream.writeln( |
166 | | - f"{red}UNEXPECTED SUCCESS{bold_red}: " |
167 | | - f"{self.getDescription(test)}{reset}" |
| 164 | + f"{t.fail}UNEXPECTED SUCCESS{t.fail_info}: " |
| 165 | + f"{self.getDescription(test)}{t.reset}" |
168 | 166 | ) |
169 | 167 | self.stream.flush() |
170 | 168 |
|
171 | 169 | def printErrorList(self, flavour, errors): |
172 | | - bold_red, reset = self._ansi.BOLD_RED, self._ansi.RESET |
| 170 | + t = self._theme |
173 | 171 | for test, err in errors: |
174 | 172 | self.stream.writeln(self.separator1) |
175 | 173 | self.stream.writeln( |
176 | | - f"{flavour}{bold_red}: {self.getDescription(test)}{reset}" |
| 174 | + f"{flavour}{t.fail_info}: {self.getDescription(test)}{t.reset}" |
177 | 175 | ) |
178 | 176 | self.stream.writeln(self.separator2) |
179 | 177 | self.stream.writeln("%s" % err) |
@@ -286,31 +284,26 @@ def run(self, test): |
286 | 284 | expected_fails, unexpected_successes, skipped = results |
287 | 285 |
|
288 | 286 | infos = [] |
289 | | - ansi = get_colors(file=self.stream) |
290 | | - bold_red = ansi.BOLD_RED |
291 | | - green = ansi.GREEN |
292 | | - red = ansi.RED |
293 | | - reset = ansi.RESET |
294 | | - yellow = ansi.YELLOW |
| 287 | + t = get_theme(tty_file=self.stream).unittest |
295 | 288 |
|
296 | 289 | if not result.wasSuccessful(): |
297 | | - self.stream.write(f"{bold_red}FAILED{reset}") |
| 290 | + self.stream.write(f"{t.fail_info}FAILED{t.reset}") |
298 | 291 | failed, errored = len(result.failures), len(result.errors) |
299 | 292 | if failed: |
300 | | - infos.append(f"{bold_red}failures={failed}{reset}") |
| 293 | + infos.append(f"{t.fail_info}failures={failed}{t.reset}") |
301 | 294 | if errored: |
302 | | - infos.append(f"{bold_red}errors={errored}{reset}") |
| 295 | + infos.append(f"{t.fail_info}errors={errored}{t.reset}") |
303 | 296 | elif run == 0 and not skipped: |
304 | | - self.stream.write(f"{yellow}NO TESTS RAN{reset}") |
| 297 | + self.stream.write(f"{t.warn}NO TESTS RAN{t.reset}") |
305 | 298 | else: |
306 | | - self.stream.write(f"{green}OK{reset}") |
| 299 | + self.stream.write(f"{t.passed}OK{t.reset}") |
307 | 300 | if skipped: |
308 | | - infos.append(f"{yellow}skipped={skipped}{reset}") |
| 301 | + infos.append(f"{t.warn}skipped={skipped}{t.reset}") |
309 | 302 | if expected_fails: |
310 | | - infos.append(f"{yellow}expected failures={expected_fails}{reset}") |
| 303 | + infos.append(f"{t.warn}expected failures={expected_fails}{t.reset}") |
311 | 304 | if unexpected_successes: |
312 | 305 | infos.append( |
313 | | - f"{red}unexpected successes={unexpected_successes}{reset}" |
| 306 | + f"{t.fail}unexpected successes={unexpected_successes}{t.reset}" |
314 | 307 | ) |
315 | 308 | if infos: |
316 | 309 | self.stream.writeln(" (%s)" % (", ".join(infos),)) |
|
0 commit comments