/usr/lib/python2.7/dist-packages/unittest2/test/support.py is in python-unittest2 1.1.0-6.1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 | import contextlib
import sys
import warnings
from six.moves import StringIO
import unittest2
def resultFactory(*_):
return unittest2.TestResult()
class OldTestResult(object):
"""An object honouring TestResult before startTestRun/stopTestRun."""
def __init__(self, *_):
self.failures = []
self.errors = []
self.testsRun = 0
self.shouldStop = False
def startTest(self, test):
# so this fake TestResult can still count tests
self.testsRun += 1
def stopTest(self, test):
pass
def addError(self, test, err):
self.errors.append((test, err))
def addFailure(self, test, err):
self.failures.append((test, err))
def addSuccess(self, test):
pass
def wasSuccessful(self):
return True
def printErrors(self):
pass
class _BaseLoggingResult(unittest2.TestResult):
def __init__(self, log):
self._events = log
super(_BaseLoggingResult, self).__init__()
def startTest(self, test):
self._events.append('startTest')
super(_BaseLoggingResult, self).startTest(test)
def startTestRun(self):
self._events.append('startTestRun')
super(_BaseLoggingResult, self).startTestRun()
def stopTest(self, test):
self._events.append('stopTest')
super(_BaseLoggingResult, self).stopTest(test)
def stopTestRun(self):
self._events.append('stopTestRun')
super(_BaseLoggingResult, self).stopTestRun()
def addFailure(self, *args):
self._events.append('addFailure')
super(_BaseLoggingResult, self).addFailure(*args)
def addSuccess(self, *args):
self._events.append('addSuccess')
super(_BaseLoggingResult, self).addSuccess(*args)
def addError(self, *args):
self._events.append('addError')
super(_BaseLoggingResult, self).addError(*args)
def addSkip(self, *args):
self._events.append('addSkip')
super(_BaseLoggingResult, self).addSkip(*args)
def addExpectedFailure(self, *args):
self._events.append('addExpectedFailure')
super(_BaseLoggingResult, self).addExpectedFailure(*args)
def addUnexpectedSuccess(self, *args):
self._events.append('addUnexpectedSuccess')
super(_BaseLoggingResult, self).addUnexpectedSuccess(*args)
class LegacyLoggingResult(_BaseLoggingResult):
"""
A legacy TestResult implementation, without an addSubTest method,
which records its method calls.
"""
@property
def addSubTest(self):
raise AttributeError
class LoggingResult(_BaseLoggingResult):
"""
A TestResult implementation which records its method calls.
"""
def addSubTest(self, test, subtest, err):
if err is None:
self._events.append('addSubTestSuccess')
else:
self._events.append('addSubTestFailure')
super(LoggingResult, self).addSubTest(test, subtest, err)
class EqualityMixin(object):
"""Used as a mixin for TestCase"""
# Check for a valid __eq__ implementation
def test_eq(self):
for obj_1, obj_2 in self.eq_pairs:
self.assertEqual(obj_1, obj_2)
self.assertEqual(obj_2, obj_1)
# Check for a valid __ne__ implementation
def test_ne(self):
for obj_1, obj_2 in self.ne_pairs:
self.assertNotEqual(obj_1, obj_2)
self.assertNotEqual(obj_2, obj_1)
class HashingMixin(object):
"""Used as a mixin for TestCase"""
# Check for a valid __hash__ implementation
def test_hash(self):
for obj_1, obj_2 in self.eq_pairs:
try:
if not hash(obj_1) == hash(obj_2):
self.fail("%r and %r do not hash equal" % (obj_1, obj_2))
except Exception:
e = sys.exc_info()[1]
self.fail("Problem hashing %r and %r: %s" % (obj_1, obj_2, e))
for obj_1, obj_2 in self.ne_pairs:
try:
if hash(obj_1) == hash(obj_2):
self.fail("%s and %s hash equal, but shouldn't" %
(obj_1, obj_2))
except Exception:
e = sys.exc_info()[1]
self.fail("Problem hashing %s and %s: %s" % (obj_1, obj_2, e))
@contextlib.contextmanager
def captured_output(stream_name):
"""Return a context manager used by captured_stdout/stdin/stderr
that temporarily replaces the sys stream *stream_name* with a StringIO."""
orig_stdout = getattr(sys, stream_name)
setattr(sys, stream_name, StringIO())
try:
yield getattr(sys, stream_name)
finally:
setattr(sys, stream_name, orig_stdout)
def captured_stdout():
"""Capture the output of sys.stdout:
with captured_stdout() as stdout:
print("hello")
self.assertEqual(stdout.getvalue(), "hello\n")
"""
return captured_output("stdout")
def captured_stderr():
"""Capture the output of sys.stderr:
with captured_stderr() as stderr:
print("hello", file=sys.stderr)
self.assertEqual(stderr.getvalue(), "hello\n")
"""
return captured_output("stderr")
def captured_stdin():
"""Capture the input to sys.stdin:
with captured_stdin() as stdin:
stdin.write('hello\n')
stdin.seek(0)
# call test code that consumes from sys.stdin
captured = input()
self.assertEqual(captured, "hello")
"""
return captured_output("stdin")
|