summaryrefslogtreecommitdiffstats
path: root/Lib/unittest/test/test_result.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/unittest/test/test_result.py')
-rw-r--r--Lib/unittest/test/test_result.py199
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