summaryrefslogtreecommitdiffstats
path: root/Lib/test/support
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test/support')
-rw-r--r--Lib/test/support/__init__.py22
1 files changed, 17 insertions, 5 deletions
diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py
index 1057aac..d476ba5 100644
--- a/Lib/test/support/__init__.py
+++ b/Lib/test/support/__init__.py
@@ -1082,18 +1082,30 @@ def check_impl_detail(**guards):
def no_tracing(func):
"""Decorator to temporarily turn off tracing for the duration of a test."""
- if not hasattr(sys, 'gettrace'):
- return func
- else:
+ trace_wrapper = func
+ if hasattr(sys, 'gettrace'):
@functools.wraps(func)
- def wrapper(*args, **kwargs):
+ def trace_wrapper(*args, **kwargs):
original_trace = sys.gettrace()
try:
sys.settrace(None)
return func(*args, **kwargs)
finally:
sys.settrace(original_trace)
- return wrapper
+
+ coverage_wrapper = trace_wrapper
+ if 'test.cov' in sys.modules: # -Xpresite=test.cov used
+ cov = sys.monitoring.COVERAGE_ID
+ @functools.wraps(func)
+ def coverage_wrapper(*args, **kwargs):
+ original_events = sys.monitoring.get_events(cov)
+ try:
+ sys.monitoring.set_events(cov, 0)
+ return trace_wrapper(*args, **kwargs)
+ finally:
+ sys.monitoring.set_events(cov, original_events)
+
+ return coverage_wrapper
def refcount_test(test):