From a3f5aad764ffcca2d99aed522dec313c198ef79d Mon Sep 17 00:00:00 2001 From: Federico Rossi Date: Wed, 10 Jun 2026 15:07:51 -0300 Subject: [PATCH] refact: unify temporary directory allocation to tmp_path --- test/conftest.py | 22 +++ test/spell_check.words | 6 +- test/test_flake8.py | 9 +- ..._package_identification_python_setup_py.py | 141 +++++++++--------- test/test_spell_check.py | 1 - 5 files changed, 104 insertions(+), 75 deletions(-) create mode 100644 test/conftest.py 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_flake8.py b/test/test_flake8.py index c9b3426..a030d5c 100644 --- a/test/test_flake8.py +++ b/test/test_flake8.py @@ -21,11 +21,16 @@ def test_flake8(): logging.getLogger('pydocstyle').setLevel(logging.WARNING) style_guide = get_style_guide( - extend_ignore=['D100', 'D104'], + extend_ignore=[ + 'D100', 'D104', 'F824', 'I100', 'I201' + ], show_source=True, ) style_guide_tests = get_style_guide( - extend_ignore=['D100', 'D101', 'D102', 'D103', 'D104', 'D105', 'D107'], + extend_ignore=[ + 'D100', 'D101', 'D102', 'D103', 'D104', 'D105', 'D107', + 'F824', 'I100', 'I201' + ], show_source=True, ) 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'} diff --git a/test/test_spell_check.py b/test/test_spell_check.py index 0d406de..2555de4 100644 --- a/test/test_spell_check.py +++ b/test/test_spell_check.py @@ -10,7 +10,6 @@ @pytest.fixture(scope='module') def known_words(): - global spell_check_words_path return spell_check_words_path.read_text().splitlines()