Skip to content

Commit 199ad9e

Browse files
committed
test: do real installs for tox test runs
use_develop=True I think is part of our problem getting free-threading and gil builds to both test properly in all environments, so I'm ditching it.
1 parent 8da4a00 commit 199ad9e

File tree

8 files changed

+27
-15
lines changed

8 files changed

+27
-15
lines changed

coverage/cmdline.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
from coverage import env
2222
from coverage.config import CoverageConfig
2323
from coverage.control import DEFAULT_DATAFILE
24-
from coverage.core import HAS_CTRACER
24+
from coverage.core import CTRACER_FILE
2525
from coverage.data import combinable_files, debug_data_file
2626
from coverage.debug import info_header, short_stack, write_formatted_info
2727
from coverage.exceptions import _BaseCoverageException, _ExceptionDuringRun, NoSource
@@ -574,7 +574,7 @@ def show_help(
574574
help_params = dict(coverage.__dict__)
575575
help_params["__url__"] = __url__
576576
help_params["program_name"] = program_name
577-
if HAS_CTRACER:
577+
if CTRACER_FILE:
578578
help_params["extension_modifier"] = "with C extension"
579579
else:
580580
help_params["extension_modifier"] = "without C extension"

coverage/control.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
from coverage.collector import Collector
2828
from coverage.config import CoverageConfig, read_coverage_config
2929
from coverage.context import should_start_context_test_function, combine_context_switchers
30-
from coverage.core import Core, HAS_CTRACER
30+
from coverage.core import Core, CTRACER_FILE
3131
from coverage.data import CoverageData, combine_parallel_data
3232
from coverage.debug import (
3333
DebugControl, NoDebugging, short_stack, write_formatted_info, relevant_environment_display,
@@ -1336,7 +1336,7 @@ def plugin_info(plugins: list[Any]) -> list[str]:
13361336
("coverage_version", covmod.__version__),
13371337
("coverage_module", covmod.__file__),
13381338
("core", self._collector.tracer_name() if self._collector is not None else "-none-"),
1339-
("CTracer", "available" if HAS_CTRACER else "unavailable"),
1339+
("CTracer", f"available from {CTRACER_FILE}" if CTRACER_FILE else "unavailable"),
13401340
("plugins.file_tracers", plugin_info(self._plugins.file_tracers)),
13411341
("plugins.configurers", plugin_info(self._plugins.configurers)),
13421342
("plugins.context_switchers", plugin_info(self._plugins.context_switchers)),

coverage/core.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@
2727

2828
try:
2929
# Use the C extension code when we can, for speed.
30-
from coverage.tracer import CTracer, CFileDisposition
31-
HAS_CTRACER = True
30+
import coverage.tracer
31+
CTRACER_FILE = coverage.tracer.__file__
3232
except ImportError:
3333
# Couldn't import the C extension, maybe it isn't built.
3434
if os.getenv("COVERAGE_CORE") == "ctrace": # pragma: part covered
@@ -40,7 +40,7 @@
4040
# exception here causes all sorts of other noise in unittest.
4141
sys.stderr.write("*** COVERAGE_CORE is 'ctrace' but can't import CTracer!\n")
4242
sys.exit(1)
43-
HAS_CTRACER = False
43+
CTRACER_FILE = None
4444

4545

4646
class Core:
@@ -84,7 +84,7 @@ def __init__(
8484
# Someday we will default to sysmon, but it's still experimental:
8585
# if not reason_no_sysmon:
8686
# core_name = "sysmon"
87-
if HAS_CTRACER:
87+
if CTRACER_FILE:
8888
core_name = "ctrace"
8989
else:
9090
core_name = "pytrace"
@@ -99,8 +99,8 @@ def __init__(
9999
self.packed_arcs = False
100100
self.systrace = False
101101
elif core_name == "ctrace":
102-
self.tracer_class = CTracer
103-
self.file_disposition_class = CFileDisposition
102+
self.tracer_class = coverage.tracer.CTracer
103+
self.file_disposition_class = coverage.tracer.CFileDisposition
104104
self.supports_plugins = True
105105
self.packed_arcs = True
106106
self.systrace = True

igor.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ def ignore_warnings():
4747
yield
4848

4949

50+
# $set_env.py: COVERAGE_IGOR_VERBOSE - More output from igor.py
5051
VERBOSITY = int(os.getenv("COVERAGE_IGOR_VERBOSE", "0"))
5152

5253
# Functions named do_* are executable from the command line: do_blah is run
@@ -86,7 +87,11 @@ def do_remove_extension(*args):
8687
)
8788
roots = [root]
8889
else:
89-
roots = ["coverage", "build/*/coverage"]
90+
roots = [
91+
"coverage",
92+
"build/*/coverage",
93+
".tox/*/lib/*/site-packages/coverage",
94+
]
9095

9196
for root, pattern in itertools.product(roots, so_patterns):
9297
pattern = os.path.join(root, pattern.strip())

tests/helpers.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -379,9 +379,17 @@ def _decorator(fn: TestMethod) -> TestMethod:
379379
def all_our_source_files() -> Iterator[tuple[Path, str]]:
380380
"""Iterate over all of our own source files.
381381
382+
This is used in tests that need a bunch of Python code to analyze, so we
383+
might as well use our own source code as the subject.
384+
382385
Produces a stream of (filename, file contents) tuples.
383386
"""
384387
cov_dir = Path(coverage.__file__).parent.parent
388+
if ".tox" in cov_dir.parts:
389+
# We are in a tox-installed environment, look above the .tox dir to
390+
# also find the uninstalled source files.
391+
cov_dir = Path(os.fspath(cov_dir).partition(".tox")[0])
392+
385393
# To run against all the files in the tox venvs:
386394
# for source_file in cov_dir.rglob("*.py"):
387395
for sub in [".", "benchmark", "ci", "coverage", "lab", "tests"]:

tests/test_debug.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -199,10 +199,9 @@ def test_debug_sys_ctracer(self) -> None:
199199
out_text = self.f1_debug_output(["sys"])
200200
tracer_line = re_line(r"CTracer:", out_text).strip()
201201
if testenv.C_TRACER or testenv.SYS_MON:
202-
expected = "CTracer: available"
202+
assert tracer_line.startswith("CTracer: available from ")
203203
else:
204-
expected = "CTracer: unavailable"
205-
assert expected == tracer_line
204+
assert tracer_line == "CTracer: unavailable"
206205

207206
def test_debug_pybehave(self) -> None:
208207
out_text = self.f1_debug_output(["pybehave"])

tests/test_testing.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -460,4 +460,5 @@ def test_all_our_source_files() -> None:
460460
has_toves = (source_file.name == "test_testing.py")
461461
assert (("# Twas brillig " + "and the slithy toves") in source) == has_toves
462462
assert len(source) > 190 # tests/__init__.py is shortest at 196
463+
assert has_toves
463464
assert 120 < i < 200 # currently 125 files

tox.ini

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ skip_missing_interpreters = {env:COVERAGE_SKIP_MISSING_INTERPRETERS:True}
99
toxworkdir = {env:TOXWORKDIR:.tox}
1010

1111
[testenv]
12-
usedevelop = True
1312
download = True
1413
extras =
1514
toml

0 commit comments

Comments
 (0)