Skip to content

Commit 078e685

Browse files
authored
Add name and data_type traits for actions (#848)
This implements the `rosidl_generator_traits::name<>()` and `rosidl_generator_traits::data_type<>()` trait functions for generated actions, similarly to how it's done for messages and services. Unit tests are added to verify this behaviour, and also extend the prior tests to cover the data_type trait for all interface types. Signed-off-by: Nathan Wiebe Neufeldt <[email protected]>
1 parent bf5682e commit 078e685

File tree

2 files changed

+44
-0
lines changed

2 files changed

+44
-0
lines changed

rosidl_generator_cpp/resource/action__traits.hpp.em

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,24 @@ TEMPLATE(
5252

5353
@{
5454
action_typename = '::'.join(action.namespaced_type.namespaced_name())
55+
action_fully_qualified_name = '/'.join(action.namespaced_type.namespaced_name())
5556
}@
5657
@
5758
namespace rosidl_generator_traits
5859
{
5960

61+
template<>
62+
inline const char * data_type<@(action_typename)>()
63+
{
64+
return "@(action_typename)";
65+
}
66+
67+
template<>
68+
inline const char * name<@(action_typename)>()
69+
{
70+
return "@(action_fully_qualified_name)";
71+
}
72+
6073
template<>
6174
struct is_action<@(action_typename)>
6275
: std::true_type

rosidl_generator_tests/test/rosidl_generator_cpp/test_name.cpp

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
// limitations under the License.
1414

1515
#include <gtest/gtest.h>
16+
#include "rosidl_generator_tests/action/fibonacci.hpp"
1617
#include "rosidl_generator_tests/msg/empty.hpp"
1718
#include "rosidl_generator_tests/msg/strings.hpp"
1819
#include "rosidl_generator_tests/srv/basic_types.hpp"
@@ -27,6 +28,15 @@ TEST(Test_rosidl_generator_traits, check_msg_name) {
2728
rosidl_generator_traits::name<rosidl_generator_tests::msg::Empty>());
2829
}
2930

31+
TEST(Test_rosidl_generator_traits, check_msg_data_type) {
32+
ASSERT_STREQ(
33+
"rosidl_generator_tests::msg::Strings",
34+
rosidl_generator_traits::data_type<rosidl_generator_tests::msg::Strings>());
35+
ASSERT_STREQ(
36+
"rosidl_generator_tests::msg::Empty",
37+
rosidl_generator_traits::data_type<rosidl_generator_tests::msg::Empty>());
38+
}
39+
3040
TEST(Test_rosidl_generator_traits, check_srv_name) {
3141
ASSERT_STREQ(
3242
"rosidl_generator_tests/srv/BasicTypes",
@@ -35,3 +45,24 @@ TEST(Test_rosidl_generator_traits, check_srv_name) {
3545
"rosidl_generator_tests/srv/Empty",
3646
rosidl_generator_traits::name<rosidl_generator_tests::srv::Empty>());
3747
}
48+
49+
TEST(Test_rosidl_generator_traits, check_srv_data_type) {
50+
ASSERT_STREQ(
51+
"rosidl_generator_tests::srv::BasicTypes",
52+
rosidl_generator_traits::data_type<rosidl_generator_tests::srv::BasicTypes>());
53+
ASSERT_STREQ(
54+
"rosidl_generator_tests::srv::Empty",
55+
rosidl_generator_traits::data_type<rosidl_generator_tests::srv::Empty>());
56+
}
57+
58+
TEST(Test_rosidl_generator_traits, check_action_name) {
59+
ASSERT_STREQ(
60+
"rosidl_generator_tests/action/Fibonacci",
61+
rosidl_generator_traits::name<rosidl_generator_tests::action::Fibonacci>());
62+
}
63+
64+
TEST(Test_rosidl_generator_traits, check_action_data_type) {
65+
ASSERT_STREQ(
66+
"rosidl_generator_tests::action::Fibonacci",
67+
rosidl_generator_traits::data_type<rosidl_generator_tests::action::Fibonacci>());
68+
}

0 commit comments

Comments
 (0)