summaryrefslogtreecommitdiff
path: root/tests/tox_env/python/virtual_env
diff options
context:
space:
mode:
authorBernát Gábor <bgabor8@bloomberg.net>2021-01-04 09:06:49 +0000
committerBernát Gábor <bgabor8@bloomberg.net>2021-01-04 09:17:55 +0000
commit49e796ab200e2c259f5bebeb426d06e7595d5cd7 (patch)
tree2a9e42b704cb1adb6ea2599cfc92a8e28d28343b /tests/tox_env/python/virtual_env
parent4073c136d53029a00c4727975bf6c3755cb8a58c (diff)
downloadtox-git-49e796ab200e2c259f5bebeb426d06e7595d5cd7.tar.gz
Add tests for the package dependency marker filters
Signed-off-by: Bernát Gábor <bgabor8@bloomberg.net>
Diffstat (limited to 'tests/tox_env/python/virtual_env')
-rw-r--r--tests/tox_env/python/virtual_env/test_package.py97
-rw-r--r--tests/tox_env/python/virtual_env/test_package_types.py29
2 files changed, 97 insertions, 29 deletions
diff --git a/tests/tox_env/python/virtual_env/test_package.py b/tests/tox_env/python/virtual_env/test_package.py
new file mode 100644
index 00000000..2b6e3d20
--- /dev/null
+++ b/tests/tox_env/python/virtual_env/test_package.py
@@ -0,0 +1,97 @@
+import sys
+from itertools import zip_longest
+from textwrap import dedent
+
+import pytest
+from packaging.requirements import Requirement
+
+from tox.pytest import TempPathFactory, ToxProjectCreator
+from tox.tox_env.python.virtual_env.package.api import PackageType, Pep517VirtualEnvPackage
+from tox.util.pep517.via_fresh_subprocess import SubprocessFrontend
+
+if sys.version_info >= (3, 8): # pragma: no cover (py38+)
+ from importlib.metadata import Distribution, PathDistribution # type: ignore[attr-defined]
+else: # pragma: no cover (<py38)
+ from importlib_metadata import Distribution, PathDistribution # noqa
+
+
+@pytest.mark.parametrize(
+ "pkg_type, of_type",
+ [
+ ("dev", "virtualenv-legacy-dev"),
+ ("sdist", "virtualenv-pep-517-sdist"),
+ ("wheel", "virtualenv-pep-517-wheel"),
+ ],
+)
+def test_tox_ini_package_type_valid(tox_project: ToxProjectCreator, pkg_type: str, of_type: str) -> None:
+ proj = tox_project({"tox.ini": f"[testenv]\npackage={pkg_type}"})
+ result = proj.run("c", "-k", "package_tox_env_type")
+ result.assert_success()
+ res = result.state.tox_env("py").conf["package"]
+ assert res is getattr(PackageType, pkg_type)
+ got_type = result.state.tox_env("py").conf["package_tox_env_type"]
+ assert got_type == of_type
+
+
+def test_tox_ini_package_type_invalid(tox_project: ToxProjectCreator) -> None:
+ proj = tox_project({"tox.ini": "[testenv]\npackage=bad"})
+ result = proj.run("c", "-k", "package_tox_env_type")
+ result.assert_failed()
+ assert " invalid package config type 'bad' requested, must be one of sdist, wheel, dev, skip" in result.out
+
+
+@pytest.fixture(scope="session")
+def pkg_with_extras(tmp_path_factory: TempPathFactory) -> PathDistribution: # type: ignore[no-any-unimported]
+ py_ver = ".".join(str(i) for i in sys.version_info[0:2])
+ setup_cfg = f"""
+ [metadata]
+ name = demo
+ [options]
+ packages = find:
+ install_requires =
+ appdirs>=1.4.3
+ colorama>=0.4.3
+
+ [options.extras_require]
+ testing =
+ covdefaults>=1.2; python_version == '2.7' or python_version == '{py_ver}'
+ pytest>=5.4.1; python_version == '{py_ver}'
+ docs =
+ sphinx>=3
+ sphinx-rtd-theme>=0.4.3,<1
+ format =
+ black>=3
+ flake8
+ """
+ tmp_path = tmp_path_factory.mktemp("prj")
+ (tmp_path / "setup.cfg").write_text(dedent(setup_cfg))
+ (tmp_path / "setup.py").write_text("from setuptools import setup; setup()")
+ toml = '[build-system]\nrequires=["setuptools", "wheel"]\nbuild-backend = "setuptools.build_meta"'
+ (tmp_path / "pyproject.toml").write_text(toml)
+ frontend = SubprocessFrontend(*SubprocessFrontend.create_args_from_folder(tmp_path)[:-1])
+ meta = tmp_path / "meta"
+ result = frontend.prepare_metadata_for_build_wheel(meta)
+ return Distribution.at(result.metadata)
+
+
+def test_load_dependency_no_extra(pkg_with_extras: PathDistribution) -> None: # type: ignore[no-any-unimported]
+ result = Pep517VirtualEnvPackage.discover_package_dependencies(pkg_with_extras, set())
+ for left, right in zip_longest(result, (Requirement("appdirs>=1.4.3"), Requirement("colorama>=0.4.3"))):
+ assert isinstance(right, Requirement)
+ assert str(left) == str(right)
+
+
+def test_load_dependency_many_extra(pkg_with_extras: PathDistribution) -> None: # type: ignore[no-any-unimported]
+ py_ver = ".".join(str(i) for i in sys.version_info[0:2])
+ result = Pep517VirtualEnvPackage.discover_package_dependencies(pkg_with_extras, {"docs", "testing"})
+ exp = [
+ Requirement("appdirs>=1.4.3"),
+ Requirement("colorama>=0.4.3"),
+ Requirement("sphinx>=3"),
+ Requirement("sphinx-rtd-theme<1,>=0.4.3"),
+ Requirement(f'covdefaults>=1.2; python_version == "2.7" or python_version == "{py_ver}"'),
+ Requirement(f'pytest>=5.4.1; python_version == "{py_ver}"'),
+ ]
+ for left, right in zip_longest(result, exp):
+ assert isinstance(right, Requirement)
+ assert str(left) == str(right)
diff --git a/tests/tox_env/python/virtual_env/test_package_types.py b/tests/tox_env/python/virtual_env/test_package_types.py
deleted file mode 100644
index 85fe035e..00000000
--- a/tests/tox_env/python/virtual_env/test_package_types.py
+++ /dev/null
@@ -1,29 +0,0 @@
-import pytest
-
-from tox.pytest import ToxProjectCreator
-from tox.tox_env.python.virtual_env.package.api import PackageType
-
-
-@pytest.mark.parametrize(
- "pkg_type, of_type",
- [
- ("dev", "virtualenv-legacy-dev"),
- ("sdist", "virtualenv-pep-517-sdist"),
- ("wheel", "virtualenv-pep-517-wheel"),
- ],
-)
-def test_tox_ini_package_type_valid(tox_project: ToxProjectCreator, pkg_type: str, of_type: str) -> None:
- proj = tox_project({"tox.ini": f"[testenv]\npackage={pkg_type}"})
- result = proj.run("c", "-k", "package_tox_env_type")
- result.assert_success()
- res = result.state.tox_env("py").conf["package"]
- assert res is getattr(PackageType, pkg_type)
- got_type = result.state.tox_env("py").conf["package_tox_env_type"]
- assert got_type == of_type
-
-
-def test_tox_ini_package_type_invalid(tox_project: ToxProjectCreator) -> None:
- proj = tox_project({"tox.ini": "[testenv]\npackage=bad"})
- result = proj.run("c", "-k", "package_tox_env_type")
- result.assert_failed()
- assert " invalid package config type 'bad' requested, must be one of sdist, wheel, dev, skip" in result.out