diff --git a/rclcpp/include/rclcpp/node_interfaces/detail/node_interfaces_helpers.hpp b/rclcpp/include/rclcpp/node_interfaces/detail/node_interfaces_helpers.hpp index a243e9611a..d3795877e8 100644 --- a/rclcpp/include/rclcpp/node_interfaces/detail/node_interfaces_helpers.hpp +++ b/rclcpp/include/rclcpp/node_interfaces/detail/node_interfaces_helpers.hpp @@ -199,6 +199,12 @@ init_tuple(NodeT & n) { \ return StorageClassT::template get(); \ } \ + \ + std::shared_ptr \ + get_node_ ## NodeInterfaceName ## _interface() const \ + { \ + return StorageClassT::template get(); \ + } \ }; \ } // namespace rclcpp::node_interfaces::detail // *INDENT-ON* diff --git a/rclcpp/test/rclcpp/node_interfaces/test_node_interfaces.cpp b/rclcpp/test/rclcpp/node_interfaces/test_node_interfaces.cpp index fd6d6173d6..c10ccc884d 100644 --- a/rclcpp/test/rclcpp/node_interfaces/test_node_interfaces.cpp +++ b/rclcpp/test/rclcpp/node_interfaces/test_node_interfaces.cpp @@ -192,7 +192,7 @@ TEST_F(TestNodeInterfaces, ni_init) { /* Testing macro'ed getters. */ -TEST_F(TestNodeInterfaces, ni_all_init) { +TEST_F(TestNodeInterfaces, ni_all_init_non_const) { auto node = std::make_shared("my_node", "/ns"); using rclcpp::node_interfaces::NodeInterfaces; @@ -252,3 +252,64 @@ TEST_F(TestNodeInterfaces, ni_all_init) { time_source = ni.get_node_time_source_interface(); } } + +TEST_F(TestNodeInterfaces, ni_all_init_const) { + auto node = std::make_shared("my_node", "/ns"); + + using rclcpp::node_interfaces::NodeInterfaces; + using rclcpp::node_interfaces::NodeBaseInterface; + using rclcpp::node_interfaces::NodeClockInterface; + using rclcpp::node_interfaces::NodeGraphInterface; + using rclcpp::node_interfaces::NodeLoggingInterface; + using rclcpp::node_interfaces::NodeTimersInterface; + using rclcpp::node_interfaces::NodeTopicsInterface; + using rclcpp::node_interfaces::NodeServicesInterface; + using rclcpp::node_interfaces::NodeWaitablesInterface; + using rclcpp::node_interfaces::NodeParametersInterface; + using rclcpp::node_interfaces::NodeTimeSourceInterface; + + const auto ni = rclcpp::node_interfaces::NodeInterfaces(*node); + + { + auto base = ni.get(); + base = ni.get_node_base_interface(); + EXPECT_STREQ(base->get_name(), "my_node"); // Test for functionality + } + { + auto clock = ni.get(); + clock = ni.get_node_clock_interface(); + clock->get_clock(); + } + { + auto graph = ni.get(); + graph = ni.get_node_graph_interface(); + } + { + auto logging = ni.get(); + logging = ni.get_node_logging_interface(); + } + { + auto timers = ni.get(); + timers = ni.get_node_timers_interface(); + } + { + auto topics = ni.get(); + topics = ni.get_node_topics_interface(); + } + { + auto services = ni.get(); + services = ni.get_node_services_interface(); + } + { + auto waitables = ni.get(); + waitables = ni.get_node_waitables_interface(); + } + { + auto parameters = ni.get(); + parameters = ni.get_node_parameters_interface(); + } + { + auto time_source = ni.get(); + time_source = ni.get_node_time_source_interface(); + } +}