27 TEST_CASE(
"IPAddress's store an address and a port number.",
"[IPAddress]")
31 REQUIRE(a.
address() == 0x00000000);
32 REQUIRE(a.
port() == 0);
33 REQUIRE(b.
address() == 0xFFFFFFFF);
34 REQUIRE(b.
port() == 65535);
38 TEST_CASE(
"IPAddress's are comparable.",
"[IPAddress]")
148 TEST_CASE(
"IPAddress's can be constructed from an address and port.",
154 SECTION(
"And ensures address and port are within range.")
160 IPAddress(0, static_cast<unsigned int>(-1)), std::out_of_range);
163 REQUIRE_THROWS_AS(
IPAddress(0xFFFFFFFF, 65536), std::out_of_range);
168 TEST_CASE(
"IPAddress's can be constructed from strings.",
"[IPAddress]")
170 SECTION(
"Without a port number.")
174 SECTION(
"With a port number.")
178 SECTION(
"And will raise std::invalid_argument if it cannot be parsed.")
181 REQUIRE_THROWS_AS(
IPAddress(
"-1.2.3.4"), std::invalid_argument);
182 REQUIRE_THROWS_AS(
IPAddress(
"1.-2.3.4"), std::invalid_argument);
183 REQUIRE_THROWS_AS(
IPAddress(
"1.2.-3.4"), std::invalid_argument);
184 REQUIRE_THROWS_AS(
IPAddress(
"1.2.3.-4"), std::invalid_argument);
185 REQUIRE_THROWS_AS(
IPAddress(
"+1.2.3.4"), std::invalid_argument);
186 REQUIRE_THROWS_AS(
IPAddress(
"1.+2.3.4"), std::invalid_argument);
187 REQUIRE_THROWS_AS(
IPAddress(
"1.2.+3.4"), std::invalid_argument);
188 REQUIRE_THROWS_AS(
IPAddress(
"1.2.3.+4"), std::invalid_argument);
189 REQUIRE_THROWS_AS(
IPAddress(
"1"), std::invalid_argument);
190 REQUIRE_THROWS_AS(
IPAddress(
"1."), std::invalid_argument);
191 REQUIRE_THROWS_AS(
IPAddress(
"1.2"), std::invalid_argument);
192 REQUIRE_THROWS_AS(
IPAddress(
"1.2."), std::invalid_argument);
193 REQUIRE_THROWS_AS(
IPAddress(
"1.2.3"), std::invalid_argument);
194 REQUIRE_THROWS_AS(
IPAddress(
"1.2.3."), std::invalid_argument);
195 REQUIRE_THROWS_AS(
IPAddress(
"1.2.3.4."), std::invalid_argument);
196 REQUIRE_THROWS_AS(
IPAddress(
"1.2.3.4.5"), std::invalid_argument);
197 REQUIRE_THROWS_AS(
IPAddress(
"a.2.3.4"), std::invalid_argument);
198 REQUIRE_THROWS_AS(
IPAddress(
"1.b.3.4"), std::invalid_argument);
199 REQUIRE_THROWS_AS(
IPAddress(
"1.2.c.4"), std::invalid_argument);
200 REQUIRE_THROWS_AS(
IPAddress(
"1.2.3.d"), std::invalid_argument);
202 IPAddress(
"192.168.32.128.443"), std::invalid_argument);
203 REQUIRE_THROWS_AS(
IPAddress(
"192.168.128:443"), std::invalid_argument);
205 IPAddress(
"192:168:32:128:443"), std::invalid_argument);
207 IPAddress(
"192.1b8.32.128:443"), std::invalid_argument);
210 IPAddress(
"-1.2.3.4"),
"Invalid IP address string.");
212 IPAddress(
"1.-2.3.4"),
"Invalid IP address string.");
214 IPAddress(
"1.2.-3.4"),
"Invalid IP address string.");
216 IPAddress(
"1.2.3.-4"),
"Invalid IP address string.");
218 IPAddress(
"+1.2.3.4"),
"Invalid IP address string.");
220 IPAddress(
"1.+2.3.4"),
"Invalid IP address string.");
222 IPAddress(
"1.2.+3.4"),
"Invalid IP address string.");
224 IPAddress(
"1.2.3.+4"),
"Invalid IP address string.");
226 IPAddress(
"1"),
"Invalid IP address string.");
228 IPAddress(
"1."),
"Invalid IP address string.");
230 IPAddress(
"1.2"),
"Invalid IP address string.");
232 IPAddress(
"1.2."),
"Invalid IP address string.");
234 IPAddress(
"1.2.3"),
"Invalid IP address string.");
236 IPAddress(
"1.2.3."),
"Invalid IP address string.");
238 IPAddress(
"1.2.3.4."),
"Invalid IP address string.");
240 IPAddress(
"1.2.3.4.5"),
"Invalid IP address string.");
242 IPAddress(
"a.2.3.4"),
"Invalid IP address string.");
244 IPAddress(
"1.b.3.4"),
"Invalid IP address string.");
246 IPAddress(
"1.2.c.4"),
"Invalid IP address string.");
248 IPAddress(
"1.2.3.d"),
"Invalid IP address string.");
250 IPAddress(
"192.168.32.128.443"),
"Invalid IP address string.");
252 IPAddress(
"192.168.128:443"),
"Invalid IP address string.");
254 IPAddress(
"192:168:32:128:443"),
"Invalid IP address string.");
256 IPAddress(
"192.1b8.32.128:443"),
"Invalid IP address string.");
258 SECTION(
"And ensures address and port are within range.")
265 REQUIRE_THROWS_AS(
IPAddress(
"256.2.3.4"), std::out_of_range);
266 REQUIRE_THROWS_AS(
IPAddress(
"1.256.3.4"), std::out_of_range);
267 REQUIRE_THROWS_AS(
IPAddress(
"1.2.256.4"), std::out_of_range);
268 REQUIRE_THROWS_AS(
IPAddress(
"1.2.3.256"), std::out_of_range);
272 "Address octet (256) is outside of the allowed range (0 - 255).");
275 "Address octet (256) is outside of the allowed range (0 - 255).");
278 "Address octet (256) is outside of the allowed range (0 - 255).");
281 "Address octet (256) is outside of the allowed range (0 - 255).");
299 TEST_CASE(
"The port of an IP address can be changed during a copy.",
309 REQUIRE(address_a_copy.
port() == 65535);
313 REQUIRE(address_b_copy.
port() == 0);
314 SECTION(
"And ensures port number is within range.")
334 REQUIRE(address_a_moved ==
IPAddress(0x00000000, 0));
335 REQUIRE(address_b_moved ==
IPAddress(0xFFFFFFFF, 65535));
349 TEST_CASE(
"IPAddress's are assignable (by move semantics).",
"[IPAddress]")
361 SECTION(
"Without a port number.")
363 REQUIRE(
str(
IPAddress(
"192.168.32.128")) ==
"192.168.32.128");
365 SECTION(
"With a port number.")
367 REQUIRE(
str(
IPAddress(
"192.168.32.128:443")) ==
"192.168.32.128:443");
372 TEST_CASE(
"dnslookup finds IPAddress's by domain name.",
"[IPAddress]")
374 SECTION(
"When they are available.")
378 SECTION(
"And throws DNSLookupError otherwise.")
std::string str(const T &object)
unsigned int port() const
TEST_CASE("IPAddress's store an address and a port number.", "[IPAddress]")
IPAddress address_b(0xFFFFFFFF, 65535)
unsigned long address() const
IPAddress dnslookup(const std::string &url)