renamer_test.cpp
Go to the documentation of this file.
00001 #include "config.h"
00002 #include <gtest/gtest.h>
00003 
00004 #include <sensor_msgs/JointState.h>
00005 #include "ros_type_introspection/ros_introspection.hpp"
00006 
00007 using namespace ros::message_traits;
00008 using namespace RosIntrospection;
00009 
00010 /*
00011 TEST(Renamer, DeserializeJointStateAndRename)
00012 {
00013   std::vector<SubstitutionRule> rules;
00014   rules.push_back( SubstitutionRule("position.#", "name.#", "@/pos") );
00015   rules.push_back( SubstitutionRule("velocity.#", "name.#", "@/vel") );
00016   rules.push_back( SubstitutionRule("effort.#",   "name.#", "@/eff") );
00017 
00018   ROSTypeList type_map = buildROSTypeMapFromDefinition(
00019         DataType<sensor_msgs::JointState >::value(),
00020         Definition<sensor_msgs::JointState >::value() );
00021 
00022   sensor_msgs::JointState joint_state;
00023 
00024   joint_state.header.seq = 2016;
00025   joint_state.header.stamp.sec  = 1234;
00026   joint_state.header.stamp.nsec = 567*1000*1000;
00027   joint_state.header.frame_id = "pippo";
00028 
00029   joint_state.name.resize( 3 );
00030   joint_state.position.resize( 3 );
00031   joint_state.velocity.resize( 3 );
00032   joint_state.effort.resize( 3 );
00033 
00034   std::string names[3];
00035   names[0] = ("hola");
00036   names[1] = ("ciao");
00037   names[2] = ("bye");
00038 
00039   for (int i=0; i<3; i++)
00040   {
00041     joint_state.name[i] = names[i];
00042     joint_state.position[i]= 11+i;
00043     joint_state.velocity[i]= 21+i;
00044     joint_state.effort[i]= 31+i;
00045   }
00046 
00047   std::vector<uint8_t> buffer(64*1024);
00048   ros::serialization::OStream stream(buffer.data(), buffer.size());
00049   ros::serialization::Serializer<sensor_msgs::JointState>::write(stream, joint_state);
00050 
00051   ROSType main_type( DataType<sensor_msgs::JointState >::value() );
00052 
00053   FlatMessage flat_container;
00054 
00055   buildRosFlatType(type_map, main_type, "JointState", buffer.data(), &flat_container);
00056   applyNameTransform( rules, &flat_container );
00057 
00058   if(VERBOSE_TEST){
00059     for(auto&it: renamed_value) {
00060       std::cout << it.first << " >> " << it.second << std::endl;
00061     }
00062   }
00063 
00064   int i = 0;
00065 
00066   EXPECT_EQ( renamed_value[i].first , SString("JointState/hola/pos"));
00067   EXPECT_EQ( renamed_value[i++].second, 11 );
00068 
00069   EXPECT_EQ( renamed_value[i].first , SString("JointState/ciao/pos"));
00070   EXPECT_EQ( renamed_value[i++].second, 12 );
00071 
00072   EXPECT_EQ( renamed_value[i].first , SString("JointState/bye/pos"));
00073   EXPECT_EQ( renamed_value[i++].second, 13 );
00074 
00075   EXPECT_EQ( renamed_value[i].first , SString("JointState/hola/vel"));
00076   EXPECT_EQ( renamed_value[i++].second, 21 );
00077 
00078   EXPECT_EQ( renamed_value[i].first , SString("JointState/ciao/vel"));
00079   EXPECT_EQ( renamed_value[i++].second, 22 );
00080 
00081   EXPECT_EQ( renamed_value[i].first , SString("JointState/bye/vel"));
00082   EXPECT_EQ( renamed_value[i++].second, 23 );
00083 
00084   EXPECT_EQ( renamed_value[i].first , SString("JointState/hola/eff"));
00085   EXPECT_EQ( renamed_value[i++].second, 31 );
00086 
00087   EXPECT_EQ( renamed_value[i].first , SString("JointState/ciao/eff"));
00088   EXPECT_EQ( renamed_value[i++].second, 32 );
00089 
00090   EXPECT_EQ( renamed_value[i].first , SString("JointState/bye/eff"));
00091   EXPECT_EQ( renamed_value[i++].second, 33 );
00092 
00093   EXPECT_EQ( renamed_value[i].first , SString("JointState/header/seq"));
00094   EXPECT_EQ( renamed_value[i++].second, 2016 );
00095 
00096   EXPECT_EQ( renamed_value[i].first , SString("JointState/header/stamp"));
00097   EXPECT_EQ( renamed_value[i++].second, 1234.567 );
00098 
00099 }
00100 */
00101 
00102 TEST(Renamer2, DeserializeJointStateAndRename)
00103 {
00104   RosIntrospection::Parser parser;
00105 
00106   std::vector<SubstitutionRule> rules;
00107   rules.push_back( SubstitutionRule("position.#", "name.#", "@/pos") );
00108   rules.push_back( SubstitutionRule("velocity.#", "name.#", "@/vel") );
00109   rules.push_back( SubstitutionRule("effort.#",   "name.#", "@/eff") );
00110 
00111   ROSType main_type( DataType<sensor_msgs::JointState>::value() );
00112 
00113   parser.registerMessageDefinition(
00114         "JointState", main_type,
00115         Definition<sensor_msgs::JointState>::value());
00116 
00117   parser.registerRenamingRules( main_type, rules);
00118 
00119   sensor_msgs::JointState joint_state;
00120 
00121   joint_state.header.seq = 2016;
00122   joint_state.header.stamp.sec  = 1234;
00123   joint_state.header.stamp.nsec = 567*1000*1000;
00124   joint_state.header.frame_id = "pippo";
00125 
00126   joint_state.name.resize( 3 );
00127   joint_state.position.resize( 3 );
00128   joint_state.velocity.resize( 3 );
00129   joint_state.effort.resize( 3 );
00130 
00131   std::string names[3];
00132   names[0] = ("hola");
00133   names[1] = ("ciao");
00134   names[2] = ("bye");
00135 
00136   for (int i=0; i<3; i++)
00137   {
00138     joint_state.name[i] = names[i];
00139     joint_state.position[i]= 11+i;
00140     joint_state.velocity[i]= 21+i;
00141     joint_state.effort[i]= 31+i;
00142   }
00143 
00144   std::vector<uint8_t> buffer( ros::serialization::serializationLength(joint_state) );
00145   ros::serialization::OStream stream(buffer.data(), buffer.size());
00146   ros::serialization::Serializer<sensor_msgs::JointState>::write(stream, joint_state);
00147 
00148   FlatMessage flat_container;
00149   RenamedValues renamed_value;
00150 
00151   parser.deserializeIntoFlatContainer("JointState",  absl::Span<uint8_t>(buffer),  &flat_container,100);
00152   parser.applyNameTransform("JointState",  flat_container, &renamed_value);
00153 
00154   if(VERBOSE_TEST)
00155   {
00156     std::cout << "----------------\n";
00157     for(auto&it: flat_container.value) {
00158       std::cout << it.first.toStdString() << " >> " << it.second.convert<double>() << std::endl;
00159     }
00160     std::cout << "----------------\n";
00161     for(auto&it: renamed_value) {
00162       std::cout << it.first << " >> " << it.second.convert<double>() << std::endl;
00163     }
00164     std::cout << "----------------\n";
00165   }
00166 
00167   int i = 0;
00168 
00169   EXPECT_EQ( renamed_value[i].first , ("JointState/header/seq"));
00170   EXPECT_EQ( renamed_value[i++].second.convert<double>(), 2016 );
00171 
00172   EXPECT_EQ( renamed_value[i].first , ("JointState/header/stamp"));
00173   EXPECT_EQ( renamed_value[i++].second.convert<double>(), 1234.567 );
00174 
00175   EXPECT_EQ( renamed_value[i].first , ("JointState/hola/pos"));
00176   EXPECT_EQ( renamed_value[i++].second.convert<double>(), 11 );
00177 
00178   EXPECT_EQ( renamed_value[i].first , ("JointState/ciao/pos"));
00179   EXPECT_EQ( renamed_value[i++].second.convert<double>(), 12 );
00180 
00181   EXPECT_EQ( renamed_value[i].first , ("JointState/bye/pos"));
00182   EXPECT_EQ( renamed_value[i++].second.convert<double>(), 13 );
00183 
00184   EXPECT_EQ( renamed_value[i].first , ("JointState/hola/vel"));
00185   EXPECT_EQ( renamed_value[i++].second.convert<double>(), 21 );
00186 
00187   EXPECT_EQ( renamed_value[i].first , ("JointState/ciao/vel"));
00188   EXPECT_EQ( renamed_value[i++].second.convert<double>(), 22 );
00189 
00190   EXPECT_EQ( renamed_value[i].first , ("JointState/bye/vel"));
00191   EXPECT_EQ( renamed_value[i++].second.convert<double>(), 23 );
00192 
00193   EXPECT_EQ( renamed_value[i].first , ("JointState/hola/eff"));
00194   EXPECT_EQ( renamed_value[i++].second.convert<double>(), 31 );
00195 
00196   EXPECT_EQ( renamed_value[i].first , ("JointState/ciao/eff"));
00197   EXPECT_EQ( renamed_value[i++].second.convert<double>(), 32 );
00198 
00199   EXPECT_EQ( renamed_value[i].first , ("JointState/bye/eff"));
00200   EXPECT_EQ( renamed_value[i++].second.convert<double>(), 33 );
00201 
00202 }
00203 


type_introspection_tests
Author(s): Davide Faconti
autogenerated on Sat Apr 14 2018 03:30:59