From 38748ff0dbc76f88e114a3dd1910aad14083f535 Mon Sep 17 00:00:00 2001 From: Michel Hidalgo Date: Wed, 3 Mar 2021 17:31:22 -0300 Subject: [PATCH] Test rosidl translate extensions Signed-off-by: Michel Hidalgo --- rosidl_adapter/test/data/action/Test.action | 21 +++++ .../test/data/action/Test.expected.idl | 50 +++++++++++ .../test/data/msg/Test.expected.idl | 36 ++++++++ rosidl_adapter/test/data/msg/Test.msg | 13 +++ .../test/data/srv/Test.expected.idl | 41 +++++++++ rosidl_adapter/test/data/srv/Test.srv | 16 ++++ rosidl_adapter/test/test_cli_extensions.py | 85 +++++++++++++++++++ 7 files changed, 262 insertions(+) create mode 100644 rosidl_adapter/test/data/action/Test.action create mode 100644 rosidl_adapter/test/data/action/Test.expected.idl create mode 100644 rosidl_adapter/test/data/msg/Test.expected.idl create mode 100644 rosidl_adapter/test/data/msg/Test.msg create mode 100644 rosidl_adapter/test/data/srv/Test.expected.idl create mode 100644 rosidl_adapter/test/data/srv/Test.srv create mode 100644 rosidl_adapter/test/test_cli_extensions.py diff --git a/rosidl_adapter/test/data/action/Test.action b/rosidl_adapter/test/data/action/Test.action new file mode 100644 index 000000000..be9501b3a --- /dev/null +++ b/rosidl_adapter/test/data/action/Test.action @@ -0,0 +1,21 @@ +# goal definition +bool bool_value +byte byte_value +char char_value +float32 float32_value +float64 float64_value +int8 int8_value +uint8 uint8_value +int16 int16_value +uint16 uint16_value +int32 int32_value +uint32 uint32_value +int64 int64_value +uint64 uint64_value +string string_value +--- +# result definition +bool ok +--- +# feedback definition +int32[] sequence diff --git a/rosidl_adapter/test/data/action/Test.expected.idl b/rosidl_adapter/test/data/action/Test.expected.idl new file mode 100644 index 000000000..bb5c4e698 --- /dev/null +++ b/rosidl_adapter/test/data/action/Test.expected.idl @@ -0,0 +1,50 @@ +// generated from rosidl_adapter/resource/action.idl.em +// with input from test_msgs/action/Test.action +// generated code does not contain a copyright notice + + +module test_msgs { + module action { + @verbatim (language="comment", text= + " goal definition") + struct Test_Goal { + boolean bool_value; + + octet byte_value; + + uint8 char_value; + + float float32_value; + + double float64_value; + + int8 int8_value; + + uint8 uint8_value; + + int16 int16_value; + + uint16 uint16_value; + + int32 int32_value; + + uint32 uint32_value; + + int64 int64_value; + + uint64 uint64_value; + + string string_value; + }; + struct Test_Result { + @verbatim (language="comment", text= + " result definition") + boolean ok; + }; + struct Test_Feedback { + @verbatim (language="comment", text= + " feedback definition") + sequence sequence; + }; + }; +}; diff --git a/rosidl_adapter/test/data/msg/Test.expected.idl b/rosidl_adapter/test/data/msg/Test.expected.idl new file mode 100644 index 000000000..71694d374 --- /dev/null +++ b/rosidl_adapter/test/data/msg/Test.expected.idl @@ -0,0 +1,36 @@ +// generated from rosidl_adapter/resource/msg.idl.em +// with input from test_msgs/msg/Test.msg +// generated code does not contain a copyright notice + + +module test_msgs { + module msg { + struct Test { + boolean bool_value; + + octet byte_value; + + uint8 char_value; + + float float32_value; + + double float64_value; + + int8 int8_value; + + uint8 uint8_value; + + int16 int16_value; + + uint16 uint16_value; + + int32 int32_value; + + uint32 uint32_value; + + int64 int64_value; + + uint64 uint64_value; + }; + }; +}; diff --git a/rosidl_adapter/test/data/msg/Test.msg b/rosidl_adapter/test/data/msg/Test.msg new file mode 100644 index 000000000..eaf9b9ef3 --- /dev/null +++ b/rosidl_adapter/test/data/msg/Test.msg @@ -0,0 +1,13 @@ +bool bool_value +byte byte_value +char char_value +float32 float32_value +float64 float64_value +int8 int8_value +uint8 uint8_value +int16 int16_value +uint16 uint16_value +int32 int32_value +uint32 uint32_value +int64 int64_value +uint64 uint64_value diff --git a/rosidl_adapter/test/data/srv/Test.expected.idl b/rosidl_adapter/test/data/srv/Test.expected.idl new file mode 100644 index 000000000..dbb4dee01 --- /dev/null +++ b/rosidl_adapter/test/data/srv/Test.expected.idl @@ -0,0 +1,41 @@ +// generated from rosidl_adapter/resource/srv.idl.em +// with input from test_msgs/srv/Test.srv +// generated code does not contain a copyright notice + + +module test_msgs { + module srv { + struct Test_Request { + boolean bool_value; + + octet byte_value; + + uint8 char_value; + + float float32_value; + + double float64_value; + + int8 int8_value; + + uint8 uint8_value; + + int16 int16_value; + + uint16 uint16_value; + + int32 int32_value; + + uint32 uint32_value; + + int64 int64_value; + + uint64 uint64_value; + + string string_value; + }; + struct Test_Response { + boolean ok; + }; + }; +}; diff --git a/rosidl_adapter/test/data/srv/Test.srv b/rosidl_adapter/test/data/srv/Test.srv new file mode 100644 index 000000000..934567d7f --- /dev/null +++ b/rosidl_adapter/test/data/srv/Test.srv @@ -0,0 +1,16 @@ +bool bool_value +byte byte_value +char char_value +float32 float32_value +float64 float64_value +int8 int8_value +uint8 uint8_value +int16 int16_value +uint16 uint16_value +int32 int32_value +uint32 uint32_value +int64 int64_value +uint64 uint64_value +string string_value +--- +bool ok diff --git a/rosidl_adapter/test/test_cli_extensions.py b/rosidl_adapter/test/test_cli_extensions.py new file mode 100644 index 000000000..218d7bb41 --- /dev/null +++ b/rosidl_adapter/test/test_cli_extensions.py @@ -0,0 +1,85 @@ +# Copyright 2021 Open Source Robotics Foundation, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import filecmp +import pathlib + +from rosidl_cli.command.translate.api import translate + + +DATA_PATH = pathlib.Path(__file__).parent / 'data' + + +def test_translation_extensions(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 + + with capsys.disabled(): # so do everything in one run + # Test .msg to .idl translation + idl_files = translate( + package_name='test_msgs', + interface_files=[ + f'{DATA_PATH}:msg/Test.msg'], + output_path=tmp_path, + output_format='idl', + translators=['msg2idl'] + ) + + assert len(idl_files) == 1 + idl_file = idl_files[0] + assert idl_file == f'{tmp_path}:msg/Test.idl' + assert filecmp.cmp( + tmp_path / 'msg' / 'Test.idl', + DATA_PATH / 'msg' / 'Test.expected.idl', + shallow=False + ) + + # Test .srv to .idl translation + idl_files = translate( + package_name='test_msgs', + interface_files=[ + f'{DATA_PATH}:srv/Test.srv'], + output_path=tmp_path, + output_format='idl', + translators=['srv2idl'] + ) + + assert len(idl_files) == 1 + idl_file = idl_files[0] + assert idl_file == f'{tmp_path}:srv/Test.idl' + assert filecmp.cmp( + tmp_path / 'srv' / 'Test.idl', + DATA_PATH / 'srv' / 'Test.expected.idl', + shallow=False + ) + + # Test .action to .idl translation + idl_files = translate( + package_name='test_msgs', + interface_files=[ + f'{DATA_PATH}:action/Test.action'], + output_path=tmp_path, + output_format='idl', + translators=['action2idl'] + ) + + assert len(idl_files) == 1 + idl_file = idl_files[0] + assert idl_file == f'{tmp_path}:action/Test.idl' + assert filecmp.cmp( + tmp_path / 'action' / 'Test.idl', + DATA_PATH / 'action' / 'Test.expected.idl', + shallow=False + )