diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/coveragetest.py | 10 | ||||
-rw-r--r-- | tests/test_oddball.py | 40 |
2 files changed, 48 insertions, 2 deletions
diff --git a/tests/coveragetest.py b/tests/coveragetest.py index 0e9076cc..5042c98d 100644 --- a/tests/coveragetest.py +++ b/tests/coveragetest.py @@ -48,6 +48,11 @@ class CoverageTest( def setUp(self): super(CoverageTest, self).setUp() + # Attributes for getting info about what happened. + self.last_command_status = None + self.last_command_output = None + self.last_module_name = None + if _TEST_NAME_FILE: # pragma: debugging with open(_TEST_NAME_FILE, "w") as f: f.write("%s_%s" % ( @@ -104,8 +109,9 @@ class CoverageTest( return mod def get_module_name(self): - """Return the module name to use for this test run.""" - return 'coverage_test_' + str(random.random())[2:] + """Return a random module name to use for this test run.""" + self.last_module_name = 'coverage_test_' + str(random.random())[2:] + return self.last_module_name # Map chars to numbers for arcz_to_arcs _arcz_map = {'.': -1} diff --git a/tests/test_oddball.py b/tests/test_oddball.py index 8f9e9707..87c65b0e 100644 --- a/tests/test_oddball.py +++ b/tests/test_oddball.py @@ -410,6 +410,46 @@ class GettraceTest(CoverageTest): ''', [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], "") + def test_setting_new_trace_function(self): + # https://bitbucket.org/ned/coveragepy/issues/436/disabled-coverage-ctracer-may-rise-from + self.check_coverage('''\ + import sys + + def tracer(frame, event, arg): + print("%s: %s @ %d" % (event, frame.f_code.co_filename, frame.f_lineno)) + return tracer + + def begin(): + sys.settrace(tracer) + + def collect(): + t = sys.gettrace() + assert t is tracer, t + + def test_unsets_trace(): + begin() + collect() + + old = sys.gettrace() + test_unsets_trace() + sys.settrace(old) + ''', + lines=[1, 3, 4, 5, 7, 8, 10, 11, 12, 14, 15, 16, 18, 19, 20], + missing="4-5, 11-12", + ) + + out = self.stdout().replace(self.last_module_name, "coverage_test") + + self.assertEqual( + out, + ( + "call: coverage_test.py @ 10\n" + "line: coverage_test.py @ 11\n" + "line: coverage_test.py @ 12\n" + "return: coverage_test.py @ 12\n" + ), + ) + class ExecTest(CoverageTest): """Tests of exec.""" |