diff --git a/test/conftest.py b/test/conftest.py new file mode 100644 index 0000000..b774561 --- /dev/null +++ b/test/conftest.py @@ -0,0 +1,22 @@ +# Copyright 2026 Open Source Robotics Foundation, Inc. +# Licensed under the Apache License, Version 2.0 + +from itertools import takewhile +from pathlib import Path + +import pytest + +pytest_version = tuple( + int(x) for x in takewhile(str.isdigit, pytest.__version__.split('.')) +) + +if pytest_version < (3, 9): + @pytest.fixture + def tmp_path(tmpdir): + """ + Compatibility fixture for temporary directory allocation. + + This can be removed when we drop support for platforms with Pytest + versions older than 3.9 (namely Enterprise Linux 8). + """ + return Path(tmpdir) diff --git a/test/spell_check.words b/test/spell_check.words index f2860c8..52cfada 100644 --- a/test/spell_check.words +++ b/test/spell_check.words @@ -6,8 +6,11 @@ contextlib distclass foobar hashable +isdigit iterdir +itertools linter +linux lstrip noqa pathlib @@ -20,5 +23,6 @@ runpy scspell setuptools stacklevel -tempfile +takewhile thomas +tmpdir diff --git a/test/test_package_identification_python_setup_py.py b/test/test_package_identification_python_setup_py.py index 0ecfbf3..1a87dcc 100644 --- a/test/test_package_identification_python_setup_py.py +++ b/test/test_package_identification_python_setup_py.py @@ -3,7 +3,6 @@ # Licensed under the Apache License, Version 2.0 from pathlib import Path -from tempfile import TemporaryDirectory from colcon_core.package_descriptor import PackageDescriptor from colcon_python_setup_py.package_augmentation.python_setup_py \ @@ -15,82 +14,82 @@ import pytest -def test_identify(): +def test_identify(tmp_path): extension = PythonPackageIdentification() augmentation_extension = PythonPackageAugmentation() - with TemporaryDirectory(prefix='test_colcon_') as basepath: - desc = PackageDescriptor(basepath) - desc.type = 'other' - assert extension.identify(desc) is None - assert desc.name is None + basepath = tmp_path + desc = PackageDescriptor(basepath) + desc.type = 'other' + assert extension.identify(desc) is None + assert desc.name is None - desc.type = None - _setup_information_cache.clear() - assert extension.identify(desc) is None - assert desc.name is None - assert desc.type is None + desc.type = None + _setup_information_cache.clear() + assert extension.identify(desc) is None + assert desc.name is None + assert desc.type is None - basepath = Path(basepath) - (basepath / 'setup.py').write_text( - 'from setuptools import setup\n\n' - 'setup(\n' - " name='pkg-name',\n" - ')\n') - _setup_information_cache.clear() - assert extension.identify(desc) is None - assert desc.name == 'pkg-name' - assert desc.type == 'python' - assert not desc.dependencies - assert not desc.metadata + basepath = Path(basepath) + (basepath / 'setup.py').write_text( + 'from setuptools import setup\n\n' + 'setup(\n' + " name='pkg-name',\n" + ')\n') + _setup_information_cache.clear() + assert extension.identify(desc) is None + assert desc.name == 'pkg-name' + assert desc.type == 'python' + assert not desc.dependencies + assert not desc.metadata - augmentation_extension.augment_package(desc) - assert set(desc.dependencies.keys()) == {'build', 'run', 'test'} - assert not desc.dependencies['build'] - assert not desc.dependencies['run'] - assert not desc.dependencies['test'] + augmentation_extension.augment_package(desc) + assert set(desc.dependencies.keys()) == {'build', 'run', 'test'} + assert not desc.dependencies['build'] + assert not desc.dependencies['run'] + assert not desc.dependencies['test'] - desc = PackageDescriptor(basepath) - desc.name = 'other-name' - _setup_information_cache.clear() - with pytest.raises(RuntimeError) as e: - extension.identify(desc) - assert str(e.value).endswith( - 'Package name already set to different value') + desc = PackageDescriptor(basepath) + desc.name = 'other-name' + _setup_information_cache.clear() + with pytest.raises(RuntimeError) as e: + extension.identify(desc) + assert str(e.value).endswith( + 'Package name already set to different value') - (basepath / 'setup.py').write_text( - 'from setuptools import setup\n\n' - 'setup(\n' - " name='other-name',\n" - " maintainer='Foo Bar',\n" - " maintainer_email='foobar@example.com',\n" - ' setup_requires=[\n' - " 'setuptools; sys_platform != \"win32\"',\n" - " 'colcon-core; sys_platform == \"win32\"',\n" - ' ],\n' - ' install_requires=[\n' - " 'runA > 1.2.3',\n" - " 'runB',\n" - ' ],\n' - ' zip_safe=False,\n' - ' extras_require={\n' - " 'test': ['test2 == 3.0.0'],\n" - " 'tests': ['test3'],\n" - " 'testing': ['test4'],\n" - " 'other': ['not-test'],\n" - ' },\n' - ')\n') - _setup_information_cache.clear() - assert extension.identify(desc) is None - assert desc.name == 'other-name' - assert desc.type == 'python' - assert not desc.dependencies - assert not desc.metadata + (basepath / 'setup.py').write_text( + 'from setuptools import setup\n\n' + 'setup(\n' + " name='other-name',\n" + " maintainer='Foo Bar',\n" + " maintainer_email='foobar@example.com',\n" + ' setup_requires=[\n' + " 'setuptools; sys_platform != \"win32\"',\n" + " 'colcon-core; sys_platform == \"win32\"',\n" + ' ],\n' + ' install_requires=[\n' + " 'runA > 1.2.3',\n" + " 'runB',\n" + ' ],\n' + ' zip_safe=False,\n' + ' extras_require={\n' + " 'test': ['test2 == 3.0.0'],\n" + " 'tests': ['test3'],\n" + " 'testing': ['test4'],\n" + " 'other': ['not-test'],\n" + ' },\n' + ')\n') + _setup_information_cache.clear() + assert extension.identify(desc) is None + assert desc.name == 'other-name' + assert desc.type == 'python' + assert not desc.dependencies + assert not desc.metadata - augmentation_extension.augment_package(desc) - assert set(desc.dependencies.keys()) == {'build', 'run', 'test'} - assert desc.dependencies['build'] == {'setuptools', 'colcon-core'} - assert desc.dependencies['run'] == {'runA', 'runB'} - dep = next(x for x in desc.dependencies['run'] if x == 'runA') - assert dep.metadata['version_gt'] == '1.2.3' - assert desc.dependencies['test'] == {'test2', 'test3', 'test4'} + augmentation_extension.augment_package(desc) + assert set(desc.dependencies.keys()) == {'build', 'run', 'test'} + assert desc.dependencies['build'] == {'setuptools', 'colcon-core'} + assert desc.dependencies['run'] == {'runA', 'runB'} + dep = next(x for x in desc.dependencies['run'] if x == 'runA') + assert dep.metadata['version_gt'] == '1.2.3' + assert desc.dependencies['test'] == {'test2', 'test3', 'test4'}