@@ -932,3 +932,62 @@ TEST(TestConversion, rcl_interfaces__ParameterEvent_cpp)
932932 EXPECT_EQ (msg_from_yaml.new_parameters [0 ].value .type , 1u );
933933 EXPECT_EQ (msg_from_yaml.new_parameters [0 ].value .bool_value , true );
934934}
935+
936+ TEST (TestConversion, PartialConversion_std_msgs__Header_cpp)
937+ {
938+ // Start with a ROS message, like a std_msgs/Header
939+ std_msgs::msg::Header msg;
940+ msg.frame_id = " my_frame" ;
941+ builtin_interfaces::msg::Time stamp;
942+ stamp.sec = 4 ;
943+ stamp.nanosec = 20u ;
944+ msg.stamp = stamp;
945+
946+ // Convert solely the 'sec' member of the timestamp to a YAML representation
947+ InterfaceTypeName interface{" std_msgs" , " Header" };
948+ RosMessage_Cpp ros_msg;
949+ ros_msg.type_info = dynmsg::cpp::get_type_info (interface);
950+ ros_msg.data = reinterpret_cast <uint8_t *>(&msg);
951+ YAML::Node yaml_msg = dynmsg::cpp::selected_member_to_yaml (ros_msg, " stamp/sec" );
952+ std::cout << " 'sec' as YAML:" << std::endl;
953+ std::cout << yaml_msg << std::endl << std::endl;
954+
955+ EXPECT_EQ (yaml_msg.as <int >(), 4 );
956+ }
957+
958+ TEST (TestConversion, PartialConversion_rcl_interfaces__ParameterEvent_cpp)
959+ {
960+ // Start with a ROS message, like a rcl_interfaces/ParameterEvent
961+ rcl_interfaces::msg::ParameterEvent msg;
962+
963+ builtin_interfaces::msg::Time stamp;
964+ stamp.sec = 4 ;
965+ stamp.nanosec = 20u ;
966+
967+ rcl_interfaces::msg::ParameterValue param_value;
968+ param_value.type = 1u ;
969+ param_value.bool_value = true ;
970+
971+ rcl_interfaces::msg::Parameter param;
972+ param.name = " the_param_name" ;
973+ param.value = param_value;
974+
975+ msg.stamp = stamp;
976+ msg.node = " /my/node" ;
977+ msg.new_parameters .push_back (param);
978+
979+ // Convert solely the parameter array to a YAML representation
980+ InterfaceTypeName interface{" rcl_interfaces" , " ParameterEvent" };
981+ RosMessage_Cpp ros_msg;
982+ ros_msg.type_info = dynmsg::cpp::get_type_info (interface);
983+ ros_msg.data = reinterpret_cast <uint8_t *>(&msg);
984+ YAML::Node yaml_msg = dynmsg::cpp::selected_member_to_yaml (ros_msg, " new_parameters" );
985+ std::cout << " partial message to YAML:" << std::endl;
986+ std::cout << yaml_msg << std::endl << std::endl;
987+
988+ EXPECT_TRUE (yaml_msg.IsSequence ());
989+ EXPECT_EQ (yaml_msg.size (), 1 );
990+ EXPECT_STREQ (yaml_msg[0 ][" name" ].as <std::string>().c_str (), " the_param_name" );
991+ EXPECT_EQ (yaml_msg[0 ][" value" ][" type" ].as <int >(), 1u );
992+ EXPECT_EQ (yaml_msg[0 ][" value" ][" bool_value" ].as <bool >(), true );
993+ }
0 commit comments