9 #include "gtest/gtest.h"
18 #include <std_msgs/Bool.h>
19 #include <std_msgs/Header.h>
20 #include <std_msgs/String.h>
21 #include <geometry_msgs/Point.h>
22 #include <geometry_msgs/PointStamped.h>
24 TEST(ShapeShifter, MsgToShapeShifter)
27 geometry_msgs::PointStamped
msg;
28 msg.header.stamp.sec = 1;
29 msg.header.stamp.nsec = 2;
30 msg.header.frame_id =
"test";
39 ASSERT_NO_THROW(shifter.
instantiate<geometry_msgs::PointStamped>());
40 const auto msg2 = *shifter.
instantiate<geometry_msgs::PointStamped>();
45 ASSERT_NO_THROW(shifter2.instantiate<geometry_msgs::PointStamped>());
46 const auto msg3 = *shifter2.instantiate<geometry_msgs::PointStamped>();
57 EXPECT_EQ(msg2, msg3);
60 TEST(ShapeShifter, GetBuffer)
63 geometry_msgs::PointStamped
msg;
64 msg.header.stamp.sec = 1;
65 msg.header.stamp.nsec = 2;
66 msg.header.frame_id =
"test";
76 std::vector<uint8_t> buf;
83 for (
size_t i = 0; i <
length; ++i)
87 EXPECT_EQ(
msg, *shifter.
instantiate<geometry_msgs::PointStamped>());
90 TEST(ShapeShifter, GetHeaderPointStamped)
93 geometry_msgs::PointStamped
msg;
94 msg.header.stamp.sec = 1;
95 msg.header.stamp.nsec = 2;
96 msg.header.frame_id =
"test";
108 ASSERT_TRUE(
header.has_value());
112 TEST(ShapeShifter, GetHeaderPoint)
115 geometry_msgs::Point
msg;
132 TEST(ShapeShifter, GetHeaderFromHeader)
135 std_msgs::Header
msg;
138 msg.frame_id =
"test";
147 ASSERT_TRUE(
header.has_value());
151 TEST(ShapeShifter, GetHeaderFromBool)
164 EXPECT_FALSE(
header.has_value());
167 TEST(ShapeShifter, GetHeaderFromLongString)
170 std_msgs::String
msg;
171 msg.data =
"123456789012345678901234567890";
180 EXPECT_FALSE(
header.has_value());
183 TEST(ShapeShifter, GetHeaderFromFakeString)
186 std_msgs::String
msg;
187 msg.data = std::string(22,
'\x00');
196 ASSERT_TRUE(
header.has_value());
197 std_msgs::Header fakeHeader;
198 fakeHeader.seq =
msg.data.size();
199 EXPECT_EQ(fakeHeader,
header.value());
202 TEST(ShapeShifter, SetHeaderSameLength)
205 geometry_msgs::PointStamped
msg;
206 msg.header.stamp.sec = 1;
207 msg.header.stamp.nsec = 2;
208 msg.header.frame_id =
"test";
212 const auto origMsg =
msg;
218 auto newHeader =
msg.header;
219 newHeader.frame_id =
"abcd";
223 ASSERT_TRUE(decodedHeader.has_value());
224 EXPECT_EQ(newHeader, decodedHeader.value());
226 const auto newMsg = shifter.
instantiate<geometry_msgs::PointStamped>();
227 EXPECT_EQ(newHeader, newMsg->header);
228 EXPECT_EQ(origMsg.point, newMsg->point);
231 TEST(ShapeShifter, SetHeaderShorter)
234 geometry_msgs::PointStamped
msg;
235 msg.header.stamp.sec = 1;
236 msg.header.stamp.nsec = 2;
237 msg.header.frame_id =
"test";
241 const auto origMsg =
msg;
247 auto newHeader =
msg.header;
248 newHeader.frame_id =
"ab";
252 ASSERT_TRUE(decodedHeader.has_value());
253 EXPECT_EQ(newHeader, decodedHeader.value());
255 const auto newMsg = shifter.
instantiate<geometry_msgs::PointStamped>();
256 EXPECT_EQ(newHeader, newMsg->header);
257 EXPECT_EQ(origMsg.point, newMsg->point);
260 TEST(ShapeShifter, SetHeaderLonger)
263 geometry_msgs::PointStamped
msg;
264 msg.header.stamp.sec = 1;
265 msg.header.stamp.nsec = 2;
266 msg.header.frame_id =
"test";
270 const auto origMsg =
msg;
276 auto newHeader =
msg.header;
277 newHeader.frame_id =
"abcdefgh";
281 ASSERT_TRUE(decodedHeader.has_value());
282 EXPECT_EQ(newHeader, decodedHeader.value());
284 const auto newMsg = shifter.
instantiate<geometry_msgs::PointStamped>();
285 EXPECT_EQ(newHeader, newMsg->header);
286 EXPECT_EQ(origMsg.point, newMsg->point);
289 TEST(ShapeShifter, CopyShapeShifter)
292 geometry_msgs::PointStamped
msg;
293 msg.header.stamp.sec = 1;
294 msg.header.stamp.nsec = 2;
295 msg.header.frame_id =
"test";
299 const auto origMsg =
msg;
309 EXPECT_EQ(*shifter.
instantiate<geometry_msgs::PointStamped>(), *shifter2.
instantiate<geometry_msgs::PointStamped>());
313 TEST(ShapeShifter, CopyCrasShapeShifter)
316 geometry_msgs::PointStamped
msg;
317 msg.header.stamp.sec = 1;
318 msg.header.stamp.nsec = 2;
319 msg.header.frame_id =
"test";
323 const auto origMsg =
msg;
333 EXPECT_EQ(*shifter.
instantiate<geometry_msgs::PointStamped>(), *shifter2.
instantiate<geometry_msgs::PointStamped>());
337 shifter3 = std::move(shifter2);
339 EXPECT_EQ(*shifter.
instantiate<geometry_msgs::PointStamped>(), *shifter3.
instantiate<geometry_msgs::PointStamped>());
343 TEST(ShapeShifter, MessageTraits)
346 geometry_msgs::PointStamped
msg;
347 msg.header.stamp.sec = 1;
348 msg.header.stamp.nsec = 2;
349 msg.header.frame_id =
"test";
360 EXPECT_STREQ(mt::datatype(
msg), mt::datatype(shifter));
361 EXPECT_STREQ(mt::definition(
msg), mt::definition(shifter));
362 EXPECT_STREQ(mt::md5sum(
msg), mt::md5sum(shifter));
365 EXPECT_EQ(
true, +mt::IsMessage<cras::ShapeShifter>::value);
366 EXPECT_EQ(
false, +mt::IsSimple<cras::ShapeShifter>::value);
367 EXPECT_EQ(
false, +mt::IsFixedSize<cras::ShapeShifter>::value);
368 EXPECT_EQ(
false, +mt::HasHeader<cras::ShapeShifter>::value);
371 int main(
int argc,
char **argv)
373 testing::InitGoogleTest(&argc, argv);
374 return RUN_ALL_TESTS();