From de5a8c02fdc1aeda8bac9a2fd6922ca25326fec7 Mon Sep 17 00:00:00 2001 From: Pieter Pas Date: Sun, 27 Aug 2023 22:22:17 +0200 Subject: [PATCH] [Test] Use Jinja2 for expected content templates --- .github/workflows/wheel.yml | 6 ++--- noxfile.py | 17 +++++++++--- pyproject.toml | 3 +++ .../minimal-comp-debug/whl.txt | 14 +++++----- tests/expected_contents/minimal-comp/whl.txt | 18 +++++++------ .../minimal-program/sdist.txt | 16 ++++++------ .../expected_contents/minimal-program/whl.txt | 12 ++++----- tests/expected_contents/minimal/sdist.txt | 22 ++++++++-------- tests/expected_contents/minimal/whl.txt | 18 +++++++------ .../nanobind-project/sdist.txt | 26 +++++++++---------- .../nanobind-project/whl.txt | 24 +++++++++-------- .../pybind11-project/sdist.txt | 26 +++++++++---------- .../pybind11-project/whl.txt | 24 +++++++++-------- 13 files changed, 124 insertions(+), 102 deletions(-) diff --git a/.github/workflows/wheel.yml b/.github/workflows/wheel.yml index a53c28b..55b6c3f 100644 --- a/.github/workflows/wheel.yml +++ b/.github/workflows/wheel.yml @@ -57,7 +57,7 @@ jobs: path: dist - name: Run Nox run: | - python -m pip install -U pip nox distlib + python -m pip install -U pip nox distlib jinja2 python -m nox env: PY_BUILD_CMAKE_WHEEL_DIR: ${{ github.workspace }}/dist @@ -113,7 +113,7 @@ jobs: path: dist - name: Run Nox run: | - python -m pip install -U pip nox distlib + python -m pip install -U pip nox distlib jinja2 python -m nox env: PY_BUILD_CMAKE_WHEEL_DIR: ${{ github.workspace }}/dist @@ -166,7 +166,7 @@ jobs: path: dist - name: Run Nox run: | - python -m pip install -U pip nox distlib + python -m pip install -U pip nox distlib jinja2 python -m nox env: PY_BUILD_CMAKE_WHEEL_DIR: ${{ github.workspace }}/dist diff --git a/noxfile.py b/noxfile.py index add4b34..29f83c3 100644 --- a/noxfile.py +++ b/noxfile.py @@ -22,6 +22,7 @@ from tarfile import open as open_tar from zipfile import ZipFile +import jinja2 import nox from distlib.util import get_platform @@ -48,6 +49,11 @@ def get_contents_subs(ext_suffix: str): "ext_suffix": ext_suffix, "dbg_suffix": dbg_suffix, "exe_suffix": exe_suffix, + "sys": { + "version_info": sys.version_info, + "implementation": sys.implementation, + "platform": sys.platform, + }, } @@ -55,13 +61,16 @@ def check_pkg_contents( session: nox.Session, name: str, ext_suffix: str, with_sdist=True ): d = project_dir / "tests" / "expected_contents" / name + template_env = jinja2.Environment(loader=jinja2.FileSystemLoader(d)) normname = re.sub(r"[-_.]+", "_", name).lower() plat = get_platform().replace(".", "_").replace("-", "_") subs = get_contents_subs(ext_suffix) # Compare sdist contents sdist = Path(f"dist-nox/{normname}-{version}.tar.gz") if with_sdist: - sdist_expect = (d / "sdist.txt").read_text().format(**subs).split("\n") + sdist_template = template_env.get_template("sdist.txt") + sdist_expect = sdist_template.render(**subs).split("\n") + sdist_expect = sorted(filter(bool, sdist_expect)) sdist_actual = sorted(open_tar(sdist).getnames()) if sdist_expect != sdist_actual: diff = "\n".join(unified_diff(sdist_expect, sdist_actual)) @@ -73,7 +82,9 @@ def check_pkg_contents( session.error(f"Unexpected number of Wheels {whls} ({whl_pattern})") whl = whls[0] # Compare Wheel contents - whl_expect = (d / "whl.txt").read_text().format(**subs).split("\n") + whl_template = template_env.get_template("whl.txt") + whl_expect = whl_template.render(**subs).split("\n") + whl_expect = sorted(filter(bool, whl_expect)) whl_actual = sorted(ZipFile(whl).namelist()) if whl_expect != whl_actual: diff = "\n".join(unified_diff(whl_expect, whl_actual)) @@ -124,8 +135,6 @@ def example_projects(session: nox.Session): @nox.session def component(session: nox.Session): - if sys.platform not in ("linux", "win32"): - return session.install("-U", "pip", "build", "pytest") dist_dir = os.getenv("PY_BUILD_CMAKE_WHEEL_DIR") if dist_dir is None: diff --git a/pyproject.toml b/pyproject.toml index fac6abb..dc6f14f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -44,6 +44,9 @@ Tracker = "https://github.com/tttapa/py-build-cmake/issues" [project.scripts] py-build-cmake = "py_build_cmake.cli:cli" +[project.optional-dependencies] +test = ["nox>=2023.4.22,<2024","jinja2~=3.1.2"] + [tool.py-build-cmake.module] name = "py_build_cmake" diff --git a/tests/expected_contents/minimal-comp-debug/whl.txt b/tests/expected_contents/minimal-comp-debug/whl.txt index 5ac96ec..9565f34 100644 --- a/tests/expected_contents/minimal-comp-debug/whl.txt +++ b/tests/expected_contents/minimal-comp-debug/whl.txt @@ -1,6 +1,8 @@ -minimal_comp/_add_module{dbg_suffix} -minimal_comp_debug-{version}.dist-info/LICENSE -minimal_comp_debug-{version}.dist-info/METADATA -minimal_comp_debug-{version}.dist-info/RECORD -minimal_comp_debug-{version}.dist-info/WHEEL -minimal_comp_debug-{version}.dist-info/entry_points.txt \ No newline at end of file +{% if sys.platform in ("linux", "win32") %} +minimal_comp/_add_module{{dbg_suffix}} +{% endif %} +minimal_comp_debug-{{version}}.dist-info/LICENSE +minimal_comp_debug-{{version}}.dist-info/METADATA +minimal_comp_debug-{{version}}.dist-info/RECORD +minimal_comp_debug-{{version}}.dist-info/WHEEL +minimal_comp_debug-{{version}}.dist-info/entry_points.txt \ No newline at end of file diff --git a/tests/expected_contents/minimal-comp/whl.txt b/tests/expected_contents/minimal-comp/whl.txt index de558b3..8fa8c32 100644 --- a/tests/expected_contents/minimal-comp/whl.txt +++ b/tests/expected_contents/minimal-comp/whl.txt @@ -1,12 +1,14 @@ -minimal_comp-{version}.dist-info/LICENSE -minimal_comp-{version}.dist-info/METADATA -minimal_comp-{version}.dist-info/RECORD -minimal_comp-{version}.dist-info/WHEEL -minimal_comp-{version}.dist-info/entry_points.txt +minimal_comp-{{version}}.dist-info/LICENSE +minimal_comp-{{version}}.dist-info/METADATA +minimal_comp-{{version}}.dist-info/RECORD +minimal_comp-{{version}}.dist-info/WHEEL +minimal_comp-{{version}}.dist-info/entry_points.txt minimal_comp/__init__.py -minimal_comp/__init__.pyi -minimal_comp/_add_module{ext_suffix} +minimal_comp/_add_module{{ext_suffix}} minimal_comp/_add_module.pyi minimal_comp/add_module.py +minimal_comp/py.typed +{% if sys.implementation.name != 'pypy' or sys.version_info >= (3, 8) %} +minimal_comp/__init__.pyi minimal_comp/add_module.pyi -minimal_comp/py.typed \ No newline at end of file +{% endif %} \ No newline at end of file diff --git a/tests/expected_contents/minimal-program/sdist.txt b/tests/expected_contents/minimal-program/sdist.txt index c96c065..2e77537 100644 --- a/tests/expected_contents/minimal-program/sdist.txt +++ b/tests/expected_contents/minimal-program/sdist.txt @@ -1,8 +1,8 @@ -minimal_program-{version}/CMakeLists.txt -minimal_program-{version}/LICENSE -minimal_program-{version}/PKG-INFO -minimal_program-{version}/README.md -minimal_program-{version}/pyproject.toml -minimal_program-{version}/src-python/minimal_program_module/__init__.py -minimal_program-{version}/src/CMakeLists.txt -minimal_program-{version}/src/minimal_program.cpp \ No newline at end of file +minimal_program-{{version}}/CMakeLists.txt +minimal_program-{{version}}/LICENSE +minimal_program-{{version}}/PKG-INFO +minimal_program-{{version}}/README.md +minimal_program-{{version}}/pyproject.toml +minimal_program-{{version}}/src-python/minimal_program_module/__init__.py +minimal_program-{{version}}/src/CMakeLists.txt +minimal_program-{{version}}/src/minimal_program.cpp \ No newline at end of file diff --git a/tests/expected_contents/minimal-program/whl.txt b/tests/expected_contents/minimal-program/whl.txt index 504f6dc..3a8e13d 100644 --- a/tests/expected_contents/minimal-program/whl.txt +++ b/tests/expected_contents/minimal-program/whl.txt @@ -1,7 +1,7 @@ -minimal_program-{version}.data/scripts/minimal_program{exe_suffix} -minimal_program-{version}.dist-info/LICENSE -minimal_program-{version}.dist-info/METADATA -minimal_program-{version}.dist-info/RECORD -minimal_program-{version}.dist-info/WHEEL -minimal_program-{version}.dist-info/entry_points.txt +minimal_program-{{version}}.data/scripts/minimal_program{{exe_suffix}} +minimal_program-{{version}}.dist-info/LICENSE +minimal_program-{{version}}.dist-info/METADATA +minimal_program-{{version}}.dist-info/RECORD +minimal_program-{{version}}.dist-info/WHEEL +minimal_program-{{version}}.dist-info/entry_points.txt minimal_program_module/__init__.py \ No newline at end of file diff --git a/tests/expected_contents/minimal/sdist.txt b/tests/expected_contents/minimal/sdist.txt index 75ae758..b6e4e62 100644 --- a/tests/expected_contents/minimal/sdist.txt +++ b/tests/expected_contents/minimal/sdist.txt @@ -1,11 +1,11 @@ -minimal-{version}/CMakeLists.txt -minimal-{version}/LICENSE -minimal-{version}/PKG-INFO -minimal-{version}/README.md -minimal-{version}/pyproject.toml -minimal-{version}/src-python/minimal/__init__.py -minimal-{version}/src-python/minimal/add_module.py -minimal-{version}/src-python/minimal/py.typed -minimal-{version}/src/CMakeLists.txt -minimal-{version}/src/_add_module.pyi -minimal-{version}/src/add_module.c \ No newline at end of file +minimal-{{version}}/CMakeLists.txt +minimal-{{version}}/LICENSE +minimal-{{version}}/PKG-INFO +minimal-{{version}}/README.md +minimal-{{version}}/pyproject.toml +minimal-{{version}}/src-python/minimal/__init__.py +minimal-{{version}}/src-python/minimal/add_module.py +minimal-{{version}}/src-python/minimal/py.typed +minimal-{{version}}/src/CMakeLists.txt +minimal-{{version}}/src/_add_module.pyi +minimal-{{version}}/src/add_module.c \ No newline at end of file diff --git a/tests/expected_contents/minimal/whl.txt b/tests/expected_contents/minimal/whl.txt index 31779d7..0249b6d 100644 --- a/tests/expected_contents/minimal/whl.txt +++ b/tests/expected_contents/minimal/whl.txt @@ -1,12 +1,14 @@ -minimal-{version}.dist-info/LICENSE -minimal-{version}.dist-info/METADATA -minimal-{version}.dist-info/RECORD -minimal-{version}.dist-info/WHEEL -minimal-{version}.dist-info/entry_points.txt +minimal-{{version}}.dist-info/LICENSE +minimal-{{version}}.dist-info/METADATA +minimal-{{version}}.dist-info/RECORD +minimal-{{version}}.dist-info/WHEEL +minimal-{{version}}.dist-info/entry_points.txt minimal/__init__.py -minimal/__init__.pyi -minimal/_add_module{ext_suffix} +minimal/_add_module{{ext_suffix}} minimal/_add_module.pyi minimal/add_module.py +minimal/py.typed +{% if sys.implementation.name != 'pypy' or sys.version_info >= (3, 8) %} +minimal/__init__.pyi minimal/add_module.pyi -minimal/py.typed \ No newline at end of file +{% endif %} \ No newline at end of file diff --git a/tests/expected_contents/nanobind-project/sdist.txt b/tests/expected_contents/nanobind-project/sdist.txt index 86ab242..fe7adde 100644 --- a/tests/expected_contents/nanobind-project/sdist.txt +++ b/tests/expected_contents/nanobind-project/sdist.txt @@ -1,13 +1,13 @@ -nanobind_project-{version}/CMakeLists.txt -nanobind_project-{version}/LICENSE -nanobind_project-{version}/PKG-INFO -nanobind_project-{version}/README.md -nanobind_project-{version}/cmake/NanobindStubgen.cmake -nanobind_project-{version}/cmake/QueryPythonForNanobind.cmake -nanobind_project-{version}/pyproject.toml -nanobind_project-{version}/python-src/nanobind_project/__init__.py -nanobind_project-{version}/python-src/nanobind_project/add.py -nanobind_project-{version}/python-src/nanobind_project/add_module.py -nanobind_project-{version}/python-src/nanobind_project/py.typed -nanobind_project-{version}/python-src/nanobind_project/sub_package/__init__.py -nanobind_project-{version}/src/add_module.cpp \ No newline at end of file +nanobind_project-{{version}}/CMakeLists.txt +nanobind_project-{{version}}/LICENSE +nanobind_project-{{version}}/PKG-INFO +nanobind_project-{{version}}/README.md +nanobind_project-{{version}}/cmake/NanobindStubgen.cmake +nanobind_project-{{version}}/cmake/QueryPythonForNanobind.cmake +nanobind_project-{{version}}/pyproject.toml +nanobind_project-{{version}}/python-src/nanobind_project/__init__.py +nanobind_project-{{version}}/python-src/nanobind_project/add.py +nanobind_project-{{version}}/python-src/nanobind_project/add_module.py +nanobind_project-{{version}}/python-src/nanobind_project/py.typed +nanobind_project-{{version}}/python-src/nanobind_project/sub_package/__init__.py +nanobind_project-{{version}}/src/add_module.cpp \ No newline at end of file diff --git a/tests/expected_contents/nanobind-project/whl.txt b/tests/expected_contents/nanobind-project/whl.txt index 992f735..7c319a2 100644 --- a/tests/expected_contents/nanobind-project/whl.txt +++ b/tests/expected_contents/nanobind-project/whl.txt @@ -1,18 +1,20 @@ -nanobind_project-{version}.dist-info/LICENSE -nanobind_project-{version}.dist-info/METADATA -nanobind_project-{version}.dist-info/RECORD -nanobind_project-{version}.dist-info/WHEEL -nanobind_project-{version}.dist-info/entry_points.txt +nanobind_project-{{version}}.dist-info/LICENSE +nanobind_project-{{version}}.dist-info/METADATA +nanobind_project-{{version}}.dist-info/RECORD +nanobind_project-{{version}}.dist-info/WHEEL +nanobind_project-{{version}}.dist-info/entry_points.txt nanobind_project/__init__.py -nanobind_project/__init__.pyi -nanobind_project/_add_module{ext_suffix} +nanobind_project/_add_module{{ext_suffix}} nanobind_project/_add_module/__init__.pyi -nanobind_project/_add_module_d{ext_suffix} +nanobind_project/_add_module_d{{ext_suffix}} nanobind_project/_add_module_d/__init__.pyi nanobind_project/add.py -nanobind_project/add.pyi nanobind_project/add_module.py -nanobind_project/add_module.pyi nanobind_project/py.typed nanobind_project/sub_package/__init__.py -nanobind_project/sub_package/__init__.pyi \ No newline at end of file +{% if sys.implementation.name != 'pypy' or sys.version_info >= (3, 8) %} +nanobind_project/__init__.pyi +nanobind_project/add.pyi +nanobind_project/add_module.pyi +nanobind_project/sub_package/__init__.pyi +{% endif %} \ No newline at end of file diff --git a/tests/expected_contents/pybind11-project/sdist.txt b/tests/expected_contents/pybind11-project/sdist.txt index 9204e77..3ae9f09 100644 --- a/tests/expected_contents/pybind11-project/sdist.txt +++ b/tests/expected_contents/pybind11-project/sdist.txt @@ -1,13 +1,13 @@ -pybind11_project-{version}/CMakeLists.txt -pybind11_project-{version}/LICENSE -pybind11_project-{version}/PKG-INFO -pybind11_project-{version}/README.md -pybind11_project-{version}/cmake/Pybind11Stubgen.cmake -pybind11_project-{version}/cmake/QueryPythonForPybind11.cmake -pybind11_project-{version}/pyproject.toml -pybind11_project-{version}/python-src/pybind11_project/__init__.py -pybind11_project-{version}/python-src/pybind11_project/add.py -pybind11_project-{version}/python-src/pybind11_project/add_module.py -pybind11_project-{version}/python-src/pybind11_project/py.typed -pybind11_project-{version}/python-src/pybind11_project/sub_package/__init__.py -pybind11_project-{version}/src/add_module.cpp \ No newline at end of file +pybind11_project-{{version}}/CMakeLists.txt +pybind11_project-{{version}}/LICENSE +pybind11_project-{{version}}/PKG-INFO +pybind11_project-{{version}}/README.md +pybind11_project-{{version}}/cmake/Pybind11Stubgen.cmake +pybind11_project-{{version}}/cmake/QueryPythonForPybind11.cmake +pybind11_project-{{version}}/pyproject.toml +pybind11_project-{{version}}/python-src/pybind11_project/__init__.py +pybind11_project-{{version}}/python-src/pybind11_project/add.py +pybind11_project-{{version}}/python-src/pybind11_project/add_module.py +pybind11_project-{{version}}/python-src/pybind11_project/py.typed +pybind11_project-{{version}}/python-src/pybind11_project/sub_package/__init__.py +pybind11_project-{{version}}/src/add_module.cpp \ No newline at end of file diff --git a/tests/expected_contents/pybind11-project/whl.txt b/tests/expected_contents/pybind11-project/whl.txt index 4c03a53..c49d77c 100644 --- a/tests/expected_contents/pybind11-project/whl.txt +++ b/tests/expected_contents/pybind11-project/whl.txt @@ -1,18 +1,20 @@ -pybind11_project-{version}.dist-info/LICENSE -pybind11_project-{version}.dist-info/METADATA -pybind11_project-{version}.dist-info/RECORD -pybind11_project-{version}.dist-info/WHEEL -pybind11_project-{version}.dist-info/entry_points.txt +pybind11_project-{{version}}.dist-info/LICENSE +pybind11_project-{{version}}.dist-info/METADATA +pybind11_project-{{version}}.dist-info/RECORD +pybind11_project-{{version}}.dist-info/WHEEL +pybind11_project-{{version}}.dist-info/entry_points.txt pybind11_project/__init__.py -pybind11_project/__init__.pyi -pybind11_project/_add_module{ext_suffix} +pybind11_project/_add_module{{ext_suffix}} pybind11_project/_add_module/__init__.pyi -pybind11_project/_add_module_d{ext_suffix} +pybind11_project/_add_module_d{{ext_suffix}} pybind11_project/_add_module_d/__init__.pyi pybind11_project/add.py -pybind11_project/add.pyi pybind11_project/add_module.py -pybind11_project/add_module.pyi pybind11_project/py.typed pybind11_project/sub_package/__init__.py -pybind11_project/sub_package/__init__.pyi \ No newline at end of file +{% if sys.implementation.name != 'pypy' or sys.version_info >= (3, 8) %} +pybind11_project/__init__.pyi +pybind11_project/add.pyi +pybind11_project/add_module.pyi +pybind11_project/sub_package/__init__.pyi +{% endif %} \ No newline at end of file