Skip to content

Commit b0236df

Browse files
committed
test: more tests for core selection, and some refactoring of them
1 parent 56edde6 commit b0236df

File tree

2 files changed

+65
-10
lines changed

2 files changed

+65
-10
lines changed

tests/test_process.py

Lines changed: 60 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1326,9 +1326,14 @@ class CoverageCoreTest(CoverageTest):
13261326
except ImportError:
13271327
has_ctracer = False
13281328

1329-
def test_core_default(self) -> None:
1329+
def setUp(self) -> None:
1330+
super().setUp()
1331+
# Clean out the environment variable the test suite uses to control the
1332+
# core it cares about.
13301333
self.del_environ("COVERAGE_CORE")
13311334
self.make_file("numbers.py", "print(123, 456)")
1335+
1336+
def test_core_default(self) -> None:
13321337
out = self.run_command("coverage run --debug=sys numbers.py")
13331338
assert out.endswith("123 456\n")
13341339
core = re_line(r" core:", out).strip()
@@ -1346,17 +1351,14 @@ def test_core_default(self) -> None:
13461351
@pytest.mark.skipif(not has_ctracer, reason="No CTracer to request")
13471352
def test_core_request_ctrace(self) -> None:
13481353
self.set_environ("COVERAGE_CORE", "ctrace")
1349-
self.make_file("numbers.py", "print(123, 456)")
13501354
out = self.run_command("coverage run --debug=sys numbers.py")
13511355
assert out.endswith("123 456\n")
13521356
core = re_line(r" core:", out).strip()
13531357
assert core == "core: CTracer"
13541358

13551359
@pytest.mark.skipif(has_ctracer, reason="CTracer needs to be missing")
13561360
def test_core_request_ctrace_but_missing(self) -> None:
1357-
self.del_environ("COVERAGE_CORE")
13581361
self.make_file(".coveragerc", "[run]\ncore = ctrace\n")
1359-
self.make_file("numbers.py", "print(123, 456)")
13601362
out = self.run_command("coverage run --debug=sys,pybehave numbers.py")
13611363
assert out.endswith("123 456\n")
13621364
core = re_line(r" core:", out).strip()
@@ -1366,15 +1368,13 @@ def test_core_request_ctrace_but_missing(self) -> None:
13661368

13671369
def test_core_request_pytrace(self) -> None:
13681370
self.set_environ("COVERAGE_CORE", "pytrace")
1369-
self.make_file("numbers.py", "print(123, 456)")
13701371
out = self.run_command("coverage run --debug=sys numbers.py")
13711372
assert out.endswith("123 456\n")
13721373
core = re_line(r" core:", out).strip()
13731374
assert core == "core: PyTracer"
13741375

13751376
def test_core_request_sysmon(self) -> None:
13761377
self.set_environ("COVERAGE_CORE", "sysmon")
1377-
self.make_file("numbers.py", "print(123, 456)")
13781378
out = self.run_command("coverage run --debug=sys numbers.py")
13791379
assert out.endswith("123 456\n")
13801380
core = re_line(r" core:", out).strip()
@@ -1386,9 +1386,62 @@ def test_core_request_sysmon(self) -> None:
13861386
assert core in ["core: CTracer", "core: PyTracer"]
13871387
assert warns
13881388

1389+
def test_core_request_sysmon_no_dyncontext(self) -> None:
1390+
# Use config core= for this test just to be different.
1391+
self.make_file(
1392+
".coveragerc",
1393+
"""\
1394+
[run]
1395+
core = sysmon
1396+
dynamic_context = test_function
1397+
""",
1398+
)
1399+
out = self.run_command("coverage run --debug=sys numbers.py")
1400+
assert out.endswith("123 456\n")
1401+
core = re_line(r" core:", out).strip()
1402+
assert core in ["core: CTracer", "core: PyTracer"]
1403+
warns = re_lines(r"\(no-sysmon\)", out)
1404+
assert len(warns) == 1
1405+
if env.PYBEHAVIOR.pep669:
1406+
assert (
1407+
"sys.monitoring doesn't yet support dynamic contexts, using default core"
1408+
in warns[0]
1409+
)
1410+
else:
1411+
assert "sys.monitoring isn't available in this version, using default core" in warns[0]
1412+
1413+
def test_core_request_sysmon_no_branches(self) -> None:
1414+
# Use config core= for this test just to be different.
1415+
self.make_file(
1416+
".coveragerc",
1417+
"""\
1418+
[run]
1419+
core = sysmon
1420+
branch = True
1421+
""",
1422+
)
1423+
out = self.run_command("coverage run --debug=sys numbers.py")
1424+
assert out.endswith("123 456\n")
1425+
core = re_line(r" core:", out).strip()
1426+
warns = re_lines(r"\(no-sysmon\)", out)
1427+
if env.PYBEHAVIOR.branch_right_left:
1428+
assert core == "core: SysMonitor"
1429+
assert not warns
1430+
else:
1431+
assert core in ["core: CTracer", "core: PyTracer"]
1432+
assert len(warns) == 1
1433+
if env.PYBEHAVIOR.pep669:
1434+
assert (
1435+
"sys.monitoring can't measure branches in this version, using default core"
1436+
in warns[0]
1437+
)
1438+
else:
1439+
assert (
1440+
"sys.monitoring isn't available in this version, using default core" in warns[0]
1441+
)
1442+
13891443
def test_core_request_nosuchcore(self) -> None:
13901444
self.set_environ("COVERAGE_CORE", "nosuchcore")
1391-
self.make_file("numbers.py", "print(123, 456)")
13921445
out = self.run_command("coverage run numbers.py", status=1)
13931446
assert "Unknown core value: 'nosuchcore'\n" in out
13941447
assert "123 456" not in out

tests/testenv.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,16 @@
77

88
import os
99

10+
REQUESTED_CORE = os.getenv("COVERAGE_CORE", "ctrace")
11+
1012
# Are we testing the C-implemented trace function?
11-
C_TRACER = os.getenv("COVERAGE_CORE", "ctrace") == "ctrace"
13+
C_TRACER = REQUESTED_CORE == "ctrace"
1214

1315
# Are we testing the Python-implemented trace function?
14-
PY_TRACER = os.getenv("COVERAGE_CORE", "ctrace") == "pytrace"
16+
PY_TRACER = REQUESTED_CORE == "pytrace"
1517

1618
# Are we testing the sys.monitoring implementation?
17-
SYS_MON = os.getenv("COVERAGE_CORE", "ctrace") == "sysmon"
19+
SYS_MON = REQUESTED_CORE == "sysmon"
1820

1921
# Are we using a settrace function as a core?
2022
SETTRACE_CORE = C_TRACER or PY_TRACER

0 commit comments

Comments
 (0)