summaryrefslogtreecommitdiff
path: root/tests/test_debug.py
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2023-01-22 09:08:09 -0500
committerNed Batchelder <ned@nedbatchelder.com>2023-01-22 10:58:53 -0500
commit5f65d87b14245d4523bc866a75a16b6c55a7ce70 (patch)
treebd4d404c80baa1c7e6e25e2335ffcee52702ee66 /tests/test_debug.py
parentc51ac463f07e31c87b20f50bd7e6445e4e4e83a2 (diff)
downloadpython-coveragepy-git-5f65d87b14245d4523bc866a75a16b6c55a7ce70.tar.gz
feat: the debug output file can be specified in the config file. #1319
Diffstat (limited to 'tests/test_debug.py')
-rw-r--r--tests/test_debug.py66
1 files changed, 53 insertions, 13 deletions
diff --git a/tests/test_debug.py b/tests/test_debug.py
index 38b70f28..c2d9efe3 100644
--- a/tests/test_debug.py
+++ b/tests/test_debug.py
@@ -17,8 +17,10 @@ import pytest
import coverage
from coverage import env
-from coverage.debug import filter_text, info_formatter, info_header, short_id, short_stack
-from coverage.debug import clipped_repr
+from coverage.debug import (
+ DebugOutputFile,
+ clipped_repr, filter_text, info_formatter, info_header, short_id, short_stack,
+)
from tests.coveragetest import CoverageTest
from tests.helpers import re_line, re_lines, re_lines_text
@@ -186,17 +188,7 @@ class DebugTraceTest(CoverageTest):
def test_debug_sys(self) -> None:
out_text = self.f1_debug_output(["sys"])
-
- labels = """
- coverage_version coverage_module coverage_paths stdlib_paths third_party_paths
- tracer configs_attempted config_file configs_read data_file
- python platform implementation executable
- pid cwd path environment command_line cover_match pylib_match
- """.split()
- for label in labels:
- label_pat = fr"^\s*{label}: "
- msg = f"Incorrect lines for {label!r}"
- assert 1 == len(re_lines(label_pat, out_text)), msg
+ assert_good_debug_sys(out_text)
def test_debug_sys_ctracer(self) -> None:
out_text = self.f1_debug_output(["sys"])
@@ -216,6 +208,54 @@ class DebugTraceTest(CoverageTest):
assert vtuple[:5] == sys.version_info
+def assert_good_debug_sys(out_text: str) -> None:
+ """Assert that `str` is good output for debug=sys."""
+ labels = """
+ coverage_version coverage_module coverage_paths stdlib_paths third_party_paths
+ tracer configs_attempted config_file configs_read data_file
+ python platform implementation executable
+ pid cwd path environment command_line cover_match pylib_match
+ """.split()
+ for label in labels:
+ label_pat = fr"^\s*{label}: "
+ msg = f"Incorrect lines for {label!r}"
+ assert 1 == len(re_lines(label_pat, out_text)), msg
+
+
+class DebugOutputTest(CoverageTest):
+ """Tests that we can direct debug output where we want."""
+
+ def setUp(self) -> None:
+ super().setUp()
+ # DebugOutputFile aggressively tries to start just one output file. We
+ # need to manually force it to make a new one.
+ DebugOutputFile._del_singleton_data()
+
+ def debug_sys(self) -> None:
+ """Run just enough coverage to get full debug=sys output."""
+ cov = coverage.Coverage(debug=["sys"])
+ cov.start()
+ cov.stop()
+
+ def test_stderr_default(self) -> None:
+ self.debug_sys()
+ assert_good_debug_sys(self.stderr())
+
+ def test_envvar(self) -> None:
+ self.set_environ("COVERAGE_DEBUG_FILE", "debug.out")
+ self.debug_sys()
+ assert self.stderr() == ""
+ with open("debug.out") as f:
+ assert_good_debug_sys(f.read())
+
+ def test_config_file(self) -> None:
+ self.make_file(".coveragerc", "[run]\ndebug_file = lotsa_info.txt")
+ self.debug_sys()
+ assert self.stderr() == ""
+ with open("lotsa_info.txt") as f:
+ assert_good_debug_sys(f.read())
+
+
def f_one(*args: Any, **kwargs: Any) -> str:
"""First of the chain of functions for testing `short_stack`."""
return f_two(*args, **kwargs)