xref: /haiku/src/tests/kits/net/libnetapi/NetworkUrlTest.cpp (revision cf657294632c4969497740623d6a51648d872c44)
1fa2dd9c4SAndrew Lindesay /*
2fa2dd9c4SAndrew Lindesay  * Copyright 2016, Andrew Lindesay, apl@lindesay.co.nz.
3fa2dd9c4SAndrew Lindesay  * Distributed under the terms of the MIT License.
4fa2dd9c4SAndrew Lindesay  */
5fa2dd9c4SAndrew Lindesay 
6fa2dd9c4SAndrew Lindesay 
7fa2dd9c4SAndrew Lindesay #include "NetworkUrlTest.h"
8fa2dd9c4SAndrew Lindesay 
9fa2dd9c4SAndrew Lindesay #include <Url.h>
10fa2dd9c4SAndrew Lindesay 
11fa2dd9c4SAndrew Lindesay #include <cppunit/TestCaller.h>
12fa2dd9c4SAndrew Lindesay #include <cppunit/TestSuite.h>
13fa2dd9c4SAndrew Lindesay 
14fa2dd9c4SAndrew Lindesay 
15fa2dd9c4SAndrew Lindesay NetworkUrlTest::NetworkUrlTest()
16fa2dd9c4SAndrew Lindesay {
17fa2dd9c4SAndrew Lindesay }
18fa2dd9c4SAndrew Lindesay 
19fa2dd9c4SAndrew Lindesay 
20fa2dd9c4SAndrew Lindesay NetworkUrlTest::~NetworkUrlTest()
21fa2dd9c4SAndrew Lindesay {
22fa2dd9c4SAndrew Lindesay }
23fa2dd9c4SAndrew Lindesay 
24fa2dd9c4SAndrew Lindesay 
25fa2dd9c4SAndrew Lindesay void
26fa2dd9c4SAndrew Lindesay NetworkUrlTest::setUp()
27fa2dd9c4SAndrew Lindesay {
28fa2dd9c4SAndrew Lindesay }
29fa2dd9c4SAndrew Lindesay 
30fa2dd9c4SAndrew Lindesay 
31fa2dd9c4SAndrew Lindesay void
32fa2dd9c4SAndrew Lindesay NetworkUrlTest::tearDown()
33fa2dd9c4SAndrew Lindesay {
34fa2dd9c4SAndrew Lindesay }
35fa2dd9c4SAndrew Lindesay 
36fa2dd9c4SAndrew Lindesay 
37fa2dd9c4SAndrew Lindesay // General Tests ---------------------------------------------------------------
38fa2dd9c4SAndrew Lindesay 
39fa2dd9c4SAndrew Lindesay /*
40fa2dd9c4SAndrew Lindesay This is the "happy days" tests that checks that a URL featuring all of the
41fa2dd9c4SAndrew Lindesay parsed elements successfully processes and the elements are present.
42fa2dd9c4SAndrew Lindesay */
43fa2dd9c4SAndrew Lindesay 
44fa2dd9c4SAndrew Lindesay void NetworkUrlTest::TestValidFullUrl()
45fa2dd9c4SAndrew Lindesay {
46fa2dd9c4SAndrew Lindesay 	BUrl url("http://ewe:pea@www.something.co.nz:8888/some/path?key1=value1#fragment");
47fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.IsValid());
48fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.Protocol() == "http");
49fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasProtocol());
50fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.UserName() == "ewe");
51fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasUserName());
52fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.Password() == "pea");
53fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasPassword());
54fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.Host() == "www.something.co.nz");
55fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasHost());
56fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.Port() == 8888);
57fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasPort());
58fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.Path() == "/some/path");
59fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasPath());
60fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.Request() == "key1=value1");
61fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasRequest());
62fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.Fragment() == "fragment");
63fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasFragment());
64fa2dd9c4SAndrew Lindesay }
65fa2dd9c4SAndrew Lindesay 
66fa2dd9c4SAndrew Lindesay 
67*cf657294SAndrew Lindesay void NetworkUrlTest::TestHostWithPathAndFragment()
68*cf657294SAndrew Lindesay {
69*cf657294SAndrew Lindesay 	BUrl url("http://1.2.3.4/some/path#frag/ment");
70*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.IsValid());
71*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.Protocol() == "http");
72*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasProtocol());
73*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasUserName());
74*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasPassword());
75*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.Host() == "1.2.3.4");
76*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasHost());
77*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasPort());
78*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.Path() == "/some/path");
79*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasPath());
80*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasRequest());
81*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.Fragment() == "frag/ment");
82*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasFragment());
83*cf657294SAndrew Lindesay }
84*cf657294SAndrew Lindesay 
85*cf657294SAndrew Lindesay 
86*cf657294SAndrew Lindesay void NetworkUrlTest::TestHostWithFragment()
87*cf657294SAndrew Lindesay {
88*cf657294SAndrew Lindesay 	BUrl url("http://1.2.3.4#frag/ment");
89*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.IsValid());
90*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.Protocol() == "http");
91*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasProtocol());
92*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasUserName());
93*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasPassword());
94*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.Host() == "1.2.3.4");
95*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasHost());
96*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasPort());
97*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasPath()); // see Url.cpp - evidently an empty path is still a path?
98*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasRequest());
99*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.Fragment() == "frag/ment");
100*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasFragment());
101*cf657294SAndrew Lindesay }
102*cf657294SAndrew Lindesay 
103*cf657294SAndrew Lindesay 
104*cf657294SAndrew Lindesay void NetworkUrlTest::TestIpv6HostPortPathAndRequest()
105*cf657294SAndrew Lindesay {
106*cf657294SAndrew Lindesay 	BUrl url("http://[123:123:0:123::123]:8080/some/path?key1=value1");
107*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.IsValid());
108*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.Protocol() == "http");
109*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasProtocol());
110*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasUserName());
111*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasPassword());
112*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.Host() == "[123:123:0:123::123]");
113*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasHost());
114*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.Port() == 8080);
115*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasPort());
116*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.Path() == "/some/path");
117*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasPath());
118*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.Request() == "key1=value1");
119*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasRequest());
120*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasFragment());
121*cf657294SAndrew Lindesay }
122*cf657294SAndrew Lindesay 
123*cf657294SAndrew Lindesay 
124fa2dd9c4SAndrew Lindesay void NetworkUrlTest::TestFileUrl()
125fa2dd9c4SAndrew Lindesay {
126fa2dd9c4SAndrew Lindesay 	BUrl url("file:///northisland/wellington/brooklyn/windturbine");
127fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.IsValid());
128fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.Protocol() == "file");
129fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasProtocol());
130fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasUserName());
131fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasPassword());
132fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.Host() == "");
133fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasHost());
134fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasPort());
135fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.Path() == "/northisland/wellington/brooklyn/windturbine");
136fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasPath());
137fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasRequest());
138fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasFragment());
139fa2dd9c4SAndrew Lindesay }
140fa2dd9c4SAndrew Lindesay 
141fa2dd9c4SAndrew Lindesay 
142*cf657294SAndrew Lindesay void NetworkUrlTest::TestDataUrl()
143*cf657294SAndrew Lindesay {
144*cf657294SAndrew Lindesay 	BUrl url("data:image/png;base64,iVBORw0KGI12P4//8/w38GIErkJggg==");
145*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.IsValid());
146*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.Protocol() == "data");
147*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasUserName());
148*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasPassword());
149*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasHost());
150*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasPath());
151*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.Path() == "image/png;base64,iVBORw0KGI12P4//8/w38GIErkJggg==");
152*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasRequest());
153*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasFragment());
154*cf657294SAndrew Lindesay }
155*cf657294SAndrew Lindesay 
156*cf657294SAndrew Lindesay 
157fa2dd9c4SAndrew Lindesay // Authority Tests (UserName, Password, Host, Port) ----------------------------
158fa2dd9c4SAndrew Lindesay 
159fa2dd9c4SAndrew Lindesay 
160fa2dd9c4SAndrew Lindesay void NetworkUrlTest::TestWithUserNameAndPasswordNoHostAndPort()
161fa2dd9c4SAndrew Lindesay {
162fa2dd9c4SAndrew Lindesay 	BUrl url("wierd://tea:tree@/x");
163fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.IsValid());
164fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.Protocol() == "wierd");
165fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasProtocol());
166fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.UserName() == "tea");
167fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasUserName());
168fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.Password() == "tree");
169fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasPassword());
170fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.Host() == "");
171*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasHost()); // any authority means there "is a host" - see SetAuthority comment.
172fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasPort());
173fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.Path() == "/x");
174fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasPath());
175fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasRequest());
176fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasFragment());
177fa2dd9c4SAndrew Lindesay }
178fa2dd9c4SAndrew Lindesay 
179fa2dd9c4SAndrew Lindesay 
180fa2dd9c4SAndrew Lindesay void NetworkUrlTest::TestHostAndPortWithNoUserNameAndPassword()
181fa2dd9c4SAndrew Lindesay {
182fa2dd9c4SAndrew Lindesay 	BUrl url("https://www.something.co.nz:443/z");
183fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.IsValid());
184fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.Protocol() == "https");
185fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasProtocol());
186fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasUserName());
187fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasPassword());
188fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.Port() == 443);
189fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasPort());
190fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.Host() == "www.something.co.nz");
191fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasHost());
192fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.Path() == "/z");
193fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasPath());
194fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasRequest());
195fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasFragment());
196fa2dd9c4SAndrew Lindesay }
197fa2dd9c4SAndrew Lindesay 
198fa2dd9c4SAndrew Lindesay 
199fa2dd9c4SAndrew Lindesay void NetworkUrlTest::TestHostWithNoPortOrUserNameAndPassword()
200fa2dd9c4SAndrew Lindesay {
201fa2dd9c4SAndrew Lindesay 	BUrl url("https://www.something.co.nz/z");
202fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.IsValid());
203fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.Protocol() == "https");
204fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasProtocol());
205fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasUserName());
206fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasPassword());
207fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.Host() == "www.something.co.nz");
208fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasHost());
209fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasPort());
210fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.Path() == "/z");
211fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasPath());
212fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasRequest());
213fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasFragment());
214fa2dd9c4SAndrew Lindesay }
215fa2dd9c4SAndrew Lindesay 
216fa2dd9c4SAndrew Lindesay 
217fa2dd9c4SAndrew Lindesay void NetworkUrlTest::TestHostWithNoPortNoPath()
218fa2dd9c4SAndrew Lindesay {
219fa2dd9c4SAndrew Lindesay 	BUrl url("https://www.something.co.nz");
220fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.IsValid());
221fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.Protocol() == "https");
222fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasProtocol());
223fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasUserName());
224fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasPassword());
225fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.Host() == "www.something.co.nz");
226fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasHost());
227fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasPort());
228fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasPath());
229fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasRequest());
230fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasFragment());
231fa2dd9c4SAndrew Lindesay }
232fa2dd9c4SAndrew Lindesay 
233fa2dd9c4SAndrew Lindesay 
234fa2dd9c4SAndrew Lindesay void NetworkUrlTest::TestHostWithPortNoPath()
235fa2dd9c4SAndrew Lindesay {
236fa2dd9c4SAndrew Lindesay 	BUrl url("https://www.something.co.nz:1234");
237fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.IsValid());
238fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.Protocol() == "https");
239fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasProtocol());
240fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasUserName());
241fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasPassword());
242fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.Host() == "www.something.co.nz");
243fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasHost());
244fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.Port() == 1234);
245fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasPort());
246fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasPath());
247fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasRequest());
248fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasFragment());
249fa2dd9c4SAndrew Lindesay }
250fa2dd9c4SAndrew Lindesay 
251fa2dd9c4SAndrew Lindesay 
252fa2dd9c4SAndrew Lindesay void NetworkUrlTest::TestHostWithEmptyPort()
253fa2dd9c4SAndrew Lindesay {
254fa2dd9c4SAndrew Lindesay 	BUrl url("https://www.something.co.nz:");
255fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.IsValid());
256fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.Protocol() == "https");
257fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasProtocol());
258fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasUserName());
259fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasPassword());
260fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.Host() == "www.something.co.nz");
261fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasHost());
262fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasPort());
263fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasPath());
264fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasRequest());
265fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasFragment());
266fa2dd9c4SAndrew Lindesay }
267fa2dd9c4SAndrew Lindesay 
268fa2dd9c4SAndrew Lindesay 
269*cf657294SAndrew Lindesay void NetworkUrlTest::TestProtocol()
270*cf657294SAndrew Lindesay {
271*cf657294SAndrew Lindesay 	BUrl url("olala:");
272*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.IsValid());
273*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.Protocol() == "olala");
274*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasProtocol());
275*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasUserName());
276*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasPassword());
277*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasHost());
278*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasPort());
279*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasPath());
280*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasRequest());
281*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasFragment());
282*cf657294SAndrew Lindesay }
283*cf657294SAndrew Lindesay 
284*cf657294SAndrew Lindesay 
285*cf657294SAndrew Lindesay void NetworkUrlTest::TestMailTo()
286*cf657294SAndrew Lindesay {
287*cf657294SAndrew Lindesay 	BUrl url("mailto:eric@example.com");
288*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.IsValid());
289*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.Protocol() == "mailto");
290*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasProtocol());
291*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasUserName());
292*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasPassword());
293*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasHost());
294*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasPort());
295*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.Path() == "eric@example.com");
296*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasPath());
297*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasRequest());
298*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasFragment());
299*cf657294SAndrew Lindesay }
300*cf657294SAndrew Lindesay 
301*cf657294SAndrew Lindesay 
302*cf657294SAndrew Lindesay // Various Authority Checks ----------------------------------------------------
303*cf657294SAndrew Lindesay 
304*cf657294SAndrew Lindesay 
305*cf657294SAndrew Lindesay void NetworkUrlTest::TestAuthorityNoUserName()
306*cf657294SAndrew Lindesay {
307*cf657294SAndrew Lindesay 	BUrl url("anything://:pwd@host");
308*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.IsValid());
309*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasUserName());
310*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasPassword());
311*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.Password() == "pwd");
312*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasHost());
313*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.Host() == "host");
314*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasPort());
315*cf657294SAndrew Lindesay }
316*cf657294SAndrew Lindesay 
317*cf657294SAndrew Lindesay 
318*cf657294SAndrew Lindesay void NetworkUrlTest::TestAuthorityWithCredentialsSeparatorNoPassword()
319*cf657294SAndrew Lindesay {
320*cf657294SAndrew Lindesay 	BUrl url("anything://unam:@host");
321*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.IsValid());
322*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasUserName());
323*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.UserName() == "unam");
324*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasPassword());
325*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasHost());
326*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.Host() == "host");
327*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasPort());
328*cf657294SAndrew Lindesay }
329*cf657294SAndrew Lindesay 
330*cf657294SAndrew Lindesay 
331*cf657294SAndrew Lindesay void NetworkUrlTest::TestAuthorityWithoutCredentialsSeparatorNoPassword()
332*cf657294SAndrew Lindesay {
333*cf657294SAndrew Lindesay 	BUrl url("anything://unam@host");
334*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.IsValid());
335*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasUserName());
336*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.UserName() == "unam");
337*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasPassword());
338*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasHost());
339*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.Host() == "host");
340*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasPort());
341*cf657294SAndrew Lindesay }
342*cf657294SAndrew Lindesay 
343*cf657294SAndrew Lindesay 
344*cf657294SAndrew Lindesay void NetworkUrlTest::TestAuthorityBadPort()
345*cf657294SAndrew Lindesay {
346*cf657294SAndrew Lindesay 	BUrl url("anything://host:aaa");
347*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.IsValid());
348*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasUserName());
349*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasPassword());
350*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.HasHost());
351*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(url.Host() == "host");
352*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(!url.HasPort());
353*cf657294SAndrew Lindesay }
354*cf657294SAndrew Lindesay 
355*cf657294SAndrew Lindesay 
356fa2dd9c4SAndrew Lindesay // Invalid Forms ---------------------------------------------------------------
357fa2dd9c4SAndrew Lindesay 
358fa2dd9c4SAndrew Lindesay 
359fa2dd9c4SAndrew Lindesay void NetworkUrlTest::TestWhitespaceBefore()
360fa2dd9c4SAndrew Lindesay {
361fa2dd9c4SAndrew Lindesay 	BUrl url("   https://www.something.co.nz/z");
362fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(!url.IsValid());
363fa2dd9c4SAndrew Lindesay }
364fa2dd9c4SAndrew Lindesay 
365fa2dd9c4SAndrew Lindesay 
366fa2dd9c4SAndrew Lindesay void NetworkUrlTest::TestWhitespaceAfter()
367fa2dd9c4SAndrew Lindesay {
368fa2dd9c4SAndrew Lindesay 	BUrl url("https://www.something.co.nz/z\t\t ");
369fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(!url.IsValid());
370fa2dd9c4SAndrew Lindesay }
371fa2dd9c4SAndrew Lindesay 
372fa2dd9c4SAndrew Lindesay 
373fa2dd9c4SAndrew Lindesay void NetworkUrlTest::TestWhitespaceMiddle()
374fa2dd9c4SAndrew Lindesay {
375fa2dd9c4SAndrew Lindesay 	BUrl url("https://www.  something.co.nz/z");
376fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(!url.IsValid());
377fa2dd9c4SAndrew Lindesay }
378fa2dd9c4SAndrew Lindesay 
379fa2dd9c4SAndrew Lindesay 
380fa2dd9c4SAndrew Lindesay void NetworkUrlTest::TestHttpNoHost()
381fa2dd9c4SAndrew Lindesay {
382fa2dd9c4SAndrew Lindesay 	BUrl url("https:///z");
383fa2dd9c4SAndrew Lindesay 	CPPUNIT_ASSERT(!url.IsValid());
384fa2dd9c4SAndrew Lindesay }
385fa2dd9c4SAndrew Lindesay 
386fa2dd9c4SAndrew Lindesay 
387*cf657294SAndrew Lindesay void NetworkUrlTest::TestEmpty()
388*cf657294SAndrew Lindesay {
389*cf657294SAndrew Lindesay 	BUrl url("");
390*cf657294SAndrew Lindesay 	CPPUNIT_ASSERT(!url.IsValid());
391*cf657294SAndrew Lindesay }
392*cf657294SAndrew Lindesay 
393*cf657294SAndrew Lindesay 
394fa2dd9c4SAndrew Lindesay // Control ---------------------------------------------------------------------
395fa2dd9c4SAndrew Lindesay 
396fa2dd9c4SAndrew Lindesay 
397fa2dd9c4SAndrew Lindesay /*static*/ void
398fa2dd9c4SAndrew Lindesay NetworkUrlTest::AddTests(BTestSuite& parent)
399fa2dd9c4SAndrew Lindesay {
400fa2dd9c4SAndrew Lindesay 	CppUnit::TestSuite& suite = *new CppUnit::TestSuite("NetworkUrlTest");
401fa2dd9c4SAndrew Lindesay 
402fa2dd9c4SAndrew Lindesay 	suite.addTest(new CppUnit::TestCaller<NetworkUrlTest>(
403fa2dd9c4SAndrew Lindesay 		"NetworkUrlTest::TestHostAndPortWithNoUserNameAndPassword",
404fa2dd9c4SAndrew Lindesay 		&NetworkUrlTest::TestHostAndPortWithNoUserNameAndPassword));
405fa2dd9c4SAndrew Lindesay 	suite.addTest(new CppUnit::TestCaller<NetworkUrlTest>(
406fa2dd9c4SAndrew Lindesay 		"NetworkUrlTest::TestWithUserNameAndPasswordNoHostAndPort",
407fa2dd9c4SAndrew Lindesay 		&NetworkUrlTest::TestWithUserNameAndPasswordNoHostAndPort));
408fa2dd9c4SAndrew Lindesay 	suite.addTest(new CppUnit::TestCaller<NetworkUrlTest>(
409fa2dd9c4SAndrew Lindesay 		"NetworkUrlTest::TestHostWithNoPortOrUserNameAndPassword",
410fa2dd9c4SAndrew Lindesay 		&NetworkUrlTest::TestHostWithNoPortOrUserNameAndPassword));
411fa2dd9c4SAndrew Lindesay 	suite.addTest(new CppUnit::TestCaller<NetworkUrlTest>(
412fa2dd9c4SAndrew Lindesay 		"NetworkUrlTest::TestHostWithNoPortNoPath",
413fa2dd9c4SAndrew Lindesay 		&NetworkUrlTest::TestHostWithNoPortNoPath));
414fa2dd9c4SAndrew Lindesay 	suite.addTest(new CppUnit::TestCaller<NetworkUrlTest>(
415fa2dd9c4SAndrew Lindesay 		"NetworkUrlTest::TestHostWithPortNoPath",
416fa2dd9c4SAndrew Lindesay 		&NetworkUrlTest::TestHostWithPortNoPath));
417fa2dd9c4SAndrew Lindesay 	suite.addTest(new CppUnit::TestCaller<NetworkUrlTest>(
418fa2dd9c4SAndrew Lindesay 		"NetworkUrlTest::TestHostWithEmptyPort",
419fa2dd9c4SAndrew Lindesay 		&NetworkUrlTest::TestHostWithEmptyPort));
420*cf657294SAndrew Lindesay 	suite.addTest(new CppUnit::TestCaller<NetworkUrlTest>(
421*cf657294SAndrew Lindesay 		"NetworkUrlTest::TestHostWithPathAndFragment",
422*cf657294SAndrew Lindesay 		&NetworkUrlTest::TestHostWithPathAndFragment));
423*cf657294SAndrew Lindesay 	suite.addTest(new CppUnit::TestCaller<NetworkUrlTest>(
424*cf657294SAndrew Lindesay 		"NetworkUrlTest::TestHostWithFragment",
425*cf657294SAndrew Lindesay 		&NetworkUrlTest::TestHostWithFragment));
426*cf657294SAndrew Lindesay 	suite.addTest(new CppUnit::TestCaller<NetworkUrlTest>(
427*cf657294SAndrew Lindesay 		"NetworkUrlTest::TestIpv6HostPortPathAndRequest",
428*cf657294SAndrew Lindesay 		&NetworkUrlTest::TestIpv6HostPortPathAndRequest));
429*cf657294SAndrew Lindesay 	suite.addTest(new CppUnit::TestCaller<NetworkUrlTest>(
430*cf657294SAndrew Lindesay 		"NetworkUrlTest::TestProtocol",
431*cf657294SAndrew Lindesay 		&NetworkUrlTest::TestProtocol));
432*cf657294SAndrew Lindesay 	suite.addTest(new CppUnit::TestCaller<NetworkUrlTest>(
433*cf657294SAndrew Lindesay 		"NetworkUrlTest::TestMailTo",
434*cf657294SAndrew Lindesay 		&NetworkUrlTest::TestMailTo));
435*cf657294SAndrew Lindesay 	suite.addTest(new CppUnit::TestCaller<NetworkUrlTest>(
436*cf657294SAndrew Lindesay 		"NetworkUrlTest::TestDataUrl",
437*cf657294SAndrew Lindesay 		&NetworkUrlTest::TestDataUrl));
438*cf657294SAndrew Lindesay 
439*cf657294SAndrew Lindesay 	suite.addTest(new CppUnit::TestCaller<NetworkUrlTest>(
440*cf657294SAndrew Lindesay 		"NetworkUrlTest::TestAuthorityNoUserName",
441*cf657294SAndrew Lindesay 		&NetworkUrlTest::TestAuthorityNoUserName));
442*cf657294SAndrew Lindesay 	suite.addTest(new CppUnit::TestCaller<NetworkUrlTest>(
443*cf657294SAndrew Lindesay         "NetworkUrlTest::TestAuthorityWithCredentialsSeparatorNoPassword",
444*cf657294SAndrew Lindesay         &NetworkUrlTest::TestAuthorityWithCredentialsSeparatorNoPassword));
445*cf657294SAndrew Lindesay 	suite.addTest(new CppUnit::TestCaller<NetworkUrlTest>(
446*cf657294SAndrew Lindesay         "NetworkUrlTest::TestAuthorityWithoutCredentialsSeparatorNoPassword",
447*cf657294SAndrew Lindesay         &NetworkUrlTest::TestAuthorityWithoutCredentialsSeparatorNoPassword));
448*cf657294SAndrew Lindesay 	suite.addTest(new CppUnit::TestCaller<NetworkUrlTest>(
449*cf657294SAndrew Lindesay         "NetworkUrlTest::TestAuthorityBadPort",
450*cf657294SAndrew Lindesay         &NetworkUrlTest::TestAuthorityBadPort));
451fa2dd9c4SAndrew Lindesay 
452fa2dd9c4SAndrew Lindesay 	suite.addTest(new CppUnit::TestCaller<NetworkUrlTest>(
453fa2dd9c4SAndrew Lindesay 		"NetworkUrlTest::TestWhitespaceBefore",
454fa2dd9c4SAndrew Lindesay 		&NetworkUrlTest::TestWhitespaceBefore));
455fa2dd9c4SAndrew Lindesay 	suite.addTest(new CppUnit::TestCaller<NetworkUrlTest>(
456fa2dd9c4SAndrew Lindesay 		"NetworkUrlTest::TestWhitespaceAfter",
457fa2dd9c4SAndrew Lindesay 		&NetworkUrlTest::TestWhitespaceAfter));
458fa2dd9c4SAndrew Lindesay 	suite.addTest(new CppUnit::TestCaller<NetworkUrlTest>(
459fa2dd9c4SAndrew Lindesay 		"NetworkUrlTest::TestWhitespaceMiddle",
460fa2dd9c4SAndrew Lindesay 		&NetworkUrlTest::TestWhitespaceMiddle));
461*cf657294SAndrew Lindesay 	suite.addTest(new CppUnit::TestCaller<NetworkUrlTest>(
462*cf657294SAndrew Lindesay 		"NetworkUrlTest::TestEmpty",
463*cf657294SAndrew Lindesay 		&NetworkUrlTest::TestEmpty));
464fa2dd9c4SAndrew Lindesay 
465fa2dd9c4SAndrew Lindesay 	suite.addTest(new CppUnit::TestCaller<NetworkUrlTest>(
466fa2dd9c4SAndrew Lindesay 		"NetworkUrlTest::TestFileUrl",
467fa2dd9c4SAndrew Lindesay 		&NetworkUrlTest::TestFileUrl));
468fa2dd9c4SAndrew Lindesay 	suite.addTest(new CppUnit::TestCaller<NetworkUrlTest>(
469fa2dd9c4SAndrew Lindesay 		"NetworkUrlTest::TestValidFullUrl", &NetworkUrlTest::TestValidFullUrl));
470fa2dd9c4SAndrew Lindesay 
471fa2dd9c4SAndrew Lindesay 	parent.addTest("NetworkUrlTest", &suite);
472fa2dd9c4SAndrew Lindesay }
473