Skip to content

Commit 28de27e

Browse files
Fix subscription.is_serialized() for callbacks with message info (ros2#1950) (ros2#2622)
* Fix subscription.is_serialized() for callbacks with message info argument * Add tests + please linters Signed-off-by: Ivan Santiago Paunovic <[email protected]> Signed-off-by: roscan-tech <[email protected]> Co-authored-by: Ivan Santiago Paunovic <[email protected]>
1 parent 9be01cf commit 28de27e

File tree

2 files changed

+112
-1
lines changed

2 files changed

+112
-1
lines changed

rclcpp/include/rclcpp/any_subscription_callback.hpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -950,7 +950,13 @@ class AnySubscriptionCallback
950950
std::holds_alternative<UniquePtrSerializedMessageCallback>(callback_variant_) ||
951951
std::holds_alternative<SharedConstPtrSerializedMessageCallback>(callback_variant_) ||
952952
std::holds_alternative<ConstRefSharedConstPtrSerializedMessageCallback>(callback_variant_) ||
953-
std::holds_alternative<SharedPtrSerializedMessageCallback>(callback_variant_);
953+
std::holds_alternative<SharedPtrSerializedMessageCallback>(callback_variant_) ||
954+
std::holds_alternative<ConstRefSerializedMessageWithInfoCallback>(callback_variant_) ||
955+
std::holds_alternative<UniquePtrSerializedMessageWithInfoCallback>(callback_variant_) ||
956+
std::holds_alternative<SharedConstPtrSerializedMessageWithInfoCallback>(callback_variant_) ||
957+
std::holds_alternative<ConstRefSharedConstPtrSerializedMessageWithInfoCallback>(
958+
callback_variant_) ||
959+
std::holds_alternative<SharedPtrSerializedMessageWithInfoCallback>(callback_variant_);
954960
}
955961

956962
void

rclcpp/test/rclcpp/test_any_subscription_callback.cpp

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,111 @@ TEST_F(TestAnySubscriptionCallback, construct_destruct) {
9393
rclcpp::AnySubscriptionCallback<test_msgs::msg::Empty> asc2(allocator);
9494
}
9595

