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