From 9d4e88e1a66fd43ca35ae4eac0f6f70d9227a51b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= Date: Thu, 27 Apr 2023 18:11:40 +0200 Subject: [PATCH] Tests: Make them pass with setuptools < 60 This makes the tests work on EL 9 and Fedora 36. - Move metadata to setup.cfg in self-referential extras tests - Skip tests for pyproject.toml [project] metadata when setuptools < 60 --- pyproject_buildrequires_testcases.yaml | 75 ++++++++++++++------------ test_pyproject_buildrequires.py | 9 +++- 2 files changed, 48 insertions(+), 36 deletions(-) diff --git a/pyproject_buildrequires_testcases.yaml b/pyproject_buildrequires_testcases.yaml index 4c4e891..bf64df5 100644 --- a/pyproject_buildrequires_testcases.yaml +++ b/pyproject_buildrequires_testcases.yaml @@ -837,6 +837,7 @@ Stdout from wrapped subprocess does not appear in output: result: 0 pyproject.toml with runtime dependencies: + skipif: not SETUPTOOLS_60 installed: setuptools: 50 wheel: 1 @@ -859,6 +860,7 @@ pyproject.toml with runtime dependencies: result: 0 pyproject.toml with runtime dependencies and partially selected extras: + skipif: not SETUPTOOLS_60 installed: setuptools: 50 wheel: 1 @@ -887,7 +889,7 @@ pyproject.toml with runtime dependencies and partially selected extras: python3dist(pytest-mock) result: 0 -pyproject.toml with runtime dependencies and self-referencing extras (sooner): +Self-referencing extras (sooner): installed: setuptools: 50 wheel: 1 @@ -898,17 +900,18 @@ pyproject.toml with runtime dependencies and self-referencing extras (sooner): [build-system] requires = ["setuptools"] build-backend = "setuptools.build_meta" - [project] - name = "my_package" - version = "0.1" - dependencies = [ - "foo", - 'importlib-metadata; python_version<"3.8"', - ] - [project.optional-dependencies] - tests = ["pytest>=5", "pytest-mock"] - docs = ["sphinx", "python-docs-theme"] - dev = ["my_package[docs,tests]"] + setup.cfg: | + [metadata] + name = my_package + version = 0.1 + [options] + install_requires = + foo + importlib-metadata; python_version<"3.8" + [options.extras_require] + tests = pytest>=5; pytest-mock + docs = sphinx; python-docs-theme + dev = my_package[docs,tests] expected: | python3dist(setuptools) python3dist(wheel) @@ -919,7 +922,7 @@ pyproject.toml with runtime dependencies and self-referencing extras (sooner): python3dist(pytest-mock) result: 0 -pyproject.toml with runtime dependencies and self-referencing extras (later): +Self-referencing extras (later): installed: setuptools: 50 wheel: 1 @@ -930,17 +933,18 @@ pyproject.toml with runtime dependencies and self-referencing extras (later): [build-system] requires = ["setuptools"] build-backend = "setuptools.build_meta" - [project] - name = "my_package" - version = "0.1" - dependencies = [ - "foo", - 'importlib-metadata; python_version<"3.8"', - ] - [project.optional-dependencies] - tests = ["pytest>=5", "pytest-mock"] - docs = ["sphinx", "python-docs-theme"] - xdev = ["my_package[docs,tests]"] + setup.cfg: | + [metadata] + name = my_package + version = 0.1 + [options] + install_requires = + foo + importlib-metadata; python_version<"3.8" + [options.extras_require] + tests = pytest>=5; pytest-mock + docs = sphinx; python-docs-theme + xdev = my_package[docs,tests] expected: | python3dist(setuptools) python3dist(wheel) @@ -951,7 +955,7 @@ pyproject.toml with runtime dependencies and self-referencing extras (later): python3dist(pytest-mock) result: 0 -pyproject.toml with runtime dependencies and self-referencing extras (maze): +Self-referencing extras (maze): installed: setuptools: 50 wheel: 1 @@ -962,16 +966,17 @@ pyproject.toml with runtime dependencies and self-referencing extras (maze): [build-system] requires = ["setuptools"] build-backend = "setuptools.build_meta" - [project] - name = "my_package" - version = "0.1" - [project.optional-dependencies] - start = ["my_package[left,right]", "startdep"] - left = ["my_package[right,forward]", "leftdep"] - right = ["my_package[left,forward]", "rightdep"] - forward = ["my_package[backward]", "forwarddep"] - backward = ["my_package[left,right]", "backwarddep"] - never = ["my_package[forward]", "neverdep"] + setup.cfg: | + [metadata] + name = my_package + version = 0.1 + [options.extras_require] + start = my_package[left,right]; startdep + left = my_package[right,forward]; leftdep + right = my_package[left,forward]; rightdep + forward = my_package[backward]; forwarddep + backward = my_package[left,right]; backwarddep + never = my_package[forward]; neverdep expected: | python3dist(setuptools) python3dist(wheel) diff --git a/test_pyproject_buildrequires.py b/test_pyproject_buildrequires.py index 3186edf..04a23a4 100644 --- a/test_pyproject_buildrequires.py +++ b/test_pyproject_buildrequires.py @@ -1,11 +1,15 @@ from pathlib import Path import importlib.metadata +import packaging.version import pytest +import setuptools import yaml from pyproject_buildrequires import generate_requires +SETUPTOOLS_VERSION = packaging.version.parse(setuptools.__version__) +SETUPTOOLS_60 = SETUPTOOLS_VERSION >= packaging.version.parse('60') testcases = {} with Path(__file__).parent.joinpath('pyproject_buildrequires_testcases.yaml').open() as f: @@ -26,8 +30,11 @@ def test_data(case_name, capfd, tmp_path, monkeypatch): if case.get('xfail'): pytest.xfail(case.get('xfail')) + if case.get('skipif') and eval(case.get('skipif')): + pytest.skip(case.get('skipif')) + for filename in case: - file_types = ('.toml', '.py', '.in', '.ini', '.txt') + file_types = ('.toml', '.py', '.in', '.ini', '.txt', '.cfg') if filename.endswith(file_types): cwd.joinpath(filename).write_text(case[filename])