00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #include <gtest/gtest.h>
00037 #include "test_roscpp_serialization/helpers.h"
00038 #include "test_roscpp_serialization/ArrayOfFixedLength.h"
00039 #include "test_roscpp_serialization/ArrayOfVariableLength.h"
00040 #include "test_roscpp_serialization/EmbeddedFixedLength.h"
00041 #include "test_roscpp_serialization/EmbeddedVariableLength.h"
00042 #include "test_roscpp_serialization/FixedLength.h"
00043 #include "test_roscpp_serialization/VariableLength.h"
00044 #include "test_roscpp_serialization/WithHeader.h"
00045 #include "test_roscpp_serialization/EmbeddedExternal.h"
00046 #include "test_roscpp_serialization/WithTime.h"
00047 #include "test_roscpp_serialization/WithDuration.h"
00048 #include "test_roscpp_serialization/WithMemberNamedHeaderThatIsNotAHeader.h"
00049 #include "test_roscpp_serialization/FixedLengthArrayOfExternal.h"
00050 #include "test_roscpp_serialization/VariableLengthArrayOfExternal.h"
00051 #include "test_roscpp_serialization/Constants.h"
00052 #include "test_roscpp_serialization/VariableLengthStringArray.h"
00053 #include "test_roscpp_serialization/FixedLengthStringArray.h"
00054 #include "test_roscpp_serialization/HeaderNotFirstMember.h"
00055
00056 using namespace test_roscpp_serialization;
00057
00058 namespace test_roscpp_serialization
00059 {
00060 ROS_DECLARE_MESSAGE_WITH_ALLOCATOR(ArrayOfFixedLength, MyArrayOfFixedLength, Allocator);
00061 ROS_DECLARE_MESSAGE_WITH_ALLOCATOR(ArrayOfVariableLength, MyArrayOfVariableLength, Allocator);
00062 ROS_DECLARE_MESSAGE_WITH_ALLOCATOR(EmbeddedFixedLength, MyEmbeddedFixedLength, Allocator);
00063 ROS_DECLARE_MESSAGE_WITH_ALLOCATOR(EmbeddedVariableLength, MyEmbeddedVariableLength, Allocator);
00064 ROS_DECLARE_MESSAGE_WITH_ALLOCATOR(FixedLength, MyFixedLength, Allocator);
00065 ROS_DECLARE_MESSAGE_WITH_ALLOCATOR(VariableLength, MyVariableLength, Allocator);
00066 ROS_DECLARE_MESSAGE_WITH_ALLOCATOR(WithHeader, MyWithHeader, Allocator);
00067 ROS_DECLARE_MESSAGE_WITH_ALLOCATOR(EmbeddedExternal, MyEmbeddedExternal, Allocator);
00068 ROS_DECLARE_MESSAGE_WITH_ALLOCATOR(WithTime, MyWithTime, Allocator);
00069 ROS_DECLARE_MESSAGE_WITH_ALLOCATOR(WithDuration, MyWithDuration, Allocator);
00070 ROS_DECLARE_MESSAGE_WITH_ALLOCATOR(WithMemberNamedHeaderThatIsNotAHeader, MyWithMemberNamedHeaderThatIsNotAHeader, Allocator);
00071 ROS_DECLARE_MESSAGE_WITH_ALLOCATOR(FixedLengthArrayOfExternal, MyFixedLengthArrayOfExternal, Allocator);
00072 ROS_DECLARE_MESSAGE_WITH_ALLOCATOR(VariableLengthArrayOfExternal, MyVariableLengthArrayOfExternal, Allocator);
00073 ROS_DECLARE_MESSAGE_WITH_ALLOCATOR(FixedLengthStringArray, MyFixedLengthStringArray, Allocator);
00074 ROS_DECLARE_MESSAGE_WITH_ALLOCATOR(VariableLengthStringArray, MyVariableLengthStringArray, Allocator);
00075 }
00076
00077 TEST(GeneratedMessages, traitsWithStandardMessages)
00078 {
00079 EXPECT_TRUE(mt::isFixedSize<ArrayOfFixedLength>());
00080 EXPECT_FALSE(mt::isFixedSize<ArrayOfVariableLength>());
00081 EXPECT_TRUE(mt::isFixedSize<EmbeddedFixedLength>());
00082 EXPECT_FALSE(mt::isFixedSize<EmbeddedVariableLength>());
00083 EXPECT_TRUE(mt::isFixedSize<FixedLength>());
00084 EXPECT_FALSE(mt::isFixedSize<VariableLength>());
00085 EXPECT_FALSE(mt::isFixedSize<WithHeader>());
00086 EXPECT_TRUE(mt::isFixedSize<EmbeddedExternal>());
00087 EXPECT_TRUE(mt::isFixedSize<WithTime>());
00088 EXPECT_TRUE(mt::isFixedSize<WithDuration>());
00089 EXPECT_TRUE(mt::isFixedSize<WithMemberNamedHeaderThatIsNotAHeader>());
00090 EXPECT_FALSE(mt::isFixedSize<FixedLengthArrayOfExternal>());
00091 EXPECT_FALSE(mt::isFixedSize<VariableLengthArrayOfExternal>());
00092 EXPECT_FALSE(mt::isFixedSize<FixedLengthStringArray>());
00093 EXPECT_FALSE(mt::isFixedSize<VariableLengthStringArray>());
00094
00095 EXPECT_FALSE(mt::hasHeader<ArrayOfFixedLength>());
00096 EXPECT_FALSE(mt::hasHeader<ArrayOfVariableLength>());
00097 EXPECT_FALSE(mt::hasHeader<EmbeddedFixedLength>());
00098 EXPECT_FALSE(mt::hasHeader<EmbeddedVariableLength>());
00099 EXPECT_FALSE(mt::hasHeader<FixedLength>());
00100 EXPECT_FALSE(mt::hasHeader<VariableLength>());
00101 EXPECT_TRUE(mt::hasHeader<WithHeader>());
00102 EXPECT_FALSE(mt::hasHeader<EmbeddedExternal>());
00103 EXPECT_FALSE(mt::hasHeader<WithTime>());
00104 EXPECT_FALSE(mt::hasHeader<WithDuration>());
00105 EXPECT_FALSE(mt::hasHeader<WithMemberNamedHeaderThatIsNotAHeader>());
00106 EXPECT_FALSE(mt::hasHeader<FixedLengthArrayOfExternal>());
00107 EXPECT_FALSE(mt::hasHeader<VariableLengthArrayOfExternal>());
00108 EXPECT_FALSE(mt::hasHeader<FixedLengthStringArray>());
00109 EXPECT_FALSE(mt::hasHeader<VariableLengthStringArray>());
00110 EXPECT_FALSE(mt::hasHeader<HeaderNotFirstMember>());
00111
00112 EXPECT_FALSE(mt::isSimple<ArrayOfFixedLength>());
00113 EXPECT_FALSE(mt::isSimple<ArrayOfVariableLength>());
00114 EXPECT_FALSE(mt::isSimple<EmbeddedFixedLength>());
00115 EXPECT_FALSE(mt::isSimple<EmbeddedVariableLength>());
00116 EXPECT_FALSE(mt::isSimple<FixedLength>());
00117 EXPECT_FALSE(mt::isSimple<VariableLength>());
00118 EXPECT_FALSE(mt::isSimple<WithHeader>());
00119 EXPECT_FALSE(mt::isSimple<EmbeddedExternal>());
00120 EXPECT_FALSE(mt::isSimple<WithTime>());
00121 EXPECT_FALSE(mt::isSimple<WithDuration>());
00122 EXPECT_FALSE(mt::isSimple<WithMemberNamedHeaderThatIsNotAHeader>());
00123 EXPECT_FALSE(mt::isSimple<FixedLengthArrayOfExternal>());
00124 EXPECT_FALSE(mt::isSimple<VariableLengthArrayOfExternal>());
00125 EXPECT_FALSE(mt::isSimple<FixedLengthStringArray>());
00126 EXPECT_FALSE(mt::isSimple<VariableLengthStringArray>());
00127 }
00128
00129 TEST(GeneratedMessages, traitsWithCustomAllocator)
00130 {
00131 EXPECT_TRUE(mt::isFixedSize<MyArrayOfFixedLength>());
00132 EXPECT_FALSE(mt::isFixedSize<MyArrayOfVariableLength>());
00133 EXPECT_TRUE(mt::isFixedSize<MyEmbeddedFixedLength>());
00134 EXPECT_FALSE(mt::isFixedSize<MyEmbeddedVariableLength>());
00135 EXPECT_TRUE(mt::isFixedSize<MyFixedLength>());
00136 EXPECT_FALSE(mt::isFixedSize<MyVariableLength>());
00137 EXPECT_FALSE(mt::isFixedSize<MyWithHeader>());
00138 EXPECT_TRUE(mt::isFixedSize<MyEmbeddedExternal>());
00139 EXPECT_TRUE(mt::isFixedSize<MyWithTime>());
00140 EXPECT_TRUE(mt::isFixedSize<MyWithDuration>());
00141 EXPECT_TRUE(mt::isFixedSize<MyWithMemberNamedHeaderThatIsNotAHeader>());
00142 EXPECT_FALSE(mt::isFixedSize<MyFixedLengthArrayOfExternal>());
00143 EXPECT_FALSE(mt::isFixedSize<MyVariableLengthArrayOfExternal>());
00144 EXPECT_FALSE(mt::isFixedSize<MyFixedLengthStringArray>());
00145 EXPECT_FALSE(mt::isFixedSize<MyVariableLengthStringArray>());
00146
00147 EXPECT_FALSE(mt::hasHeader<MyArrayOfFixedLength>());
00148 EXPECT_FALSE(mt::hasHeader<MyArrayOfVariableLength>());
00149 EXPECT_FALSE(mt::hasHeader<MyEmbeddedFixedLength>());
00150 EXPECT_FALSE(mt::hasHeader<MyEmbeddedVariableLength>());
00151 EXPECT_FALSE(mt::hasHeader<MyFixedLength>());
00152 EXPECT_FALSE(mt::hasHeader<MyVariableLength>());
00153 EXPECT_TRUE(mt::hasHeader<MyWithHeader>());
00154 EXPECT_FALSE(mt::hasHeader<MyEmbeddedExternal>());
00155 EXPECT_FALSE(mt::hasHeader<MyWithTime>());
00156 EXPECT_FALSE(mt::hasHeader<MyWithDuration>());
00157 EXPECT_FALSE(mt::hasHeader<MyWithMemberNamedHeaderThatIsNotAHeader>());
00158 EXPECT_FALSE(mt::hasHeader<MyFixedLengthArrayOfExternal>());
00159 EXPECT_FALSE(mt::hasHeader<MyVariableLengthArrayOfExternal>());
00160 EXPECT_FALSE(mt::hasHeader<MyFixedLengthStringArray>());
00161 EXPECT_FALSE(mt::hasHeader<MyVariableLengthStringArray>());
00162
00163 EXPECT_FALSE(mt::isSimple<MyArrayOfFixedLength>());
00164 EXPECT_FALSE(mt::isSimple<MyArrayOfVariableLength>());
00165 EXPECT_FALSE(mt::isSimple<MyEmbeddedFixedLength>());
00166 EXPECT_FALSE(mt::isSimple<MyEmbeddedVariableLength>());
00167 EXPECT_FALSE(mt::isSimple<MyFixedLength>());
00168 EXPECT_FALSE(mt::isSimple<MyVariableLength>());
00169 EXPECT_FALSE(mt::isSimple<MyWithHeader>());
00170 EXPECT_FALSE(mt::isSimple<MyEmbeddedExternal>());
00171 EXPECT_FALSE(mt::isSimple<MyWithTime>());
00172 EXPECT_FALSE(mt::isSimple<MyWithDuration>());
00173 EXPECT_FALSE(mt::isSimple<MyWithMemberNamedHeaderThatIsNotAHeader>());
00174 EXPECT_FALSE(mt::isSimple<MyFixedLengthArrayOfExternal>());
00175 EXPECT_FALSE(mt::isSimple<MyVariableLengthArrayOfExternal>());
00176 EXPECT_FALSE(mt::isSimple<MyFixedLengthStringArray>());
00177 EXPECT_FALSE(mt::isSimple<MyVariableLengthStringArray>());
00178 }
00179
00180 #define SERIALIZATION_COMPILATION_TEST(Type) \
00181 TEST(GeneratedMessages, serialization_##Type) \
00182 { \
00183 Type ser_val, deser_val; \
00184 serializeAndDeserialize(ser_val, deser_val); \
00185 }
00186
00187 SERIALIZATION_COMPILATION_TEST(ArrayOfFixedLength);
00188 SERIALIZATION_COMPILATION_TEST(ArrayOfVariableLength);
00189 SERIALIZATION_COMPILATION_TEST(EmbeddedFixedLength);
00190 SERIALIZATION_COMPILATION_TEST(EmbeddedVariableLength);
00191 SERIALIZATION_COMPILATION_TEST(FixedLength);
00192 SERIALIZATION_COMPILATION_TEST(VariableLength);
00193 SERIALIZATION_COMPILATION_TEST(WithHeader);
00194 SERIALIZATION_COMPILATION_TEST(EmbeddedExternal);
00195 SERIALIZATION_COMPILATION_TEST(WithTime);
00196 SERIALIZATION_COMPILATION_TEST(WithDuration);
00197 SERIALIZATION_COMPILATION_TEST(WithMemberNamedHeaderThatIsNotAHeader);
00198 SERIALIZATION_COMPILATION_TEST(FixedLengthArrayOfExternal);
00199 SERIALIZATION_COMPILATION_TEST(VariableLengthArrayOfExternal);
00200 SERIALIZATION_COMPILATION_TEST(FixedLengthStringArray);
00201 SERIALIZATION_COMPILATION_TEST(VariableLengthStringArray);
00202
00203 SERIALIZATION_COMPILATION_TEST(MyArrayOfFixedLength);
00204 SERIALIZATION_COMPILATION_TEST(MyArrayOfVariableLength);
00205 SERIALIZATION_COMPILATION_TEST(MyEmbeddedFixedLength);
00206 SERIALIZATION_COMPILATION_TEST(MyEmbeddedVariableLength);
00207 SERIALIZATION_COMPILATION_TEST(MyFixedLength);
00208 SERIALIZATION_COMPILATION_TEST(MyVariableLength);
00209 SERIALIZATION_COMPILATION_TEST(MyWithHeader);
00210 SERIALIZATION_COMPILATION_TEST(MyEmbeddedExternal);
00211 SERIALIZATION_COMPILATION_TEST(MyWithTime);
00212 SERIALIZATION_COMPILATION_TEST(MyWithDuration);
00213 SERIALIZATION_COMPILATION_TEST(MyWithMemberNamedHeaderThatIsNotAHeader);
00214 SERIALIZATION_COMPILATION_TEST(MyFixedLengthArrayOfExternal);
00215 SERIALIZATION_COMPILATION_TEST(MyVariableLengthArrayOfExternal);
00216 SERIALIZATION_COMPILATION_TEST(MyFixedLengthStringArray);
00217 SERIALIZATION_COMPILATION_TEST(MyVariableLengthStringArray);
00218
00219 #define ALLOCATOR_CONSTRUCTOR_COMPILATION_TEST(Type, Allocator) \
00220 TEST(GeneratedMessages, allocationConstructor_##Type) \
00221 { \
00222 Allocator a; \
00223 Type val(a); \
00224 }
00225
00226 ALLOCATOR_CONSTRUCTOR_COMPILATION_TEST(ArrayOfFixedLength, std::allocator<void>);
00227 ALLOCATOR_CONSTRUCTOR_COMPILATION_TEST(ArrayOfVariableLength, std::allocator<void>);
00228 ALLOCATOR_CONSTRUCTOR_COMPILATION_TEST(EmbeddedFixedLength, std::allocator<void>);
00229 ALLOCATOR_CONSTRUCTOR_COMPILATION_TEST(EmbeddedVariableLength, std::allocator<void>);
00230 ALLOCATOR_CONSTRUCTOR_COMPILATION_TEST(FixedLength, std::allocator<void>);
00231 ALLOCATOR_CONSTRUCTOR_COMPILATION_TEST(VariableLength, std::allocator<void>);
00232 ALLOCATOR_CONSTRUCTOR_COMPILATION_TEST(WithHeader, std::allocator<void>);
00233 ALLOCATOR_CONSTRUCTOR_COMPILATION_TEST(EmbeddedExternal, std::allocator<void>);
00234 ALLOCATOR_CONSTRUCTOR_COMPILATION_TEST(WithTime, std::allocator<void>);
00235 ALLOCATOR_CONSTRUCTOR_COMPILATION_TEST(WithDuration, std::allocator<void>);
00236 ALLOCATOR_CONSTRUCTOR_COMPILATION_TEST(WithMemberNamedHeaderThatIsNotAHeader, std::allocator<void>);
00237 ALLOCATOR_CONSTRUCTOR_COMPILATION_TEST(FixedLengthArrayOfExternal, std::allocator<void>);
00238 ALLOCATOR_CONSTRUCTOR_COMPILATION_TEST(VariableLengthArrayOfExternal, std::allocator<void>);
00239 ALLOCATOR_CONSTRUCTOR_COMPILATION_TEST(FixedLengthStringArray, std::allocator<void>);
00240 ALLOCATOR_CONSTRUCTOR_COMPILATION_TEST(VariableLengthStringArray, std::allocator<void>);
00241
00242 ALLOCATOR_CONSTRUCTOR_COMPILATION_TEST(MyArrayOfFixedLength, Allocator<void>);
00243 ALLOCATOR_CONSTRUCTOR_COMPILATION_TEST(MyArrayOfVariableLength, Allocator<void>);
00244 ALLOCATOR_CONSTRUCTOR_COMPILATION_TEST(MyEmbeddedFixedLength, Allocator<void>);
00245 ALLOCATOR_CONSTRUCTOR_COMPILATION_TEST(MyEmbeddedVariableLength, Allocator<void>);
00246 ALLOCATOR_CONSTRUCTOR_COMPILATION_TEST(MyFixedLength, Allocator<void>);
00247 ALLOCATOR_CONSTRUCTOR_COMPILATION_TEST(MyVariableLength, Allocator<void>);
00248 ALLOCATOR_CONSTRUCTOR_COMPILATION_TEST(MyWithHeader, Allocator<void>);
00249 ALLOCATOR_CONSTRUCTOR_COMPILATION_TEST(MyEmbeddedExternal, Allocator<void>);
00250 ALLOCATOR_CONSTRUCTOR_COMPILATION_TEST(MyWithTime, Allocator<void>);
00251 ALLOCATOR_CONSTRUCTOR_COMPILATION_TEST(MyWithDuration, Allocator<void>);
00252 ALLOCATOR_CONSTRUCTOR_COMPILATION_TEST(MyWithMemberNamedHeaderThatIsNotAHeader, Allocator<void>);
00253 ALLOCATOR_CONSTRUCTOR_COMPILATION_TEST(MyFixedLengthArrayOfExternal, Allocator<void>);
00254 ALLOCATOR_CONSTRUCTOR_COMPILATION_TEST(MyVariableLengthArrayOfExternal, Allocator<void>);
00255 ALLOCATOR_CONSTRUCTOR_COMPILATION_TEST(MyFixedLengthStringArray, Allocator<void>);
00256 ALLOCATOR_CONSTRUCTOR_COMPILATION_TEST(MyVariableLengthStringArray, Allocator<void>);
00257
00258 TEST(Generated, serializationOStreamOperator)
00259 {
00260 using namespace ros::serialization;
00261 Array b(new uint8_t[8]);
00262 OStream ostream(b.get(), 8);
00263 FixedLength m;
00264 ostream << m;
00265 ASSERT_EQ(ostream.getLength(), 0UL);
00266 }
00267
00268 TEST(Generated, constants)
00269 {
00270 EXPECT_EQ(Constants::a, 1U);
00271 EXPECT_EQ(Constants::b, 2);
00272 EXPECT_EQ(Constants::c, 3U);
00273 EXPECT_EQ(Constants::d, 4);
00274 EXPECT_EQ(Constants::e, 5U);
00275 EXPECT_EQ(Constants::f, 6);
00276 EXPECT_EQ(Constants::g, 7U);
00277 EXPECT_EQ(Constants::h, 8);
00278 EXPECT_FLOAT_EQ(Constants::fa, 1.5);
00279 EXPECT_FLOAT_EQ(Constants::fb, 40.9);
00280 EXPECT_STREQ(Constants::str.c_str(), "hello there");
00281 EXPECT_STREQ(Constants::str2.c_str(), "this string has \"quotes\" and \\slashes\\ in it");
00282 }
00283
00284 int main(int argc, char** argv)
00285 {
00286 testing::InitGoogleTest(&argc, argv);
00287 return RUN_ALL_TESTS();
00288 }
00289
00290
00291