diff options
Diffstat (limited to 'Lib/unittest/test/test_result.py')
-rw-r--r-- | Lib/unittest/test/test_result.py | 199 |
1 files changed, 31 insertions, 168 deletions
diff --git a/Lib/unittest/test/test_result.py b/Lib/unittest/test/test_result.py index 0ffb87b..2a596cd 100644 --- a/Lib/unittest/test/test_result.py +++ b/Lib/unittest/test/test_result.py @@ -1,27 +1,12 @@ -import io import sys import textwrap - -from test import support +from StringIO import StringIO +from test import test_support import traceback import unittest -class MockTraceback(object): - class TracebackException: - def __init__(self, *args, **kwargs): - self.capture_locals = kwargs.get('capture_locals', False) - def format(self): - result = ['A traceback'] - if self.capture_locals: - result.append('locals') - return result - -def restore_traceback(): - unittest.result.traceback = traceback - - class Test_TestResult(unittest.TestCase): # Note: there are not separate tests for TestResult.wasSuccessful(), # TestResult.errors, TestResult.failures, TestResult.testsRun or @@ -43,6 +28,7 @@ class Test_TestResult(unittest.TestCase): self.assertIsNone(result._stdout_buffer) self.assertIsNone(result._stderr_buffer) + # "This method can be called to signal that the set of tests being # run should be aborted by setting the TestResult's shouldStop # attribute to True." @@ -241,59 +227,6 @@ class Test_TestResult(unittest.TestCase): self.assertIs(test_case, test) self.assertIsInstance(formatted_exc, str) - def test_addError_locals(self): - class Foo(unittest.TestCase): - def test_1(self): - 1/0 - - test = Foo('test_1') - result = unittest.TestResult() - result.tb_locals = True - - unittest.result.traceback = MockTraceback - self.addCleanup(restore_traceback) - result.startTestRun() - test.run(result) - result.stopTestRun() - - self.assertEqual(len(result.errors), 1) - test_case, formatted_exc = result.errors[0] - self.assertEqual('A tracebacklocals', formatted_exc) - - def test_addSubTest(self): - class Foo(unittest.TestCase): - def test_1(self): - nonlocal subtest - with self.subTest(foo=1): - subtest = self._subtest - try: - 1/0 - except ZeroDivisionError: - exc_info_tuple = sys.exc_info() - # Register an error by hand (to check the API) - result.addSubTest(test, subtest, exc_info_tuple) - # Now trigger a failure - self.fail("some recognizable failure") - - subtest = None - test = Foo('test_1') - result = unittest.TestResult() - - test.run(result) - - self.assertFalse(result.wasSuccessful()) - self.assertEqual(len(result.errors), 1) - self.assertEqual(len(result.failures), 1) - self.assertEqual(result.testsRun, 1) - self.assertEqual(result.shouldStop, False) - - test_case, formatted_exc = result.errors[0] - self.assertIs(test_case, subtest) - self.assertIn("ZeroDivisionError", formatted_exc) - test_case, formatted_exc = result.failures[0] - self.assertIs(test_case, subtest) - self.assertIn("some recognizable failure", formatted_exc) - def testGetDescriptionWithoutDocstring(self): result = unittest.TextTestResult(None, True, 1) self.assertEqual( @@ -301,56 +234,6 @@ class Test_TestResult(unittest.TestCase): 'testGetDescriptionWithoutDocstring (' + __name__ + '.Test_TestResult)') - def testGetSubTestDescriptionWithoutDocstring(self): - with self.subTest(foo=1, bar=2): - result = unittest.TextTestResult(None, True, 1) - self.assertEqual( - result.getDescription(self._subtest), - 'testGetSubTestDescriptionWithoutDocstring (' + __name__ + - '.Test_TestResult) (foo=1, bar=2)') - with self.subTest('some message'): - result = unittest.TextTestResult(None, True, 1) - self.assertEqual( - result.getDescription(self._subtest), - 'testGetSubTestDescriptionWithoutDocstring (' + __name__ + - '.Test_TestResult) [some message]') - - def testGetSubTestDescriptionWithoutDocstringAndParams(self): - with self.subTest(): - result = unittest.TextTestResult(None, True, 1) - self.assertEqual( - result.getDescription(self._subtest), - 'testGetSubTestDescriptionWithoutDocstringAndParams ' - '(' + __name__ + '.Test_TestResult) (<subtest>)') - - def testGetSubTestDescriptionForFalsyValues(self): - expected = 'testGetSubTestDescriptionForFalsyValues (%s.Test_TestResult) [%s]' - result = unittest.TextTestResult(None, True, 1) - for arg in [0, None, []]: - with self.subTest(arg): - self.assertEqual( - result.getDescription(self._subtest), - expected % (__name__, arg) - ) - - def testGetNestedSubTestDescriptionWithoutDocstring(self): - with self.subTest(foo=1): - with self.subTest(baz=2, bar=3): - result = unittest.TextTestResult(None, True, 1) - self.assertEqual( - result.getDescription(self._subtest), - 'testGetNestedSubTestDescriptionWithoutDocstring ' - '(' + __name__ + '.Test_TestResult) (baz=2, bar=3, foo=1)') - - def testGetDuplicatedNestedSubTestDescriptionWithoutDocstring(self): - with self.subTest(foo=1, bar=2): - with self.subTest(baz=3, bar=4): - result = unittest.TextTestResult(None, True, 1) - self.assertEqual( - result.getDescription(self._subtest), - 'testGetDuplicatedNestedSubTestDescriptionWithoutDocstring ' - '(' + __name__ + '.Test_TestResult) (baz=3, bar=4, foo=1)') - @unittest.skipIf(sys.flags.optimize >= 2, "Docstrings are omitted with -O2 and above") def testGetDescriptionWithOneLineDocstring(self): @@ -364,18 +247,6 @@ class Test_TestResult(unittest.TestCase): @unittest.skipIf(sys.flags.optimize >= 2, "Docstrings are omitted with -O2 and above") - def testGetSubTestDescriptionWithOneLineDocstring(self): - """Tests getDescription() for a method with a docstring.""" - result = unittest.TextTestResult(None, True, 1) - with self.subTest(foo=1, bar=2): - self.assertEqual( - result.getDescription(self._subtest), - ('testGetSubTestDescriptionWithOneLineDocstring ' - '(' + __name__ + '.Test_TestResult) (foo=1, bar=2)\n' - 'Tests getDescription() for a method with a docstring.')) - - @unittest.skipIf(sys.flags.optimize >= 2, - "Docstrings are omitted with -O2 and above") def testGetDescriptionWithMultiLineDocstring(self): """Tests getDescription() for a method with a longer docstring. The second line of the docstring. @@ -388,21 +259,6 @@ class Test_TestResult(unittest.TestCase): 'Tests getDescription() for a method with a longer ' 'docstring.')) - @unittest.skipIf(sys.flags.optimize >= 2, - "Docstrings are omitted with -O2 and above") - def testGetSubTestDescriptionWithMultiLineDocstring(self): - """Tests getDescription() for a method with a longer docstring. - The second line of the docstring. - """ - result = unittest.TextTestResult(None, True, 1) - with self.subTest(foo=1, bar=2): - self.assertEqual( - result.getDescription(self._subtest), - ('testGetSubTestDescriptionWithMultiLineDocstring ' - '(' + __name__ + '.Test_TestResult) (foo=1, bar=2)\n' - 'Tests getDescription() for a method with a longer ' - 'docstring.')) - def testStackFrameTrimming(self): class Frame(object): class tb_frame(object): @@ -433,10 +289,10 @@ class Test_TestResult(unittest.TestCase): self.assertTrue(result.shouldStop) def testFailFastSetByRunner(self): - runner = unittest.TextTestRunner(stream=io.StringIO(), failfast=True) + runner = unittest.TextTestRunner(stream=StringIO(), failfast=True) def test(result): self.assertTrue(result.failfast) - result = runner.run(test) + runner.run(test) classDict = dict(unittest.TestResult.__dict__) @@ -450,7 +306,6 @@ def __init__(self, stream=None, descriptions=None, verbosity=None): self.testsRun = 0 self.shouldStop = False self.buffer = False - self.tb_locals = False classDict['__init__'] = __init__ OldResult = type('OldResult', (object,), classDict) @@ -458,8 +313,8 @@ OldResult = type('OldResult', (object,), classDict) class Test_OldTestResult(unittest.TestCase): def assertOldResultWarning(self, test, failures): - with support.check_warnings(("TestResult has no add.+ method,", - RuntimeWarning)): + with test_support.check_warnings(("TestResult has no add.+ method,", + RuntimeWarning)): result = OldResult() test.run(result) self.assertEqual(len(result.failures), failures) @@ -501,12 +356,21 @@ class Test_OldTestResult(unittest.TestCase): def testFoo(self): pass runner = unittest.TextTestRunner(resultclass=OldResult, - stream=io.StringIO()) + stream=StringIO()) # This will raise an exception if TextTestRunner can't handle old # test result objects runner.run(Test('testFoo')) +class MockTraceback(object): + @staticmethod + def format_exception(*_): + return ['A traceback'] + +def restore_traceback(): + unittest.result.traceback = traceback + + class TestOutputBuffering(unittest.TestCase): def setUp(self): @@ -548,18 +412,18 @@ class TestOutputBuffering(unittest.TestCase): self.assertIsNot(real_out, sys.stdout) self.assertIsNot(real_err, sys.stderr) - self.assertIsInstance(sys.stdout, io.StringIO) - self.assertIsInstance(sys.stderr, io.StringIO) + self.assertIsInstance(sys.stdout, StringIO) + self.assertIsInstance(sys.stderr, StringIO) self.assertIsNot(sys.stdout, sys.stderr) out_stream = sys.stdout err_stream = sys.stderr - result._original_stdout = io.StringIO() - result._original_stderr = io.StringIO() + result._original_stdout = StringIO() + result._original_stderr = StringIO() - print('foo') - print('bar', file=sys.stderr) + print 'foo' + print >> sys.stderr, 'bar' self.assertEqual(out_stream.getvalue(), 'foo\n') self.assertEqual(err_stream.getvalue(), 'bar\n') @@ -599,12 +463,12 @@ class TestOutputBuffering(unittest.TestCase): result = self.getStartedResult() buffered_out = sys.stdout buffered_err = sys.stderr - result._original_stdout = io.StringIO() - result._original_stderr = io.StringIO() + result._original_stdout = StringIO() + result._original_stderr = StringIO() - print('foo', file=sys.stdout) + print >> sys.stdout, 'foo' if include_error: - print('bar', file=sys.stderr) + print >> sys.stderr, 'bar' addFunction = getattr(result, add_attr) @@ -625,7 +489,6 @@ class TestOutputBuffering(unittest.TestCase): Stderr: bar """) - expectedFullMessage = 'A traceback%s%s' % (expectedOutMessage, expectedErrMessage) self.assertIs(test, self) @@ -640,7 +503,7 @@ class TestOutputBuffering(unittest.TestCase): class Foo(unittest.TestCase): @classmethod def setUpClass(cls): - 1/0 + 1//0 def test_foo(self): pass suite = unittest.TestSuite([Foo('test_foo')]) @@ -654,7 +517,7 @@ class TestOutputBuffering(unittest.TestCase): class Foo(unittest.TestCase): @classmethod def tearDownClass(cls): - 1/0 + 1//0 def test_foo(self): pass suite = unittest.TestSuite([Foo('test_foo')]) @@ -671,7 +534,7 @@ class TestOutputBuffering(unittest.TestCase): class Module(object): @staticmethod def setUpModule(): - 1/0 + 1//0 Foo.__module__ = 'Module' sys.modules['Module'] = Module @@ -690,7 +553,7 @@ class TestOutputBuffering(unittest.TestCase): class Module(object): @staticmethod def tearDownModule(): - 1/0 + 1//0 Foo.__module__ = 'Module' sys.modules['Module'] = Module |