-
Notifications
You must be signed in to change notification settings - Fork 1
/
tests.cpp
147 lines (126 loc) · 5.48 KB
/
tests.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#include <catch2/catch_test_macros.hpp>
#include "uri_parser.h"
TEST_CASE( "Empty string is invalid", "[scheme]" ) {
auto uri = uri::parse_uri("");
REQUIRE( uri.error == uri::Error::InvalidScheme );
}
TEST_CASE( "Empty scheme is invalid", "[scheme]" ) {
auto uri = uri::parse_uri(":");
REQUIRE( uri.scheme.empty() );
REQUIRE( uri.error == uri::Error::InvalidScheme );
}
TEST_CASE( "Scheme containing invalid characters is invalid", "[scheme]" ) {
auto uri = uri::parse_uri("news*:");
REQUIRE( uri.error == uri::Error::InvalidScheme );
}
TEST_CASE( "Valid scheme", "[scheme]" ) {
auto uri = uri::parse_uri("news:");
REQUIRE( uri.error == uri::Error::None );
REQUIRE( uri.scheme == "news" );
}
TEST_CASE( "Valid authority with just host", "[auth]" ) {
auto uri = uri::parse_uri("news://example.com");
REQUIRE( uri.error == uri::Error::None );
REQUIRE( uri.authority.host == "example.com" );
}
TEST_CASE( "Valid authority with userinfo & host", "[auth]" ) {
auto uri = uri::parse_uri("news://user@example.com");
REQUIRE( uri.error == uri::Error::None );
REQUIRE( uri.authority.userinfo == "user" );
REQUIRE( uri.authority.host == "example.com" );
}
TEST_CASE( "Valid authority with userinfo, host & port", "[auth]" ) {
auto uri = uri::parse_uri("news://user@example.com:5432");
REQUIRE( uri.error == uri::Error::None );
REQUIRE( uri.authority.userinfo == "user" );
REQUIRE( uri.authority.host == "example.com" );
REQUIRE( uri.authority.port == 5432 );
}
TEST_CASE( "Valid authority with invalid port", "[auth]" ) {
auto uri = uri::parse_uri("news://user@example.com:52f");
REQUIRE( uri.error == uri::Error::InvalidPort );
}
TEST_CASE( "Valid valid path with authority", "[path]" ) {
auto uri = uri::parse_uri("news://user@example.com:5432/test/path");
REQUIRE( uri.error == uri::Error::None );
REQUIRE( uri.path == "/test/path" );
}
TEST_CASE( "Valid valid path with empty authority", "[path" ) {
auto uri = uri::parse_uri("news:///test/path");
REQUIRE( uri.error == uri::Error::None );
REQUIRE( uri.path == "/test/path" );
}
TEST_CASE( "Valid valid path with no authority", "[path]" ) {
auto uri = uri::parse_uri("news:/test/path");
REQUIRE( uri.error == uri::Error::None );
REQUIRE( uri.path == "/test/path" );
}
TEST_CASE( "Valid valid path without slashes and with no authority", "[path]" ) {
auto uri = uri::parse_uri("news:test_path");
REQUIRE( uri.error == uri::Error::None );
REQUIRE( uri.path == "test_path" );
}
TEST_CASE( "Valid query with path and authority", "[query]" ) {
auto uri = uri::parse_uri("https://john.doe@www.example.com:123/forum/questions/?tag=networking&order=newest");
REQUIRE( uri.error == uri::Error::None );
REQUIRE( uri.path == "/forum/questions/" );
REQUIRE( uri.query_string == "tag=networking&order=newest" );
REQUIRE( uri.query.size() == 2 );
REQUIRE( uri.query.at("tag") == "networking" );
REQUIRE( uri.query.at("order") == "newest" );
}
TEST_CASE( "Valid query with path, authority and fragment", "[query]" ) {
auto uri = uri::parse_uri("https://john.doe@www.example.com:123/forum/questions/?tag=networking&order=newest#top");
REQUIRE( uri.error == uri::Error::None );
REQUIRE( uri.path == "/forum/questions/" );
REQUIRE( uri.query_string == "tag=networking&order=newest" );
REQUIRE( uri.query.size() == 2 );
REQUIRE( uri.query.at("tag") == "networking" );
REQUIRE( uri.query.at("order") == "newest" );
}
TEST_CASE( "Valid query with empty arg", "[query]" ) {
auto uri = uri::parse_uri("https://john.doe@www.example.com:123/forum/questions/?tag;order=newest");
REQUIRE( uri.error == uri::Error::None );
REQUIRE( uri.path == "/forum/questions/" );
REQUIRE( uri.query.size() == 2 );
REQUIRE( uri.query.at("tag").empty() );
REQUIRE( uri.query.at("order") == "newest" );
}
TEST_CASE( "Valid valid fragment with query", "[fragment]" ) {
auto uri = uri::parse_uri("https://john.doe@www.example.com:123/forum/questions/?tag=networking&order=newest#top");
REQUIRE( uri.error == uri::Error::None );
REQUIRE( uri.fragment == "top" );
}
TEST_CASE( "Test IPv4 authority", "[full]" ) {
auto uri = uri::parse_uri("telnet://192.0.2.16:80/");
REQUIRE( uri.error == uri::Error::None );
REQUIRE( uri.scheme == "telnet" );
REQUIRE( uri.authority.host == "192.0.2.16" );
REQUIRE( uri.authority.port == 80 );
REQUIRE( uri.path == "/" );
REQUIRE( uri.query.empty() );
}
TEST_CASE( "Test IPv6 authority", "[full]" ) {
auto uri = uri::parse_uri("ldap://[2001:db8::7]/c=GB?objectClass?one");
REQUIRE( uri.error == uri::Error::None );
REQUIRE( uri.scheme == "ldap" );
REQUIRE( uri.authority.host == "[2001:db8::7]" );
REQUIRE( uri.path == "/c=GB" );
REQUIRE( uri.query.size() == 2 );
REQUIRE( uri.query.at("objectClass").empty() );
REQUIRE( uri.query.at("one").empty() );
}
TEST_CASE( "Test numeric path", "[full]" ) {
auto uri = uri::parse_uri("tel:+1-816-555-1212");
REQUIRE( uri.error == uri::Error::None );
REQUIRE( uri.scheme == "tel" );
REQUIRE( uri.path == "+1-816-555-1212" );
REQUIRE( uri.query.empty() );
}
TEST_CASE( "Test path with colons with no authority", "[full]" ) {
auto uri = uri::parse_uri("urn:oasis:names:specification:docbook:dtd:xml:4.1.2");
REQUIRE( uri.error == uri::Error::None );
REQUIRE( uri.scheme == "urn" );
REQUIRE( uri.path == "oasis:names:specification:docbook:dtd:xml:4.1.2" );
REQUIRE( uri.query.empty() );
}