Skip to content

Commit

Permalink
Implement ALL_RCLCPP_NODE_INTERFACES
Browse files Browse the repository at this point in the history
Signed-off-by: methylDragon <methylDragon@gmail.com>
Co-authored-by: methylDragon <methylDragon@gmail.com>
  • Loading branch information
methylDragon committed Dec 29, 2022
1 parent cf31bb8 commit fa69bf1
Show file tree
Hide file tree
Showing 4 changed files with 86 additions and 1 deletion.
15 changes: 15 additions & 0 deletions rclcpp/include/rclcpp/node_interfaces/node_interfaces.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,25 @@
#include "rclcpp/detail/template_unique.hpp"
#include "rclcpp/node_interfaces/detail/node_interfaces_helpers.hpp"

#define ALL_RCLCPP_NODE_INTERFACES \
rclcpp::node_interfaces::NodeBaseInterface, \
rclcpp::node_interfaces::NodeClockInterface, \
rclcpp::node_interfaces::NodeGraphInterface, \
rclcpp::node_interfaces::NodeLoggingInterface, \
rclcpp::node_interfaces::NodeParametersInterface, \
rclcpp::node_interfaces::NodeServicesInterface, \
rclcpp::node_interfaces::NodeTimeSourceInterface, \
rclcpp::node_interfaces::NodeTimersInterface, \
rclcpp::node_interfaces::NodeTopicsInterface, \
rclcpp::node_interfaces::NodeWaitablesInterface


namespace rclcpp
{
namespace node_interfaces
{


/// A helper class for aggregating node interfaces.
template<typename ... InterfaceTs>
class NodeInterfaces
Expand Down Expand Up @@ -144,6 +158,7 @@ class NodeInterfaces
{}
};


} // namespace node_interfaces
} // namespace rclcpp

Expand Down
2 changes: 1 addition & 1 deletion rclcpp/test/rclcpp/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -267,7 +267,7 @@ ament_add_gtest(test_node_interfaces__node_waitables
if(TARGET test_node_interfaces__node_waitables)
target_link_libraries(test_node_interfaces__node_waitables ${PROJECT_NAME} mimick)
endif()
add_library(test_node_interfaces__test_template_utils # Compile time test
ament_add_gtest(test_node_interfaces__test_template_utils # Compile time test
node_interfaces/detail/test_template_utils.cpp)
if(TARGET test_node_interfaces__test_template_utils)
target_link_libraries(test_node_interfaces__test_template_utils ${PROJECT_NAME})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,15 @@
// See the License for the specific language governing permissions and
// limitations under the License.

#include <gtest/gtest.h>

#include "rclcpp/detail/template_contains.hpp"
#include "rclcpp/detail/template_unique.hpp"


TEST(NoOpTests, test_node_interfaces_template_utils) {
} // This is just to let gtest work

namespace rclcpp
{
namespace detail
Expand Down
64 changes: 64 additions & 0 deletions rclcpp/test/rclcpp/node_interfaces/test_node_interfaces.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -179,3 +179,67 @@ TEST_F(TestNodeInterfaces, ni_init) {
time_source = ni.get_node_time_source_interface();
}
}

/*
Testing macro'ed getters.
*/
TEST_F(TestNodeInterfaces, ni_all_init) {
auto node = std::make_shared<rclcpp::Node>("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;

auto ni = rclcpp::node_interfaces::NodeInterfaces<ALL_RCLCPP_NODE_INTERFACES>(node);

{
auto base = ni.get<NodeBaseInterface>();
base = ni.get_node_base_interface();
EXPECT_STREQ(base->get_name(), "my_node"); // Test for functionality
}
{
auto clock = ni.get<NodeClockInterface>();
clock = ni.get_node_clock_interface();
clock->get_clock();
}
{
auto graph = ni.get<NodeGraphInterface>();
graph = ni.get_node_graph_interface();
}
{
auto logging = ni.get<NodeLoggingInterface>();
logging = ni.get_node_logging_interface();
}
{
auto timers = ni.get<NodeTimersInterface>();
timers = ni.get_node_timers_interface();
}
{
auto topics = ni.get<NodeTopicsInterface>();
topics = ni.get_node_topics_interface();
}
{
auto services = ni.get<NodeServicesInterface>();
services = ni.get_node_services_interface();
}
{
auto waitables = ni.get<NodeWaitablesInterface>();
waitables = ni.get_node_waitables_interface();
}
{
auto parameters = ni.get<NodeParametersInterface>();
parameters = ni.get_node_parameters_interface();
}
{
auto time_source = ni.get<NodeTimeSourceInterface>();
time_source = ni.get_node_time_source_interface();
}
}

0 comments on commit fa69bf1

Please sign in to comment.