Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions test/conftest.py
Original file line number Diff line number Diff line change
@@ -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)
6 changes: 5 additions & 1 deletion test/spell_check.words
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,11 @@ contextlib
distclass
foobar
hashable
isdigit
iterdir
itertools
linter
linux
lstrip
noqa
pathlib
Expand All @@ -20,5 +23,6 @@ runpy
scspell
setuptools
stacklevel
tempfile
takewhile
thomas
tmpdir
141 changes: 70 additions & 71 deletions test/test_package_identification_python_setup_py.py
Original file line number Diff line number Diff line change
Expand Up @@ -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 \
Expand All @@ -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'}
Loading