diff --git a/rosidl_typesupport_c/rosidl_typesupport_c/cli.py b/rosidl_typesupport_c/rosidl_typesupport_c/cli.py index 230b6ceb..1dd354ca 100644 --- a/rosidl_typesupport_c/rosidl_typesupport_c/cli.py +++ b/rosidl_typesupport_c/rosidl_typesupport_c/cli.py @@ -27,6 +27,13 @@ class GenerateCTypesupport(GenerateCommandExtension): + def __init__(self, name, *, typesupport_implementations=None): + super().__init__(name) + if typesupport_implementations is None: + typesupport_implementations = list( + get_resources('rosidl_typesupport_c')) + self.__typesupport_implementations = typesupport_implementations + def generate( self, package_name, @@ -76,9 +83,6 @@ def generate( generated_files.append(visibility_control_file_path) # Generate typesupport code - typesupport_implementations = list( - get_resources('rosidl_typesupport_c')) - with legacy_generator_arguments_file( package_name=package_name, interface_files=idl_interface_files, @@ -88,7 +92,7 @@ def generate( ) as path_to_arguments_file: generated_files.extend(generate_c( path_to_arguments_file, - typesupport_implementations + self.__typesupport_implementations )) return generated_files diff --git a/rosidl_typesupport_c/test/test_cli_extension.py b/rosidl_typesupport_c/test/test_cli_extension.py index 23e090d8..505b6bed 100644 --- a/rosidl_typesupport_c/test/test_cli_extension.py +++ b/rosidl_typesupport_c/test/test_cli_extension.py @@ -14,15 +14,34 @@ import pathlib +from ament_index_python import get_resources from rosidl_cli.command.generate.api import generate TEST_DIR = str(pathlib.Path(__file__).parent) -def test_cli_extension_for_smoke(tmp_path): - generate( - package_name='rosidl_typesupport_c', - interface_files=[TEST_DIR + ':msg/Test.msg'], - typesupports=['c'], - output_path=tmp_path - ) +def test_cli_extension_for_smoke(tmp_path, capsys): + # NOTE(hidmic): pytest and empy do not play along, + # the latter expects some proxy will stay in sys.stdout + # and the former insists in overwriting it + interface_files = [TEST_DIR + ':msg/Test.msg'] + + with capsys.disabled(): # so do everything in one run + # Passing target typesupport implementations explictly + ts = 'c[typesupport_implementations:{}]'.format( + list(get_resources('rosidl_typesupport_c')) + ) + generate( + package_name='rosidl_typesupport_c', + interface_files=interface_files, + typesupports=[ts], + output_path=tmp_path / 'explicit_args' + ) + + # Using default typesupport implementations + generate( + package_name='rosidl_typesupport_c', + interface_files=interface_files, + typesupports=['c'], + output_path=tmp_path / 'defaults' + ) diff --git a/rosidl_typesupport_cpp/rosidl_typesupport_cpp/cli.py b/rosidl_typesupport_cpp/rosidl_typesupport_cpp/cli.py index a1a10278..b88ffcbc 100644 --- a/rosidl_typesupport_cpp/rosidl_typesupport_cpp/cli.py +++ b/rosidl_typesupport_cpp/rosidl_typesupport_cpp/cli.py @@ -26,6 +26,13 @@ class GenerateCppTypesupport(GenerateCommandExtension): + def __init__(self, name, *, typesupport_implementations=None): + super().__init__(name) + if typesupport_implementations is None: + typesupport_implementations = list( + get_resources('rosidl_typesupport_cpp')) + self.__typesupport_implementations = typesupport_implementations + def generate( self, package_name, @@ -56,9 +63,6 @@ def generate( )) # Generate typesupport code - typesupport_implementations = list( - get_resources('rosidl_typesupport_cpp')) - with legacy_generator_arguments_file( package_name=package_name, interface_files=idl_interface_files, @@ -68,5 +72,5 @@ def generate( ) as path_to_arguments_file: return generate_cpp( path_to_arguments_file, - typesupport_implementations + self.__typesupport_implementations ) diff --git a/rosidl_typesupport_cpp/test/test_cli_extension.py b/rosidl_typesupport_cpp/test/test_cli_extension.py index df70c658..d7972b7d 100644 --- a/rosidl_typesupport_cpp/test/test_cli_extension.py +++ b/rosidl_typesupport_cpp/test/test_cli_extension.py @@ -14,15 +14,34 @@ import pathlib +from ament_index_python import get_resources from rosidl_cli.command.generate.api import generate TEST_DIR = str(pathlib.Path(__file__).parent) -def test_cli_extension_for_smoke(tmp_path): - generate( - package_name='rosidl_typesupport_cpp', - interface_files=[TEST_DIR + ':msg/Test.msg'], - typesupports=['cpp'], - output_path=tmp_path - ) +def test_cli_extension_for_smoke(tmp_path, capsys): + # NOTE(hidmic): pytest and empy do not play along, + # the latter expects some proxy will stay in sys.stdout + # and the former insists in overwriting it + interface_files = [TEST_DIR + ':msg/Test.msg'] + + with capsys.disabled(): # so do everything in one run + # Passing target typesupport implementations explictly + ts = 'cpp[typesupport_implementations:{}]'.format( + list(get_resources('rosidl_typesupport_cpp')) + ) + generate( + package_name='rosidl_typesupport_cpp', + interface_files=interface_files, + typesupports=[ts], + output_path=tmp_path / 'explicit_args' + ) + + # Using default typesupport implementations + generate( + package_name='rosidl_typesupport_cpp', + interface_files=interface_files, + typesupports=['cpp'], + output_path=tmp_path / 'defaults' + )