Skip to content

Commit e716ac2

Browse files
committed
πŸ› fix(coverage): handle version-specific coverage gaps
On 3.10 the "venv" sysconfig scheme doesn't exist, making several code paths unreachable. On 3.12 in CI tkinter is unavailable, skipping the test body. Use version pragmas and pytest.importorskip accordingly.
1 parent e37c370 commit e716ac2

3 files changed

Lines changed: 6 additions & 9 deletions

File tree

β€Žsrc/py_discovery/_py_info.pyβ€Ž

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ def abs_path(v):
9595

9696
scheme_names = sysconfig.get_scheme_names()
9797

98-
if "venv" in scheme_names:
98+
if "venv" in scheme_names: # pragma: >=3.11 cover
9999
self.sysconfig_scheme = "venv"
100100
self.sysconfig_paths = {
101101
i: sysconfig.get_path(i, expand=False, scheme=self.sysconfig_scheme) for i in sysconfig.get_path_names()
@@ -223,11 +223,11 @@ def _fast_get_system_executable(self):
223223
return None
224224

225225
# We're not in a venv and base_executable exists; use it directly
226-
if os.path.exists(base_executable):
226+
if os.path.exists(base_executable): # pragma: >=3.11 cover
227227
return base_executable
228228

229229
# Try fallback for POSIX virtual environments
230-
return self._try_posix_fallback_executable(base_executable)
230+
return self._try_posix_fallback_executable(base_executable) # pragma: >=3.11 cover
231231

232232
def _try_posix_fallback_executable(self, base_executable):
233233
"""Try to find a versioned Python binary as fallback for POSIX virtual environments.
@@ -266,7 +266,7 @@ def install_path(self, key: str) -> str:
266266
267267
"""
268268
result = self.distutils_install.get(key)
269-
if result is None: # pragma: no branch # distutils is empty when "venv" scheme is available
269+
if result is None: # pragma: >=3.11 cover # distutils is empty when "venv" scheme is available
270270
# set prefixes to empty => result is relative from cwd
271271
prefixes = self.prefix, self.exec_prefix, self.base_prefix, self.base_exec_prefix
272272
config_var = {k: "" if v in prefixes else v for k, v in self.sysconfig_vars.items()}

β€Žtests/conftest.pyβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,5 +25,5 @@ def _ensure_py_info_cache_empty(session_cache: DiskCache) -> Generator[None]:
2525
@pytest.fixture
2626
def _skip_if_test_in_system(session_cache: DiskCache) -> None:
2727
current = PythonInfo.current(session_cache)
28-
if current.system_executable is not None: # pragma: no branch
28+
if current.system_executable is not None: # pragma: no cover
2929
pytest.skip("test not valid if run under system")

β€Žtests/test_py_info_extra.pyβ€Ž

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,7 @@ def test_get_tcl_tk_libs_returns_tuple() -> None:
4747

4848

4949
def test_get_tcl_tk_libs_tcl_error(mocker) -> None:
50-
try:
51-
import tkinter as tk
52-
except ImportError: # pragma: no cover
53-
pytest.skip("tkinter not available")
50+
tk = pytest.importorskip("tkinter")
5451

5552
mock_tcl = MagicMock()
5653
mock_tcl.eval.side_effect = tk.TclError("fail")

0 commit comments

Comments
Β (0)