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/PointStamped.h> 23 TEST(ShapeShifter, MsgToShapeShifter)
26 geometry_msgs::PointStamped
msg;
27 msg.header.stamp.sec = 1;
28 msg.header.stamp.nsec = 2;
29 msg.header.frame_id =
"test";
38 ASSERT_NO_THROW(shifter.
instantiate<geometry_msgs::PointStamped>());
39 const auto msg2 = *shifter.
instantiate<geometry_msgs::PointStamped>();
44 ASSERT_NO_THROW(shifter2.instantiate<geometry_msgs::PointStamped>());
45 const auto msg3 = *shifter2.instantiate<geometry_msgs::PointStamped>();
56 EXPECT_EQ(msg2, msg3);
59 TEST(ShapeShifter, GetBuffer)
62 geometry_msgs::PointStamped
msg;
63 msg.header.stamp.sec = 1;
64 msg.header.stamp.nsec = 2;
65 msg.header.frame_id =
"test";
75 std::vector<uint8_t> buf;
82 for (
size_t i = 0; i <
length; ++i)
86 EXPECT_EQ(msg, *shifter.
instantiate<geometry_msgs::PointStamped>());
89 TEST(ShapeShifter, GetHeaderOK)
92 geometry_msgs::PointStamped
msg;
93 msg.header.stamp.sec = 1;
94 msg.header.stamp.nsec = 2;
95 msg.header.frame_id =
"test";
105 ASSERT_TRUE(
header.has_value());
106 EXPECT_EQ(msg.header,
header.value());
109 TEST(ShapeShifter, GetHeaderFromHeader)
112 std_msgs::Header
msg;
115 msg.frame_id =
"test";
122 ASSERT_TRUE(
header.has_value());
123 EXPECT_EQ(msg,
header.value());
126 TEST(ShapeShifter, GetHeaderFromBool)
137 EXPECT_FALSE(
header.has_value());
140 TEST(ShapeShifter, GetHeaderFromLongString)
143 std_msgs::String
msg;
144 msg.data =
"123456789012345678901234567890";
151 EXPECT_FALSE(
header.has_value());
154 TEST(ShapeShifter, GetHeaderFromFakeString)
157 std_msgs::String
msg;
158 msg.data = std::string(22,
'\x00');
165 ASSERT_TRUE(
header.has_value());
166 std_msgs::Header fakeHeader;
167 fakeHeader.seq = msg.data.size();
168 EXPECT_EQ(fakeHeader,
header.value());
171 TEST(ShapeShifter, SetHeaderSameLength)
174 geometry_msgs::PointStamped
msg;
175 msg.header.stamp.sec = 1;
176 msg.header.stamp.nsec = 2;
177 msg.header.frame_id =
"test";
181 const auto origMsg = msg;
187 auto newHeader = msg.header;
188 newHeader.frame_id =
"abcd";
192 ASSERT_TRUE(decodedHeader.has_value());
193 EXPECT_EQ(newHeader, decodedHeader.value());
195 const auto newMsg = shifter.
instantiate<geometry_msgs::PointStamped>();
196 EXPECT_EQ(newHeader, newMsg->header);
197 EXPECT_EQ(origMsg.point, newMsg->point);
200 TEST(ShapeShifter, SetHeaderShorter)
203 geometry_msgs::PointStamped
msg;
204 msg.header.stamp.sec = 1;
205 msg.header.stamp.nsec = 2;
206 msg.header.frame_id =
"test";
210 const auto origMsg = msg;
216 auto newHeader = msg.header;
217 newHeader.frame_id =
"ab";
221 ASSERT_TRUE(decodedHeader.has_value());
222 EXPECT_EQ(newHeader, decodedHeader.value());
224 const auto newMsg = shifter.
instantiate<geometry_msgs::PointStamped>();
225 EXPECT_EQ(newHeader, newMsg->header);
226 EXPECT_EQ(origMsg.point, newMsg->point);
229 TEST(ShapeShifter, SetHeaderLonger)
232 geometry_msgs::PointStamped
msg;
233 msg.header.stamp.sec = 1;
234 msg.header.stamp.nsec = 2;
235 msg.header.frame_id =
"test";
239 const auto origMsg = msg;
245 auto newHeader = msg.header;
246 newHeader.frame_id =
"abcdefgh";
250 ASSERT_TRUE(decodedHeader.has_value());
251 EXPECT_EQ(newHeader, decodedHeader.value());
253 const auto newMsg = shifter.
instantiate<geometry_msgs::PointStamped>();
254 EXPECT_EQ(newHeader, newMsg->header);
255 EXPECT_EQ(origMsg.point, newMsg->point);
258 TEST(ShapeShifter, CopyShapeShifter)
261 geometry_msgs::PointStamped
msg;
262 msg.header.stamp.sec = 1;
263 msg.header.stamp.nsec = 2;
264 msg.header.frame_id =
"test";
268 const auto origMsg = msg;
278 EXPECT_EQ(*shifter.
instantiate<geometry_msgs::PointStamped>(), *shifter2.
instantiate<geometry_msgs::PointStamped>());
282 TEST(ShapeShifter, CopyCrasShapeShifter)
285 geometry_msgs::PointStamped
msg;
286 msg.header.stamp.sec = 1;
287 msg.header.stamp.nsec = 2;
288 msg.header.frame_id =
"test";
292 const auto origMsg = msg;
302 EXPECT_EQ(*shifter.
instantiate<geometry_msgs::PointStamped>(), *shifter2.
instantiate<geometry_msgs::PointStamped>());
306 shifter3 = std::move(shifter2);
308 EXPECT_EQ(*shifter.
instantiate<geometry_msgs::PointStamped>(), *shifter3.
instantiate<geometry_msgs::PointStamped>());
312 int main(
int argc,
char **argv)
314 testing::InitGoogleTest(&argc, argv);
315 return RUN_ALL_TESTS();
void copyShapeShifter(const ::topic_tools::ShapeShifter &in, ::topic_tools::ShapeShifter &out)
Copy in ShapeShifter to out.
uint8_t * getBuffer(::topic_tools::ShapeShifter &msg)
Get the internal buffer with serialized message data.
::cras::optional<::std_msgs::Header > getHeader(const ::topic_tools::ShapeShifter &msg)
Get the header field of the given message, if it has any.
void msgToShapeShifter(const T &msg, ::topic_tools::ShapeShifter &shifter)
Copy the message instance into the given ShapeShifter.
void serialize(Stream &stream, const T &t)
Tools for more convenient working with ShapeShifter objects.
bool setHeader(::topic_tools::ShapeShifter &msg, ::std_msgs::Header &header)
Change the header field of the given message, if it has any.
TEST(ShapeShifter, MsgToShapeShifter)
size_t getBufferLength(const ::topic_tools::ShapeShifter &msg)
Get the length of the internal buffer with serialized message data.
uint32_t serializationLength(const T &t)
ShapeShifter class with fixed behavior on copy/move on Melodic. Use this class everywhere possible to...
TFSIMD_FORCE_INLINE tfScalar length(const Quaternion &q)
int main(int argc, char **argv)