Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/absl/testing/_pretty_print_reporter.py: 39%
46 statements
« prev ^ index » next coverage.py v7.4.0, created at 2024-01-03 07:57 +0000
« prev ^ index » next coverage.py v7.4.0, created at 2024-01-03 07:57 +0000
1# Copyright 2018 The Abseil Authors.
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
15"""TestResult implementing default output for test execution status."""
17import unittest
20class TextTestResult(unittest.TextTestResult):
21 """TestResult class that provides the default text result formatting."""
23 def __init__(self, stream, descriptions, verbosity):
24 # Disable the verbose per-test output from the superclass, since it would
25 # conflict with our customized output.
26 super(TextTestResult, self).__init__(stream, descriptions, 0)
27 self._per_test_output = verbosity > 0
29 def _print_status(self, tag, test):
30 if self._per_test_output:
31 test_id = test.id()
32 if test_id.startswith('__main__.'):
33 test_id = test_id[len('__main__.'):]
34 print('[%s] %s' % (tag, test_id), file=self.stream)
35 self.stream.flush()
37 def startTest(self, test):
38 super(TextTestResult, self).startTest(test)
39 self._print_status(' RUN ', test)
41 def addSuccess(self, test):
42 super(TextTestResult, self).addSuccess(test)
43 self._print_status(' OK ', test)
45 def addError(self, test, err):
46 super(TextTestResult, self).addError(test, err)
47 self._print_status(' FAILED ', test)
49 def addFailure(self, test, err):
50 super(TextTestResult, self).addFailure(test, err)
51 self._print_status(' FAILED ', test)
53 def addSkip(self, test, reason):
54 super(TextTestResult, self).addSkip(test, reason)
55 self._print_status(' SKIPPED ', test)
57 def addExpectedFailure(self, test, err):
58 super(TextTestResult, self).addExpectedFailure(test, err)
59 self._print_status(' OK ', test)
61 def addUnexpectedSuccess(self, test):
62 super(TextTestResult, self).addUnexpectedSuccess(test)
63 self._print_status(' FAILED ', test)
66class TextTestRunner(unittest.TextTestRunner):
67 """A test runner that produces formatted text results."""
69 _TEST_RESULT_CLASS = TextTestResult
71 # Set this to true at the class or instance level to run tests using a
72 # debug-friendly method (e.g, one that doesn't catch exceptions and interacts
73 # better with debuggers).
74 # Usually this is set using --pdb_post_mortem.
75 run_for_debugging = False
77 def run(self, test):
78 # type: (TestCase) -> TestResult
79 if self.run_for_debugging:
80 return self._run_debug(test)
81 else:
82 return super(TextTestRunner, self).run(test)
84 def _run_debug(self, test):
85 # type: (TestCase) -> TestResult
86 test.debug()
87 # Return an empty result to indicate success.
88 return self._makeResult()
90 def _makeResult(self):
91 return TextTestResult(self.stream, self.descriptions, self.verbosity)