Skip to content

Commit

Permalink
Merge pull request #11244 from bluetech/rootdir-tweaks
Browse files Browse the repository at this point in the history
Rootdir tweaks
  • Loading branch information
bluetech authored Jul 27, 2023
2 parents f2b6040 + 13e2b00 commit 430ad14
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 14 deletions.
17 changes: 12 additions & 5 deletions doc/en/how-to/usage.rst
Original file line number Diff line number Diff line change
Expand Up @@ -46,21 +46,28 @@ Use ``""`` instead of ``''`` in expression when running this on Windows

**Run tests by node ids**

Each collected test is assigned a unique ``nodeid`` which consist of the module filename followed
by specifiers like class names, function names and parameters from parametrization, separated by ``::`` characters.
Each collected test is assigned a unique ``nodeid`` which consist of the module file path followed
by specifiers like class names and function names separated by ``::`` characters,
and parameters from parametrization in ``[...]``.
You can use the same syntax to match tests relative to the working directory.

To run a specific test within a module:

.. code-block:: bash
pytest test_mod.py::test_func
pytest tests/test_mod.py::test_func
To run all tests in a class:

Another example specifying a test method in the command line:
.. code-block:: bash
pytest tests/test_mod.py::TestClass
Specifying a specific test method:

.. code-block:: bash
pytest test_mod.py::TestClass::test_method
pytest tests/test_mod.py::TestClass::test_method
**Run tests by marker expressions**

Expand Down
4 changes: 2 additions & 2 deletions src/_pytest/config/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -1170,7 +1170,7 @@ def _initini(self, args: Sequence[str]) -> None:
ns.inifilename,
ns.file_or_dir + unknown_args,
rootdir_cmd_arg=ns.rootdir or None,
config=self,
invocation_dir=self.invocation_params.dir,
)
self._rootpath = rootpath
self._inipath = inipath
Expand Down Expand Up @@ -1243,7 +1243,7 @@ def _decide_args(
self,
*,
args: List[str],
pyargs: List[str],
pyargs: bool,
testpaths: List[str],
invocation_dir: Path,
rootpath: Path,
Expand Down
23 changes: 16 additions & 7 deletions src/_pytest/config/findpaths.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
from typing import Optional
from typing import Sequence
from typing import Tuple
from typing import TYPE_CHECKING
from typing import Union

import iniconfig
Expand All @@ -17,9 +16,6 @@
from _pytest.pathlib import absolutepath
from _pytest.pathlib import commonpath

if TYPE_CHECKING:
from . import Config


def _parse_ini_config(path: Path) -> iniconfig.IniConfig:
"""Parse the given generic '.ini' file using legacy IniConfig parser, returning
Expand Down Expand Up @@ -176,8 +172,21 @@ def determine_setup(
inifile: Optional[str],
args: Sequence[str],
rootdir_cmd_arg: Optional[str] = None,
config: Optional["Config"] = None,
invocation_dir: Optional[Path] = None,
) -> Tuple[Path, Optional[Path], Dict[str, Union[str, List[str]]]]:
"""Determine the rootdir, inifile and ini configuration values from the
command line arguments.
:param inifile:
The `--inifile` command line argument, if given.
:param args:
The free command line arguments.
:param rootdir_cmd_arg:
The `--rootdir` command line argument, if given.
:param invocation_dir:
The working directory when pytest was invoked, if known.
If not known, the current working directory is used.
"""
rootdir = None
dirs = get_dirs_from_args(args)
if inifile:
Expand All @@ -198,8 +207,8 @@ def determine_setup(
if dirs != [ancestor]:
rootdir, inipath, inicfg = locate_config(dirs)
if rootdir is None:
if config is not None:
cwd = config.invocation_params.dir
if invocation_dir is not None:
cwd = invocation_dir
else:
cwd = Path.cwd()
rootdir = get_common_ancestor([cwd, ancestor])
Expand Down

0 comments on commit 430ad14

Please sign in to comment.