See: cl/4840
When importing Python modules, we include `functional2` in the module
path, like this:
from functional2.testlib.fixtures.env import ManagedEnv
This means that python expects to see a file like
`functional2/testlib/fixtures/env.py`. We run `pytest` from `tests/` in
the `justfile` and have `tests/functional2/__init__.py` so `pytest` in
`meson` is able to find these imports.
However, language servers generally consider the `pyproject.toml` to be
the project root, so (e.g.) `pyright` is unable to follow any of the
`functional2` imports, leading to lots of spurious errors.
In cl/4840 I moved `tests/functional2/pyproject.toml` to
`tests/pyproject.toml`, which worked but was considered aesthetically
unappealing.
This diff is much larger but it's a more elegant solution.
Change-Id: I2983c7b87f88f59a4e3521451a9f5acd6a6a6964
31 lines
1.2 KiB
Python
31 lines
1.2 KiB
Python
import pytest
|
|
from _pytest.fixtures import FixtureRequest
|
|
from testlib.fixtures.command import Command
|
|
from testlib.fixtures.env import ManagedEnv
|
|
|
|
|
|
@pytest.fixture(name="pytest_command")
|
|
def _pytest_command(env: ManagedEnv, request: FixtureRequest, do_snapshot_update: bool) -> Command:
|
|
"""
|
|
returns a preconfigured pytest command.
|
|
The following things must be passed into the parametrization:
|
|
A list of additional flags to pass to the command
|
|
Optionally a boolean flag if snapshot updates should be propagated to the inside command
|
|
i.e. if the --accept-tests flag is set, if it should also be set for the pytest command returned by this fixture
|
|
True by default
|
|
Parametrization examples: `[]`, `["-k", "lang"]`, `([], False)`, `(["--accept-tests"], False)`
|
|
"""
|
|
params = request.param
|
|
|
|
if len(params) == 2 and isinstance(params[-1], bool):
|
|
flags, propagate_update = params
|
|
else:
|
|
flags = params
|
|
propagate_update = True
|
|
if propagate_update and do_snapshot_update:
|
|
flags.append("--accept-tests")
|
|
|
|
env.path.add_program("pytest")
|
|
cwd = env.get_env("HOME") / "functional2"
|
|
return Command(argv=["pytest", "--basetemp", "../pytest_files", *flags], _env=env, cwd=cwd)
|