96+
TEST_F(TestAnySubscriptionCallback, is_serialized_message_callback) {
97+
{
98+
rclcpp::AnySubscriptionCallback<test_msgs::msg::Empty> asc;
99+
asc.set([](const rclcpp::SerializedMessage &) {});
100+
EXPECT_TRUE(asc.is_serialized_message_callback());
101+
EXPECT_NO_THROW(
102+
asc.dispatch(
103+
std::make_shared<rclcpp::SerializedMessage>(),
104+
rclcpp::MessageInfo{}));
105+
}
106+
{
107+
rclcpp::AnySubscriptionCallback<test_msgs::msg::Empty> asc;
108+
asc.set([](const rclcpp::SerializedMessage &, const rclcpp::MessageInfo &) {});
109+
EXPECT_TRUE(asc.is_serialized_message_callback());
110+
EXPECT_NO_THROW(
111+
asc.dispatch(
112+
std::make_shared<rclcpp::SerializedMessage>(),
113+
rclcpp::MessageInfo{}));
114+
}
115+
{
116+
rclcpp::AnySubscriptionCallback<test_msgs::msg::Empty> asc;
117+
asc.set([](const rclcpp::SerializedMessage &, const rclcpp::MessageInfo &) {});
118+
EXPECT_TRUE(asc.is_serialized_message_callback());
119+
EXPECT_NO_THROW(
120+
asc.dispatch(
121+
std::make_shared<rclcpp::SerializedMessage>(),
122+
rclcpp::MessageInfo{}));
123+
}
124+
{
125+
rclcpp::AnySubscriptionCallback<test_msgs::msg::Empty> asc;
126+
asc.set([](std::unique_ptr<rclcpp::SerializedMessage>) {});
127+
EXPECT_TRUE(asc.is_serialized_message_callback());
128+
EXPECT_NO_THROW(
129+
asc.dispatch(
130+
std::make_shared<rclcpp::SerializedMessage>(),
131+
rclcpp::MessageInfo{}));
132+
}
133+
{
134+
rclcpp::AnySubscriptionCallback<test_msgs::msg::Empty> asc;
135+
asc.set([](std::unique_ptr<rclcpp::SerializedMessage>, const rclcpp::MessageInfo &) {});
136+
EXPECT_TRUE(asc.is_serialized_message_callback());
137+
EXPECT_NO_THROW(
138+
asc.dispatch(
139+
std::make_shared<rclcpp::SerializedMessage>(),
140+
rclcpp::MessageInfo{}));
141+
}
142+
{
143+
rclcpp::AnySubscriptionCallback<test_msgs::msg::Empty> asc;
144+
asc.set([](std::shared_ptr<const rclcpp::SerializedMessage>) {});
145+
EXPECT_TRUE(asc.is_serialized_message_callback());
146+
EXPECT_NO_THROW(
147+
asc.dispatch(
148+
std::make_shared<rclcpp::SerializedMessage>(),
149+
rclcpp::MessageInfo{}));
150+
}
151+
{
152+
rclcpp::AnySubscriptionCallback<test_msgs::msg::Empty> asc;
153+
asc.set([](std::shared_ptr<const rclcpp::SerializedMessage>, const rclcpp::MessageInfo &) {});
154+
EXPECT_TRUE(asc.is_serialized_message_callback());
155+
EXPECT_NO_THROW(
156+
asc.dispatch(
157+
std::make_shared<rclcpp::SerializedMessage>(),
158+
rclcpp::MessageInfo{}));
159+
}
160+
{
161+
rclcpp::AnySubscriptionCallback<test_msgs::msg::Empty> asc;
162+
asc.set([](const std::shared_ptr<const rclcpp::SerializedMessage> &) {});
163+
EXPECT_TRUE(asc.is_serialized_message_callback());
164+
EXPECT_NO_THROW(
165+
asc.dispatch(
166+
std::make_shared<rclcpp::SerializedMessage>(),
167+
rclcpp::MessageInfo{}));
168+
}
169+
{
170+
rclcpp::AnySubscriptionCallback<test_msgs::msg::Empty> asc;
171+
asc.set(
172+
[](
173+
const std::shared_ptr<const rclcpp::SerializedMessage> &,
174+
const rclcpp::MessageInfo &) {});
175+
EXPECT_TRUE(asc.is_serialized_message_callback());
176+
EXPECT_NO_THROW(
177+
asc.dispatch(
178+
std::make_shared<rclcpp::SerializedMessage>(),
179+
rclcpp::MessageInfo{}));
180+
}
181+
{
182+
rclcpp::AnySubscriptionCallback<test_msgs::msg::Empty> asc;
183+
asc.set([](std::shared_ptr<rclcpp::SerializedMessage>) {});
184+
EXPECT_TRUE(asc.is_serialized_message_callback());
185+
EXPECT_NO_THROW(
186+
asc.dispatch(
187+
std::make_shared<rclcpp::SerializedMessage>(),
188+
rclcpp::MessageInfo{}));
189+
}
190+
{
191+
rclcpp::AnySubscriptionCallback<test_msgs::msg::Empty> asc;
192+
asc.set([](std::shared_ptr<rclcpp::SerializedMessage>, const rclcpp::MessageInfo &) {});
193+
EXPECT_TRUE(asc.is_serialized_message_callback());
194+
EXPECT_NO_THROW(
195+
asc.dispatch(
196+
std::make_shared<rclcpp::SerializedMessage>(),
197+
rclcpp::MessageInfo{}));
198+
}
199+
}
200+
96201
TEST_F(TestAnySubscriptionCallback, unset_dispatch_throw) {
97202
EXPECT_THROW(
98203
any_subscription_callback_.dispatch(msg_shared_ptr_, message_info_),

0 commit comments

Comments
 (0)