summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/coveragetest.py10
-rw-r--r--tests/test_oddball.py40
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."""