The OS lanes are marker-driven: list_os_marked_tests.py picks the files
a lane imports from their platforms() specs and the lane selects with
-m platforms. A test gated with skipif(sys.platform != "win32") is
therefore never imported on the Windows lane and skipped everywhere else
— it runs on no host. skipif(sys.platform == "win32") tests were merely
invisible to the lane bookkeeping, but the rule the tree now follows is
one host marker, never a bare skipif.
Mechanical mapping, semantics preserved: skip-on-Windows → "posix",
skip-off-Windows → "windows", skip-off-Linux → "linux", skip-on-macOS →
"not macos". The former skip reasons stay as trailing comments. A
non-host condition (os.geteuid() == 0) stays a separate skipif beside
the marker, spelled getattr(os, "geteuid", ...) so the decorator still
imports on Windows.
Where the conversion would stack two platforms() marks on one test (the
conftest rejects that at collection) the narrower mark wins:
- test_update_wedged_gateway: the class is already platforms("linux");
its per-test "needs UNIX sockets" marks were redundant and are gone.
- test_process_registry.TestSystemdCgroupIsolation: the class-level
skip-on-Windows moves onto the 11 methods that had no host mark; the
11 platforms("linux") methods keep theirs.
- test_file_ops_single_roundtrip: the two fifo tests drop their
platforms("linux") in favour of the module's "posix" (mkfifo exists on
macOS; both tests already skip when it does not).
- test_linux_desktop_entry / test_gateway_job_teardown_live: duplicate
or wider marks removed.
42 lines
1.7 KiB
Python
42 lines
1.7 KiB
Python
"""Terminal-subshell PATH completion in ``tools/environments/local.py``.
|
|
|
|
A backend started by a non-interactive SSH session, systemd or a GUI launcher
|
|
inherits a PATH without ``~/.local/bin`` (only the login shell adds it), so CLIs
|
|
installed there were ``command not found`` from the terminal tool (#111778).
|
|
"""
|
|
|
|
import os
|
|
import sys
|
|
|
|
import pytest
|
|
|
|
from tools.environments import local as local_mod
|
|
from tools.environments.local import _append_missing_sane_path_entries, _make_run_env
|
|
|
|
pytestmark = pytest.mark.platforms("posix") # POSIX PATH completion only
|
|
|
|
|
|
def test_existing_user_local_bin_appended_after_inherited_entries(monkeypatch, tmp_path):
|
|
local_bin = tmp_path / ".local" / "bin"
|
|
local_bin.mkdir(parents=True)
|
|
monkeypatch.setenv("HOME", str(tmp_path))
|
|
monkeypatch.setenv("PATH", "/usr/bin:/bin")
|
|
monkeypatch.setattr(local_mod, "_git_bash_bin_dirs", lambda: [])
|
|
monkeypatch.setattr(local_mod, "_managed_runtime_path_entries", lambda: [])
|
|
monkeypatch.setattr(local_mod, "_resolve_hermes_bin_dir", lambda: None)
|
|
|
|
entries = _make_run_env({})["PATH"].split(os.pathsep)
|
|
|
|
assert entries[:2] == ["/usr/bin", "/bin"]
|
|
assert entries.count(str(local_bin)) == 1
|
|
# Already on PATH: position kept, no duplicate appended.
|
|
already = _append_missing_sane_path_entries(f"{local_bin}:/usr/bin").split(":")
|
|
assert already[0] == str(local_bin) and already.count(str(local_bin)) == 1
|
|
|
|
|
|
def test_missing_user_local_bin_not_appended(monkeypatch, tmp_path):
|
|
monkeypatch.setenv("HOME", str(tmp_path))
|
|
monkeypatch.setattr(local_mod, "_managed_runtime_path_entries", lambda: [])
|
|
|
|
assert ".local" not in _append_missing_sane_path_entries("/usr/bin:/bin")
|