diff --git a/pkgs/development/python-modules/pytest-cov-stub/default.nix b/pkgs/development/python-modules/pytest-cov-stub/default.nix new file mode 100644 index 000000000000..025a815686f6 --- /dev/null +++ b/pkgs/development/python-modules/pytest-cov-stub/default.nix @@ -0,0 +1,22 @@ +{ + lib, + buildPythonPackage, + python, + hatchling, +}: + +buildPythonPackage rec { + pname = "pytest-cov-stub"; + version = (lib.importTOML ./src/pyproject.toml).project.version; + pyproject = true; + + src = ./src; + + build-system = [ hatchling ]; + + meta = with lib; { + description = "Nixpkgs checkPhase stub for pytest-cov"; + license = licenses.mit; + maintainers = [ lib.maintainers.pbsds ]; + }; +} diff --git a/pkgs/development/python-modules/pytest-cov-stub/src/pyproject.toml b/pkgs/development/python-modules/pytest-cov-stub/src/pyproject.toml new file mode 100644 index 000000000000..1f356aa7f996 --- /dev/null +++ b/pkgs/development/python-modules/pytest-cov-stub/src/pyproject.toml @@ -0,0 +1,13 @@ +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" + +[project] +name = "pytest-cov-nixpkgs-stub" +version = "1.0.0" + +[tool.hatch.build.targets.wheel] +packages = ["pytest_cov"] + +[project.entry-points.pytest11] +pytest_cov = "pytest_cov.plugin" diff --git a/pkgs/development/python-modules/pytest-cov-stub/src/pytest_cov/__init__.py b/pkgs/development/python-modules/pytest-cov-stub/src/pytest_cov/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/pkgs/development/python-modules/pytest-cov-stub/src/pytest_cov/plugin.py b/pkgs/development/python-modules/pytest-cov-stub/src/pytest_cov/plugin.py new file mode 100644 index 000000000000..d03f4d1f7a88 --- /dev/null +++ b/pkgs/development/python-modules/pytest-cov-stub/src/pytest_cov/plugin.py @@ -0,0 +1,93 @@ +import argparse +import pytest + +class CoverageError(Exception): + pass + +class PytestCovWarning(pytest.PytestWarning): + pass + +class CovDisabledWarning(PytestCovWarning): + pass + +class CovReportWarning(PytestCovWarning): + pass + +class StoreReport(argparse.Action): + def __call__(self, parser, namespace, values, option_string=None): + report_type, file = values + namespace.cov_report[report_type] = file + +def pytest_addoption(parser): + group = parser.getgroup('cov', 'coverage reporting') + group.addoption( + '--cov', + action='append', + default=[], + metavar='SOURCE', + nargs='?', + const=True, + dest='cov_source', + ) + group.addoption( + '--cov-reset', + action='store_const', + const=[], + dest='cov_source', + ) + group.addoption( + '--cov-report', + action=StoreReport, + default={}, + metavar='TYPE', + type=lambda x: x.split(":", 1) if ":" in x else (x, None), + ) + group.addoption( + '--cov-config', + action='store', + default='.coveragerc', + metavar='PATH', + ) + group.addoption( + '--no-cov-on-fail', + action='store_true', + default=False, + ) + group.addoption( + '--no-cov', + action='store_true', + default=False, + ) + group.addoption( + '--cov-fail-under', + action='store', + metavar='MIN', + type=str, + ) + group.addoption( + '--cov-append', + action='store_true', + default=False, + ) + group.addoption( + '--cov-branch', + action='store_true', + default=None, + ) + group.addoption( + '--cov-context', + action='store', + metavar='CONTEXT', + type=str, + ) + +def pytest_configure(config): + config.addinivalue_line('markers', 'no_cover: disable coverage for this test.') + +@pytest.fixture +def no_cover(): + pass + +@pytest.fixture +def cov(): + pass diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index b31e805460b6..b32aac14fbcc 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -12343,6 +12343,8 @@ self: super: with self; { pytest-cov = callPackage ../development/python-modules/pytest-cov { }; + pytest-cov-stub = callPackage ../development/python-modules/pytest-cov-stub { }; + pytest-cram = callPackage ../development/python-modules/pytest-cram { }; pytest-datadir = callPackage ../development/python-modules/pytest-datadir { };