36 SECTION(
"With the default constructor.")
38 REQUIRE_NOTHROW(
If());
40 SECTION(
"With ID, source subnet, and destination subnet arguments.")
42 REQUIRE_NOTHROW(
If({}, {}, {}));
44 REQUIRE_NOTHROW(
If(4, {}, {}));
51 SECTION(
"ID as well as source and destination address are optional.")
53 REQUIRE_NOTHROW(
If());
54 REQUIRE_NOTHROW(
If(4));
57 SECTION(
"Ensures the packet ID is valid.")
60 REQUIRE_THROWS_AS(
If(255), std::invalid_argument);
61 REQUIRE_THROWS_WITH(
If(255),
"Invalid packet ID (#255).");
62 REQUIRE_THROWS_AS(
If(5000), std::invalid_argument);
63 REQUIRE_THROWS_WITH(
If(5000),
"Invalid packet ID (#5000).");
73 REQUIRE(
If() ==
If());
74 REQUIRE(
If({}, {}, {}) ==
If());
75 REQUIRE(
If(4, {}, {}) ==
If(4));
88 REQUIRE_FALSE(
If(0, {}, {}) ==
If());
89 REQUIRE_FALSE(
If(4, {}, {}) ==
If(0));
106 REQUIRE(
If(0, {}, {}) !=
If());
107 REQUIRE(
If(4, {}, {}) !=
If(0));
120 REQUIRE_FALSE(
If() !=
If());
121 REQUIRE_FALSE(
If({}, {}, {}) !=
If());
122 REQUIRE_FALSE(
If(4, {}, {}) !=
If(4));
150 If moved(std::move(original));
165 TEST_CASE(
"If's are assignable (by move semantics.)",
"[If]")
175 TEST_CASE(
"If's 'check' method determines if a packet and destination" 176 "address matches the conditional.",
"[If]")
179 When(Method(mock,
id)).AlwaysReturn(4);
180 When(Method(mock, source)).AlwaysReturn(
MAVAddress(
"192.168"));
181 Packet &packet = mock.get();
183 SECTION(
"Default all matching case.")
185 REQUIRE(
If().check(packet, address));
187 SECTION(
"Based on packet ID only.")
189 REQUIRE_FALSE(
If(1).check(packet, address));
190 REQUIRE(
If(4).check(packet, address));
191 REQUIRE_FALSE(
If(321).check(packet, address));
193 SECTION(
"Based on source subnet only.")
195 REQUIRE(
If({},
MAVSubnet(
"192.168")).check(packet, address));
196 REQUIRE_FALSE(
If({},
MAVSubnet(
"193.168")).check(packet, address));
197 REQUIRE(
If({},
MAVSubnet(
"192.0/8")).check(packet, address));
198 REQUIRE_FALSE(
If({},
MAVSubnet(
"193.0/8")).check(packet, address));
200 SECTION(
"Based on destination subnet only.")
202 REQUIRE(
If({}, {},
MAVSubnet(
"172.16")).check(packet, address));
203 REQUIRE_FALSE(
If({}, {},
MAVSubnet(
"171.16")).check(packet, address));
204 REQUIRE(
If({}, {},
MAVSubnet(
"172.16/8")).check(packet, address));
205 REQUIRE_FALSE(
If({}, {},
MAVSubnet(
"171.16/8")).check(packet, address));
207 SECTION(
"Based on packet ID and source subnet only.")
209 REQUIRE(
If(4,
MAVSubnet(
"192.168")).check(packet, address));
210 REQUIRE_FALSE(
If(11,
MAVSubnet(
"192.168")).check(packet, address));
211 REQUIRE_FALSE(
If(4,
MAVSubnet(
"193.168")).check(packet, address));
212 REQUIRE_FALSE(
If(11,
MAVSubnet(
"193.168")).check(packet, address));
213 REQUIRE(
If(4,
MAVSubnet(
"192.0/8")).check(packet, address));
214 REQUIRE_FALSE(
If(11,
MAVSubnet(
"192.0/8")).check(packet, address));
215 REQUIRE_FALSE(
If(4,
MAVSubnet(
"193.0/8")).check(packet, address));
216 REQUIRE_FALSE(
If(11,
MAVSubnet(
"193.0/8")).check(packet, address));
218 SECTION(
"Based on packet ID and destination subnet only.")
220 REQUIRE(
If(4, {},
MAVSubnet(
"172.16")).check(packet, address));
221 REQUIRE_FALSE(
If(11, {},
MAVSubnet(
"172.16")).check(packet, address));
222 REQUIRE_FALSE(
If(4, {},
MAVSubnet(
"171.16")).check(packet, address));
223 REQUIRE_FALSE(
If(11, {},
MAVSubnet(
"171.16")).check(packet, address));
224 REQUIRE(
If(4, {},
MAVSubnet(
"172.16/8")).check(packet, address));
225 REQUIRE_FALSE(
If(11, {},
MAVSubnet(
"172.16/8")).check(packet, address));
226 REQUIRE_FALSE(
If(4, {},
MAVSubnet(
"171.16/8")).check(packet, address));
227 REQUIRE_FALSE(
If(11, {},
MAVSubnet(
"171.16/8")).check(packet, address));
229 SECTION(
"Based on packet ID, source subnet, and destination subnet.")
259 TEST_CASE(
"If's 'type' method sets the packet ID for matching.",
263 When(Method(mock,
id)).AlwaysReturn(4);
264 When(Method(mock, source)).AlwaysReturn(
MAVAddress(
"192.168"));
265 Packet &packet = mock.get();
267 SECTION(
"When given a numeric ID.")
269 REQUIRE_FALSE(
If().type(0).check(packet, address));
270 REQUIRE(
If().type(4).check(packet, address));
271 REQUIRE_FALSE(
If().type(11).check(packet, address));
273 SECTION(
"And ensures the numeric ID is valid.")
276 REQUIRE_THROWS_AS(
If().type(255), std::invalid_argument);
278 If().type(255),
"Invalid packet ID (#255).");
279 REQUIRE_THROWS_AS(
If().type(5000), std::invalid_argument);
281 If().type(5000),
"Invalid packet ID (#5000).");
283 SECTION(
"When given a packet name.")
285 REQUIRE_FALSE(
If().type(
"HEARTBEAT").check(packet, address));
286 REQUIRE(
If().type(
"PING").check(packet, address));
287 REQUIRE_FALSE(
If().type(
"SET_MODE").check(packet, address));
289 SECTION(
"And ensures the packet name is valid.")
292 If().type(
"CRAZY_PACKET_NAME"), std::invalid_argument);
294 If().type(
"CRAZY_PACKET_NAME"),
295 "Invalid packet name (\"CRAZY_PACKET_NAME\").");
300 TEST_CASE(
"If's 'from' method sets the source subnet to match.",
304 When(Method(mock,
id)).AlwaysReturn(4);
305 When(Method(mock, source)).AlwaysReturn(
MAVAddress(
"192.168"));
306 Packet &packet = mock.get();
308 SECTION(
"When a MAVSubnet object is given.")
310 REQUIRE(
If().from(
MAVSubnet(
"192.168")).check(packet, address));
311 REQUIRE_FALSE(
If().from(
MAVSubnet(
"193.168")).check(packet, address));
312 REQUIRE(
If().from(
MAVSubnet(
"192.0/8")).check(packet, address));
313 REQUIRE_FALSE(
If().from(
MAVSubnet(
"193.0/8")).check(packet, address));
315 SECTION(
"When a string is given.")
317 REQUIRE(
If().from(
"192.168").check(packet, address));
318 REQUIRE_FALSE(
If().from(
"193.168").check(packet, address));
319 REQUIRE(
If().from(
"192.0/8").check(packet, address));
320 REQUIRE_FALSE(
If().from(
"193.0/8").check(packet, address));
325 TEST_CASE(
"If's 'to' method sets the source subnet to match.",
329 When(Method(mock,
id)).AlwaysReturn(4);
330 When(Method(mock, source)).AlwaysReturn(
MAVAddress(
"192.168"));
331 Packet &packet = mock.get();
333 SECTION(
"When a MAVSubnet object is given.")
335 REQUIRE(
If().to(
MAVSubnet(
"172.16")).check(packet, address));
336 REQUIRE_FALSE(
If().to(
MAVSubnet(
"171.16")).check(packet, address));
337 REQUIRE(
If().to(
MAVSubnet(
"172.16/8")).check(packet, address));
338 REQUIRE_FALSE(
If().to(
MAVSubnet(
"171.16/8")).check(packet, address));
340 SECTION(
"When a string is given.")
342 REQUIRE(
If().to(
"172.16").check(packet, address));
343 REQUIRE_FALSE(
If().to(
"171.16").check(packet, address));
344 REQUIRE(
If().to(
"172.16/8").check(packet, address));
345 REQUIRE_FALSE(
If().to(
"171.16/8").check(packet, address));
352 REQUIRE(
str(
If()) ==
"if any");
353 REQUIRE(
str(
If().type(
"HEARTBEAT")) ==
"if HEARTBEAT");
354 REQUIRE(
str(
If().type(
"PING")) ==
"if PING");
355 REQUIRE(
str(
If().type(
"SET_MODE")) ==
"if SET_MODE");
356 REQUIRE(
str(
If().from(
"192.168")) ==
"if from 192.168");
357 REQUIRE(
str(
If().from(
"192.0/8")) ==
"if from 192.0/8");
358 REQUIRE(
str(
If().to(
"172.16")) ==
"if to 172.16");
359 REQUIRE(
str(
If().to(
"172.0/8")) ==
"if to 172.0/8");
361 str(
If().type(
"PING").from(
"192.168")) ==
"if PING from 192.168");
363 str(
If().type(
"PING").to(
"172.16")) ==
"if PING to 172.16");
365 str(
If().from(
"192.168").to(
"172.16")) ==
"if from 192.168 to 172.16");
367 str(
If().type(
"PING").from(
"192.168").to(
"172.16")) ==
368 "if PING from 192.168 to 172.16");
std::string str(const T &object)
If if_b(11, MAVSubnet("255.255"), {})
TEST_CASE("If's are constructable.", "[If]")