00001 #include <gtest/gtest.h> 00002 #include <iostream> 00003 #include <boost/shared_ptr.hpp> 00004 #include "robot_instance/StringUtilities.h" 00005 00006 TEST(StringUtilitiesTest, IsValid) 00007 { 00008 EXPECT_TRUE(StringUtilities::isFullyQualifiedRobonetNode("/ASDF/ASDF")); 00009 EXPECT_TRUE(StringUtilities::isFullyQualifiedRobonetNode("/ASDF_1/ASDF_1")); 00010 EXPECT_FALSE(StringUtilities::isFullyQualifiedRobonetNode("ASDF")); 00011 EXPECT_FALSE(StringUtilities::isFullyQualifiedRobonetNode("/ASDF")); 00012 EXPECT_FALSE(StringUtilities::isFullyQualifiedRobonetNode("ASDF/")); 00013 EXPECT_FALSE(StringUtilities::isFullyQualifiedRobonetNode("/ASDF/")); 00014 EXPECT_FALSE(StringUtilities::isFullyQualifiedRobonetNode("ASDF/ASDF/")); 00015 EXPECT_FALSE(StringUtilities::isFullyQualifiedRobonetNode("/ASDF/ASDF/")); 00016 EXPECT_FALSE(StringUtilities::isFullyQualifiedRobonetNode("ASDF/ASDF/ASDF")); 00017 EXPECT_FALSE(StringUtilities::isFullyQualifiedRobonetNode("/ASDF/ASDF/ASDF")); 00018 EXPECT_FALSE(StringUtilities::isFullyQualifiedRobonetNode("/ASDF_ASDF")); 00019 00020 EXPECT_TRUE(StringUtilities::isFullyQualifiedRobonetElement("/ASDF/ASDF/ASDF")); 00021 EXPECT_TRUE(StringUtilities::isFullyQualifiedRobonetElement("/ASDF_1/ASDF_1/AS.DF_1")); 00022 EXPECT_FALSE(StringUtilities::isFullyQualifiedRobonetElement("/ASDF")); 00023 EXPECT_FALSE(StringUtilities::isFullyQualifiedRobonetElement("/ASDF/")); 00024 EXPECT_FALSE(StringUtilities::isFullyQualifiedRobonetElement("/ASDF/ASDF/")); 00025 EXPECT_FALSE(StringUtilities::isFullyQualifiedRobonetElement("/ASDF_ASDF_ASDF")); 00026 00027 EXPECT_TRUE(StringUtilities::isFullyQualifiedRoboDynChain("r2/ASDF")); 00028 EXPECT_TRUE(StringUtilities::isFullyQualifiedRoboDynChain("r2/ASDF_1")); 00029 EXPECT_FALSE(StringUtilities::isFullyQualifiedRoboDynChain("ASDF")); 00030 EXPECT_FALSE(StringUtilities::isFullyQualifiedRoboDynChain("/ASDF")); 00031 EXPECT_FALSE(StringUtilities::isFullyQualifiedRoboDynChain("r2ASDF")); 00032 EXPECT_FALSE(StringUtilities::isFullyQualifiedRoboDynChain("r2/ASDF/")); 00033 EXPECT_FALSE(StringUtilities::isFullyQualifiedRoboDynChain("r2/ASDF/ASDF")); 00034 EXPECT_FALSE(StringUtilities::isFullyQualifiedRoboDynChain("r2/ASDF/ASDF/ASDF")); 00035 EXPECT_FALSE(StringUtilities::isFullyQualifiedRoboDynChain("r2/ASDF_1/ASDF_1")); 00036 EXPECT_FALSE(StringUtilities::isFullyQualifiedRoboDynChain("r2/ASDF_1/ASDF_1/ASDF_1")); 00037 00038 EXPECT_TRUE(StringUtilities::isFullyQualifiedRoboDynJoint("r2/ASDF/ASDF")); 00039 EXPECT_TRUE(StringUtilities::isFullyQualifiedRoboDynJoint("r2/ASDF_1/ASDF_1")); 00040 EXPECT_FALSE(StringUtilities::isFullyQualifiedRoboDynJoint("ASDF")); 00041 EXPECT_FALSE(StringUtilities::isFullyQualifiedRoboDynJoint("/ASDF")); 00042 EXPECT_FALSE(StringUtilities::isFullyQualifiedRoboDynJoint("r2ASDF")); 00043 EXPECT_FALSE(StringUtilities::isFullyQualifiedRoboDynJoint("r2/ASDF")); 00044 EXPECT_FALSE(StringUtilities::isFullyQualifiedRoboDynJoint("r2/ASDF/")); 00045 EXPECT_FALSE(StringUtilities::isFullyQualifiedRoboDynJoint("r2/ASDF/ASDF/")); 00046 EXPECT_FALSE(StringUtilities::isFullyQualifiedRoboDynJoint("r2/ASDF/ASDF/ASDF")); 00047 00048 EXPECT_TRUE(StringUtilities::isFullyQualifiedRoboDynJointWithGroup("r2/ASDF/ASDF/ASDF")); 00049 EXPECT_TRUE(StringUtilities::isFullyQualifiedRoboDynJointWithGroup("r2/ASDF_1/ASDF_1/ASDF_1")); 00050 EXPECT_TRUE(StringUtilities::isFullyQualifiedRoboDynJointWithGroup("r2/ASDF/ASDF/ASDF/ASDAF")); 00051 EXPECT_TRUE(StringUtilities::isFullyQualifiedRoboDynJointWithGroup("r2/ASDF_1/ASDF_1/ASDF_1/ASDF_1")); 00052 EXPECT_FALSE(StringUtilities::isFullyQualifiedRoboDynJointWithGroup("ASDF")); 00053 EXPECT_FALSE(StringUtilities::isFullyQualifiedRoboDynJointWithGroup("/ASDF")); 00054 EXPECT_FALSE(StringUtilities::isFullyQualifiedRoboDynJointWithGroup("r2ASDF")); 00055 EXPECT_FALSE(StringUtilities::isFullyQualifiedRoboDynJointWithGroup("r2/ASDF")); 00056 EXPECT_FALSE(StringUtilities::isFullyQualifiedRoboDynJointWithGroup("r2/ASDF/")); 00057 EXPECT_FALSE(StringUtilities::isFullyQualifiedRoboDynJointWithGroup("r2/ASDF/ASDF/")); 00058 EXPECT_FALSE(StringUtilities::isFullyQualifiedRoboDynJointWithGroup("r2/ASDF/ASDF/ASDF/")); 00059 00060 EXPECT_TRUE(StringUtilities::isItemWithNumber("ASDF1")); 00061 EXPECT_TRUE(StringUtilities::isItemWithNumber("ASDF_1")); 00062 EXPECT_TRUE(StringUtilities::isItemWithNumber("/ASDF1")); 00063 EXPECT_FALSE(StringUtilities::isItemWithNumber("ASDF")); 00064 EXPECT_FALSE(StringUtilities::isItemWithNumber("ASDF1Z")); 00065 } 00066 00067 TEST(StringUtilitiesTest, Getters) 00068 { 00069 EXPECT_STREQ("ASDF_1", StringUtilities::getRobonetChannel("/ASDF_1/ZXCV_1").c_str()); 00070 EXPECT_STREQ("ASDF_1", StringUtilities::getRobonetChannel("/ASDF_1/ZXCV_1/QW.ER_1").c_str()); 00071 EXPECT_THROW(StringUtilities::getRobonetChannel("/ASDF"), std::runtime_error); 00072 EXPECT_THROW(StringUtilities::getRobonetChannel("/ASDF/"), std::runtime_error); 00073 EXPECT_THROW(StringUtilities::getRobonetChannel("/ASDF/ZXCV/"), std::runtime_error); 00074 00075 EXPECT_STREQ("ZXCV_1", StringUtilities::getRobonetNode("/ASDF_1/ZXCV_1").c_str()); 00076 EXPECT_STREQ("ZXCV_1", StringUtilities::getRobonetNode("/ASDF_1/ZXCV_1/QWER_1").c_str()); 00077 EXPECT_THROW(StringUtilities::getRobonetNode("/ASDF"), std::runtime_error); 00078 EXPECT_THROW(StringUtilities::getRobonetNode("/ASDF/"), std::runtime_error); 00079 EXPECT_THROW(StringUtilities::getRobonetNode("/ASDF/ZXCV/"), std::runtime_error); 00080 00081 EXPECT_STREQ("/ASDF_1/ZXCV_1", StringUtilities::getFullyQualifiedRobonetNode("/ASDF_1/ZXCV_1").c_str()); 00082 EXPECT_STREQ("/ASDF_1/ZXCV_1", StringUtilities::getFullyQualifiedRobonetNode("/ASDF_1/ZXCV_1/QW.ER_1").c_str()); 00083 EXPECT_THROW(StringUtilities::getFullyQualifiedRobonetNode("/ASDF"), std::runtime_error); 00084 EXPECT_THROW(StringUtilities::getFullyQualifiedRobonetNode("/ASDF/"), std::runtime_error); 00085 EXPECT_THROW(StringUtilities::getFullyQualifiedRobonetNode("/ASDF/ZXCV/"), std::runtime_error); 00086 00087 EXPECT_STREQ("QW.ER_1", StringUtilities::getRobonetElement("/ASDF_1/ZXCV_1/QW.ER_1").c_str()); 00088 EXPECT_THROW(StringUtilities::getRobonetElement("/ASDF"), std::runtime_error); 00089 EXPECT_THROW(StringUtilities::getRobonetElement("/ASDF/"), std::runtime_error); 00090 EXPECT_THROW(StringUtilities::getRobonetElement("/ASDF/ZXCV"), std::runtime_error); 00091 EXPECT_THROW(StringUtilities::getRobonetElement("/ASDF/ZXCV/"), std::runtime_error); 00092 00093 EXPECT_STREQ("ASDF_1", StringUtilities::getRoboDynChain("r2/ASDF_1").c_str()); 00094 EXPECT_STREQ("ASDF_1", StringUtilities::getRoboDynChain("r2/ASDF_1/ZXCV_1").c_str()); 00095 EXPECT_STREQ("ASDF_1", StringUtilities::getRoboDynChain("r2/ASDF_1/ZXCV_1/QWER_1").c_str()); 00096 EXPECT_THROW(StringUtilities::getRoboDynChain("ASDF"), std::runtime_error); 00097 EXPECT_THROW(StringUtilities::getRoboDynChain("/ASDF"), std::runtime_error); 00098 EXPECT_THROW(StringUtilities::getRoboDynChain("r2ASDF"), std::runtime_error); 00099 EXPECT_THROW(StringUtilities::getRoboDynChain("r2/ASDF/"), std::runtime_error); 00100 EXPECT_THROW(StringUtilities::getRoboDynChain("r2/ASDF/ASDF/"), std::runtime_error); 00101 00102 EXPECT_STREQ("/r2/ASDF_1", StringUtilities::getFullyQualifiedRoboDynChain("r2/ASDF_1").c_str()); 00103 EXPECT_STREQ("/r2/ASDF_1", StringUtilities::getFullyQualifiedRoboDynChain("r2/ASDF_1/ZXCV_1").c_str()); 00104 EXPECT_STREQ("/r2/ASDF_1", StringUtilities::getFullyQualifiedRoboDynChain("r2/ASDF_1/ZXCV_1/QWER_1").c_str()); 00105 EXPECT_THROW(StringUtilities::getFullyQualifiedRoboDynChain("ASDF"), std::runtime_error); 00106 EXPECT_THROW(StringUtilities::getFullyQualifiedRoboDynChain("/ASDF"), std::runtime_error); 00107 EXPECT_THROW(StringUtilities::getFullyQualifiedRoboDynChain("/r2ASDF"), std::runtime_error); 00108 EXPECT_THROW(StringUtilities::getFullyQualifiedRoboDynChain("/r2/ASDF/"), std::runtime_error); 00109 EXPECT_THROW(StringUtilities::getFullyQualifiedRoboDynChain("/r2/ASDF/ASDF/"), std::runtime_error); 00110 00111 EXPECT_STREQ("ZXCV_1", StringUtilities::getRoboDynJoint("r2/ASDF_1/ZXCV_1").c_str()); 00112 EXPECT_STREQ("QWER_1", StringUtilities::getRoboDynJoint("r2/ASDF_1/ZXCV_1/QWER_1").c_str()); 00113 EXPECT_THROW(StringUtilities::getRoboDynJoint("ASDF"), std::runtime_error); 00114 EXPECT_THROW(StringUtilities::getRoboDynJoint("/ASDF"), std::runtime_error); 00115 EXPECT_THROW(StringUtilities::getRoboDynJoint("r2ASDF"), std::runtime_error); 00116 EXPECT_THROW(StringUtilities::getRoboDynJoint("r2/ASDF"), std::runtime_error); 00117 EXPECT_THROW(StringUtilities::getRoboDynJoint("r2/ASDF/"), std::runtime_error); 00118 EXPECT_THROW(StringUtilities::getRoboDynJoint("r2/ASDF/ASDF/"), std::runtime_error); 00119 00120 EXPECT_STREQ("ZXCV_1", StringUtilities::getRoboDynJointGroup("r2/ASDF_1/ZXCV_1/QWER_1").c_str()); 00121 EXPECT_STREQ("ZXCV_1/QWER_1", StringUtilities::getRoboDynJointGroup("r2/ASDF_1/ZXCV_1/QWER_1/POIU_1").c_str()); 00122 EXPECT_THROW(StringUtilities::getRoboDynJointGroup("ASDF"), std::runtime_error); 00123 EXPECT_THROW(StringUtilities::getRoboDynJointGroup("/ASDF"), std::runtime_error); 00124 EXPECT_THROW(StringUtilities::getRoboDynJointGroup("r2ASDF"), std::runtime_error); 00125 EXPECT_THROW(StringUtilities::getRoboDynJointGroup("r2/ASDF"), std::runtime_error); 00126 EXPECT_THROW(StringUtilities::getRoboDynJointGroup("r2/ASDF/"), std::runtime_error); 00127 EXPECT_THROW(StringUtilities::getRoboDynJointGroup("r2/ASDF/ASDF"), std::runtime_error); 00128 EXPECT_THROW(StringUtilities::getRoboDynJointGroup("r2/ASDF/ASDF/"), std::runtime_error); 00129 EXPECT_THROW(StringUtilities::getRoboDynJointGroup("r2/ASDF/ASDF/ASDF/"), std::runtime_error); 00130 00131 EXPECT_STREQ("ZXCV_1/QWER_1", StringUtilities::getRoboDynJointWithGroup("r2/ASDF_1/ZXCV_1/QWER_1").c_str()); 00132 EXPECT_STREQ("ZXCV_1/QWER_1/POIU_1", StringUtilities::getRoboDynJointWithGroup("r2/ASDF_1/ZXCV_1/QWER_1/POIU_1").c_str()); 00133 EXPECT_THROW(StringUtilities::getRoboDynJointWithGroup("ASDF"), std::runtime_error); 00134 EXPECT_THROW(StringUtilities::getRoboDynJointWithGroup("/ASDF"), std::runtime_error); 00135 EXPECT_THROW(StringUtilities::getRoboDynJointWithGroup("r2ASDF"), std::runtime_error); 00136 EXPECT_THROW(StringUtilities::getRoboDynJointWithGroup("r2/ASDF"), std::runtime_error); 00137 EXPECT_THROW(StringUtilities::getRoboDynJointWithGroup("r2/ASDF/"), std::runtime_error); 00138 EXPECT_THROW(StringUtilities::getRoboDynJointWithGroup("r2/ASDF/ASDF"), std::runtime_error); 00139 EXPECT_THROW(StringUtilities::getRoboDynJointWithGroup("r2/ASDF/ASDF/"), std::runtime_error); 00140 EXPECT_THROW(StringUtilities::getRoboDynJointWithGroup("r2/ASDF/ASDF/ASDF/"), std::runtime_error); 00141 00142 EXPECT_STREQ("r2/ASDF_1", StringUtilities::getRoboDynEverythingButJoint("r2/ASDF_1/ZXCV_1").c_str()); 00143 EXPECT_STREQ("r2/ASDF_1/ZXCV_1", StringUtilities::getRoboDynEverythingButJoint("r2/ASDF_1/ZXCV_1/QWER_1").c_str()); 00144 EXPECT_THROW(StringUtilities::getRoboDynEverythingButJoint("ASDF"), std::runtime_error); 00145 EXPECT_THROW(StringUtilities::getRoboDynEverythingButJoint("/ASDF"), std::runtime_error); 00146 EXPECT_THROW(StringUtilities::getRoboDynEverythingButJoint("r2ASDF"), std::runtime_error); 00147 EXPECT_THROW(StringUtilities::getRoboDynEverythingButJoint("r2/ASDF"), std::runtime_error); 00148 EXPECT_THROW(StringUtilities::getRoboDynEverythingButJoint("r2/ASDF/"), std::runtime_error); 00149 EXPECT_THROW(StringUtilities::getRoboDynEverythingButJoint("r2/ASDF/ASDF/"), std::runtime_error); 00150 00151 EXPECT_STREQ("ASDF_", StringUtilities::getItem("ASDF_1").c_str()); 00152 EXPECT_STREQ("/ASDF_", StringUtilities::getItem("/ASDF_1").c_str()); 00153 00154 EXPECT_STREQ("1", StringUtilities::getNumber("ASDF_1").c_str()); 00155 EXPECT_STREQ("1", StringUtilities::getNumber("/ASDF_1").c_str()); 00156 } 00157 00158 TEST(StringUtilitiesTest, Makers) 00159 { 00160 EXPECT_STREQ("/ASDF_1/ZXCV_1", StringUtilities::makeFullyQualifiedRobonetNode("ASDF_1", "ZXCV_1").c_str()); 00161 EXPECT_THROW(StringUtilities::makeFullyQualifiedRobonetNode("", ""), std::runtime_error); 00162 EXPECT_THROW(StringUtilities::makeFullyQualifiedRobonetNode("ASDF_1", ""), std::runtime_error); 00163 EXPECT_THROW(StringUtilities::makeFullyQualifiedRobonetNode("", "ZXCV_1"), std::runtime_error); 00164 EXPECT_THROW(StringUtilities::makeFullyQualifiedRobonetNode("0.32", " "), std::runtime_error); 00165 00166 EXPECT_STREQ("/ASDF_1/ZXCV_1/QW.ER_1", StringUtilities::makeFullyQualifiedRobonetElement("/ASDF_1/ZXCV_1", "QW.ER_1").c_str()); 00167 EXPECT_THROW(StringUtilities::makeFullyQualifiedRobonetElement("", ""), std::runtime_error); 00168 EXPECT_THROW(StringUtilities::makeFullyQualifiedRobonetElement("ASDF_1", ""), std::runtime_error); 00169 EXPECT_THROW(StringUtilities::makeFullyQualifiedRobonetElement("", "ZXCV_1"), std::runtime_error); 00170 EXPECT_THROW(StringUtilities::makeFullyQualifiedRobonetElement("0.32", "~&#"), std::runtime_error); 00171 00172 EXPECT_STREQ("/ASDF_1/ZXCV_1/QW.ER_1", StringUtilities::makeFullyQualifiedRobonetElement("ASDF_1", "ZXCV_1", "QW.ER_1").c_str()); 00173 EXPECT_THROW(StringUtilities::makeFullyQualifiedRobonetElement("", "", ""), std::runtime_error); 00174 EXPECT_THROW(StringUtilities::makeFullyQualifiedRobonetElement("ASDF_1", "ZXCV_1", ""), std::runtime_error); 00175 EXPECT_THROW(StringUtilities::makeFullyQualifiedRobonetElement("ASDF_1", "", "QWER_1"), std::runtime_error); 00176 EXPECT_THROW(StringUtilities::makeFullyQualifiedRobonetElement("", "ZXCV_1", "QWER_1"), std::runtime_error); 00177 EXPECT_THROW(StringUtilities::makeFullyQualifiedRobonetElement("0.32", " ", "~&#"), std::runtime_error); 00178 00179 EXPECT_STREQ("r2/ASDF_1", StringUtilities::makeFullyQualifiedRoboDynChain("ASDF_1").c_str()); 00180 EXPECT_THROW(StringUtilities::makeFullyQualifiedRoboDynChain(""), std::runtime_error); 00181 EXPECT_THROW(StringUtilities::makeFullyQualifiedRoboDynChain("0.32"), std::runtime_error); 00182 EXPECT_THROW(StringUtilities::makeFullyQualifiedRoboDynChain("r2/ASDF"), std::runtime_error); 00183 00184 EXPECT_STREQ("r2/ASDF_1/ZXCV_1", StringUtilities::makeFullyQualifiedRoboDynJoint("ASDF_1", "ZXCV_1").c_str()); 00185 EXPECT_THROW(StringUtilities::makeFullyQualifiedRoboDynJoint("", ""), std::runtime_error); 00186 EXPECT_THROW(StringUtilities::makeFullyQualifiedRoboDynJoint("ASDF_1", ""), std::runtime_error); 00187 EXPECT_THROW(StringUtilities::makeFullyQualifiedRoboDynJoint("", "ZXCV_1"), std::runtime_error); 00188 EXPECT_THROW(StringUtilities::makeFullyQualifiedRoboDynJoint("0.32", " "), std::runtime_error); 00189 EXPECT_THROW(StringUtilities::makeFullyQualifiedRoboDynJoint("ASDF_1", "ZXCV_1/QWER_1"), std::runtime_error); 00190 00191 EXPECT_STREQ("r2/ASDF_1/ZXCV_1/QWER_1", StringUtilities::makeFullyQualifiedRoboDynJointWithGroup("ASDF_1", "ZXCV_1", "QWER_1").c_str()); 00192 EXPECT_STREQ("r2/ASDF_1/ZXCV_1/QWER_1/POIU_1", StringUtilities::makeFullyQualifiedRoboDynJointWithGroup("ASDF_1", "ZXCV_1", "QWER_1/POIU_1").c_str()); 00193 EXPECT_STREQ("r2/ASDF_1/ZXCV_1/QWER_1/POIU_1", StringUtilities::makeFullyQualifiedRoboDynJointWithGroup("ASDF_1", "ZXCV_1/QWER_1", "POIU_1").c_str()); 00194 EXPECT_THROW(StringUtilities::makeFullyQualifiedRoboDynJointWithGroup("", "", ""), std::runtime_error); 00195 EXPECT_THROW(StringUtilities::makeFullyQualifiedRoboDynJointWithGroup("ASDF_1", "", ""), std::runtime_error); 00196 EXPECT_THROW(StringUtilities::makeFullyQualifiedRoboDynJointWithGroup("", "ZXCV_1", ""), std::runtime_error); 00197 EXPECT_THROW(StringUtilities::makeFullyQualifiedRoboDynJointWithGroup("", "", "QWER_1"), std::runtime_error); 00198 EXPECT_THROW(StringUtilities::makeFullyQualifiedRoboDynJointWithGroup("0.32", " ", "!"), std::runtime_error); 00199 EXPECT_THROW(StringUtilities::makeFullyQualifiedRoboDynJointWithGroup("ASDF_1", "ZXCV_1/QWER_1", ""), std::runtime_error); 00200 00201 EXPECT_STREQ("r2/ASDF_1/ZXCV_1/QWER_1", StringUtilities::makeFullyQualifiedRoboDynElement("r2/ASDF_1/ZXCV_1", "QWER_1").c_str()); 00202 EXPECT_THROW(StringUtilities::makeFullyQualifiedRoboDynElement("", ""), std::runtime_error); 00203 EXPECT_THROW(StringUtilities::makeFullyQualifiedRoboDynElement("ASDF_1", ""), std::runtime_error); 00204 EXPECT_THROW(StringUtilities::makeFullyQualifiedRoboDynElement("", "ZXCV_1"), std::runtime_error); 00205 EXPECT_THROW(StringUtilities::makeFullyQualifiedRoboDynElement("0.32", " "), std::runtime_error); 00206 EXPECT_THROW(StringUtilities::makeFullyQualifiedRoboDynElement("ASDF_1", "ZXCV_1"), std::runtime_error); 00207 } 00208 00209 TEST(StringUtilitiesTest, ExampleConversionsSimple) 00210 { 00212 std::string standardRoboDynJoint = "r2/left_leg/joint0"; 00213 00214 std::string standardRoboDynJoint_chain = StringUtilities::getRoboDynChain(standardRoboDynJoint); 00215 std::string standardRoboDynJoint_joint = StringUtilities::getRoboDynJoint(standardRoboDynJoint); 00216 std::string standardRoboDynJoint_joint_item = StringUtilities::getItem(standardRoboDynJoint_joint); 00217 std::string standardRoboDynJoint_joint_number = StringUtilities::getNumber(standardRoboDynJoint_joint); 00218 EXPECT_STREQ("left_leg", standardRoboDynJoint_chain.c_str()); 00219 EXPECT_STREQ("joint0", standardRoboDynJoint_joint.c_str()); 00220 EXPECT_STREQ("joint", standardRoboDynJoint_joint_item.c_str()); 00221 EXPECT_STREQ("0", standardRoboDynJoint_joint_number.c_str()); 00222 00223 std::string convertedToRobonetNode = StringUtilities::makeFullyQualifiedRobonetNode(standardRoboDynJoint_chain, standardRoboDynJoint_joint); 00224 std::string convertedToRobonetElement = StringUtilities::makeFullyQualifiedRobonetElement(standardRoboDynJoint_chain, standardRoboDynJoint_joint, "PosCom"); 00225 EXPECT_STREQ("/left_leg/joint0", convertedToRobonetNode.c_str()); 00226 EXPECT_STREQ("/left_leg/joint0/PosCom", convertedToRobonetElement.c_str()); 00227 00228 std::string convertedToAlternateRoboDynJoint = StringUtilities::makeFullyQualifiedRoboDynJoint(standardRoboDynJoint_chain, "motor" + standardRoboDynJoint_joint_number); 00229 EXPECT_STREQ("r2/left_leg/motor0", convertedToAlternateRoboDynJoint.c_str()); 00230 00232 std::string standardRobonetNode = "/left_leg/joint0"; 00233 00234 std::string standardRobonetNode_channel = StringUtilities::getRobonetChannel(standardRobonetNode); 00235 std::string standardRobonetNode_node = StringUtilities::getRobonetNode(standardRobonetNode); 00236 EXPECT_STREQ("left_leg", standardRobonetNode_channel.c_str()); 00237 EXPECT_STREQ("joint0", standardRobonetNode_node.c_str()); 00238 00239 std::string convertedToRobonetElement_one = StringUtilities::makeFullyQualifiedRobonetElement(standardRobonetNode_channel, standardRobonetNode_node, "PosCom"); 00240 std::string convertedToRobonetElement_two = StringUtilities::makeFullyQualifiedRobonetElement(standardRobonetNode, "PosCom"); 00241 EXPECT_STREQ("/left_leg/joint0/PosCom", convertedToRobonetElement_one.c_str()); 00242 EXPECT_STREQ("/left_leg/joint0/PosCom", convertedToRobonetElement_two.c_str()); 00243 00244 std::string convertedToRoboDynJoint = StringUtilities::makeFullyQualifiedRoboDynJoint(standardRobonetNode_channel, standardRobonetNode_node); 00245 EXPECT_STREQ("r2/left_leg/joint0", convertedToRoboDynJoint.c_str()); 00246 } 00247 00248 TEST(StringUtilitiesTest, ExampleConversionsComplex) 00249 { 00251 std::string eeRoboDynJoint = "r2/left_leg/gripper/joint0"; 00252 00253 std::string eeRoboDynJoint_chain = StringUtilities::getRoboDynChain(eeRoboDynJoint); 00254 std::string eeRoboDynJoint_group = StringUtilities::getRoboDynJointGroup(eeRoboDynJoint); 00255 std::string eeRoboDynJoint_joint = StringUtilities::getRoboDynJoint(eeRoboDynJoint); 00256 std::string eeRoboDynJoint_joint_item = StringUtilities::getItem(eeRoboDynJoint_joint); 00257 std::string eeRoboDynJoint_joint_number = StringUtilities::getNumber(eeRoboDynJoint_joint); 00258 EXPECT_STREQ("left_leg", eeRoboDynJoint_chain.c_str()); 00259 EXPECT_STREQ("gripper", eeRoboDynJoint_group.c_str()); 00260 EXPECT_STREQ("joint0", eeRoboDynJoint_joint.c_str()); 00261 EXPECT_STREQ("joint", eeRoboDynJoint_joint_item.c_str()); 00262 EXPECT_STREQ("0", eeRoboDynJoint_joint_number.c_str()); 00263 00265 std::string convertedToRobonetNode = StringUtilities::makeFullyQualifiedRobonetNode(eeRoboDynJoint_chain, eeRoboDynJoint_joint_item + "7"); 00266 std::string convertedToRobonetElement = StringUtilities::makeFullyQualifiedRobonetElement(eeRoboDynJoint_chain, eeRoboDynJoint_joint_item + "7", "PosCom"); 00267 EXPECT_STREQ("/left_leg/joint7", convertedToRobonetNode.c_str()); 00268 EXPECT_STREQ("/left_leg/joint7/PosCom", convertedToRobonetElement.c_str()); 00269 00271 std::string eeRobonetElement = "/left_leg/joint7/PosCom"; 00272 00273 std::string eeRobonetElement_channel = StringUtilities::getRobonetChannel(eeRobonetElement); 00274 std::string eeRobonetElement_node = StringUtilities::getRobonetNode(eeRobonetElement); 00275 std::string eeRobonetElement_node_item = StringUtilities::getItem(eeRobonetElement_node); 00276 std::string eeRobonetElement_node_number = StringUtilities::getNumber(eeRobonetElement_node); 00277 EXPECT_STREQ("left_leg", eeRobonetElement_channel.c_str()); 00278 EXPECT_STREQ("joint7", eeRobonetElement_node.c_str()); 00279 EXPECT_STREQ("joint", eeRobonetElement_node_item.c_str()); 00280 EXPECT_STREQ("7", eeRobonetElement_node_number.c_str()); 00281 00283 std::string convertedToEERoboDynJoint = StringUtilities::makeFullyQualifiedRoboDynJointWithGroup(eeRobonetElement_channel, "gripper", eeRobonetElement_node_item + "0"); 00284 std::string convertedToAlternateEERoboDynJoint = StringUtilities::makeFullyQualifiedRoboDynJointWithGroup(eeRobonetElement_channel, "gripper", "jaw0"); 00285 EXPECT_STREQ("r2/left_leg/gripper/joint0", convertedToEERoboDynJoint.c_str()); 00286 EXPECT_STREQ("r2/left_leg/gripper/jaw0", convertedToAlternateEERoboDynJoint.c_str()); 00287 } 00288 00289 TEST(StringUtilitiesTest, ExamplePullOffCommandMessage) 00290 { 00291 std::string commandMsg = "r2/left_leg/joint0/safe"; 00292 std::string chain = StringUtilities::getRoboDynChain(commandMsg); 00293 std::string jointWithGroup = StringUtilities::getRoboDynJointGroup(commandMsg); 00294 std::string command = StringUtilities::getRoboDynJoint(commandMsg); 00295 std::string node = StringUtilities::makeFullyQualifiedRoboDynJointGroup(chain, jointWithGroup); 00296 00297 EXPECT_TRUE(command.compare("safe") == 0); 00298 EXPECT_TRUE(node.compare("r2/left_leg/joint0") == 0); 00299 00300 commandMsg = "r2/left_leg/gripper/joint0/safe"; 00301 chain = StringUtilities::getRoboDynChain(commandMsg); 00302 jointWithGroup = StringUtilities::getRoboDynJointGroup(commandMsg); 00303 command = StringUtilities::getRoboDynJoint(commandMsg); 00304 node = StringUtilities::makeFullyQualifiedRoboDynJointGroup(chain, jointWithGroup); 00305 00306 EXPECT_TRUE(command.compare("safe") == 0); 00307 EXPECT_TRUE(node.compare("r2/left_leg/gripper/joint0") == 0); 00308 } 00309 00310 int main(int argc, char** argv) 00311 { 00312 testing::InitGoogleTest(&argc, argv); 00313 return RUN_ALL_TESTS(); 00314 }