1*fa2dd9c4SAndrew Lindesay /* 2*fa2dd9c4SAndrew Lindesay * Copyright 2016, Andrew Lindesay, apl@lindesay.co.nz. 3*fa2dd9c4SAndrew Lindesay * Distributed under the terms of the MIT License. 4*fa2dd9c4SAndrew Lindesay */ 5*fa2dd9c4SAndrew Lindesay 6*fa2dd9c4SAndrew Lindesay 7*fa2dd9c4SAndrew Lindesay #include "NetworkUrlTest.h" 8*fa2dd9c4SAndrew Lindesay 9*fa2dd9c4SAndrew Lindesay #include <Url.h> 10*fa2dd9c4SAndrew Lindesay 11*fa2dd9c4SAndrew Lindesay #include <cppunit/TestCaller.h> 12*fa2dd9c4SAndrew Lindesay #include <cppunit/TestSuite.h> 13*fa2dd9c4SAndrew Lindesay 14*fa2dd9c4SAndrew Lindesay 15*fa2dd9c4SAndrew Lindesay NetworkUrlTest::NetworkUrlTest() 16*fa2dd9c4SAndrew Lindesay { 17*fa2dd9c4SAndrew Lindesay } 18*fa2dd9c4SAndrew Lindesay 19*fa2dd9c4SAndrew Lindesay 20*fa2dd9c4SAndrew Lindesay NetworkUrlTest::~NetworkUrlTest() 21*fa2dd9c4SAndrew Lindesay { 22*fa2dd9c4SAndrew Lindesay } 23*fa2dd9c4SAndrew Lindesay 24*fa2dd9c4SAndrew Lindesay 25*fa2dd9c4SAndrew Lindesay void 26*fa2dd9c4SAndrew Lindesay NetworkUrlTest::setUp() 27*fa2dd9c4SAndrew Lindesay { 28*fa2dd9c4SAndrew Lindesay } 29*fa2dd9c4SAndrew Lindesay 30*fa2dd9c4SAndrew Lindesay 31*fa2dd9c4SAndrew Lindesay void 32*fa2dd9c4SAndrew Lindesay NetworkUrlTest::tearDown() 33*fa2dd9c4SAndrew Lindesay { 34*fa2dd9c4SAndrew Lindesay } 35*fa2dd9c4SAndrew Lindesay 36*fa2dd9c4SAndrew Lindesay 37*fa2dd9c4SAndrew Lindesay // General Tests --------------------------------------------------------------- 38*fa2dd9c4SAndrew Lindesay 39*fa2dd9c4SAndrew Lindesay /* 40*fa2dd9c4SAndrew Lindesay This is the "happy days" tests that checks that a URL featuring all of the 41*fa2dd9c4SAndrew Lindesay parsed elements successfully processes and the elements are present. 42*fa2dd9c4SAndrew Lindesay */ 43*fa2dd9c4SAndrew Lindesay 44*fa2dd9c4SAndrew Lindesay void NetworkUrlTest::TestValidFullUrl() 45*fa2dd9c4SAndrew Lindesay { 46*fa2dd9c4SAndrew Lindesay BUrl url("http://ewe:pea@www.something.co.nz:8888/some/path?key1=value1#fragment"); 47*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.IsValid()); 48*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.Protocol() == "http"); 49*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.HasProtocol()); 50*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.UserName() == "ewe"); 51*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.HasUserName()); 52*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.Password() == "pea"); 53*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.HasPassword()); 54*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.Host() == "www.something.co.nz"); 55*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.HasHost()); 56*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.Port() == 8888); 57*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.HasPort()); 58*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.Path() == "/some/path"); 59*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.HasPath()); 60*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.Request() == "key1=value1"); 61*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.HasRequest()); 62*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.Fragment() == "fragment"); 63*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.HasFragment()); 64*fa2dd9c4SAndrew Lindesay } 65*fa2dd9c4SAndrew Lindesay 66*fa2dd9c4SAndrew Lindesay 67*fa2dd9c4SAndrew Lindesay void NetworkUrlTest::TestFileUrl() 68*fa2dd9c4SAndrew Lindesay { 69*fa2dd9c4SAndrew Lindesay BUrl url("file:///northisland/wellington/brooklyn/windturbine"); 70*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.IsValid()); 71*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.Protocol() == "file"); 72*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.HasProtocol()); 73*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(!url.HasUserName()); 74*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(!url.HasPassword()); 75*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.Host() == ""); 76*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.HasHost()); 77*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(!url.HasPort()); 78*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.Path() == "/northisland/wellington/brooklyn/windturbine"); 79*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.HasPath()); 80*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(!url.HasRequest()); 81*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(!url.HasFragment()); 82*fa2dd9c4SAndrew Lindesay } 83*fa2dd9c4SAndrew Lindesay 84*fa2dd9c4SAndrew Lindesay 85*fa2dd9c4SAndrew Lindesay // Authority Tests (UserName, Password, Host, Port) ---------------------------- 86*fa2dd9c4SAndrew Lindesay 87*fa2dd9c4SAndrew Lindesay 88*fa2dd9c4SAndrew Lindesay void NetworkUrlTest::TestWithUserNameAndPasswordNoHostAndPort() 89*fa2dd9c4SAndrew Lindesay { 90*fa2dd9c4SAndrew Lindesay BUrl url("wierd://tea:tree@/x"); 91*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.IsValid()); 92*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.Protocol() == "wierd"); 93*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.HasProtocol()); 94*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.UserName() == "tea"); 95*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.HasUserName()); 96*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.Password() == "tree"); 97*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.HasPassword()); 98*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.Host() == ""); 99*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(!url.HasHost()); 100*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(!url.HasPort()); 101*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.Path() == "/x"); 102*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.HasPath()); 103*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(!url.HasRequest()); 104*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(!url.HasFragment()); 105*fa2dd9c4SAndrew Lindesay } 106*fa2dd9c4SAndrew Lindesay 107*fa2dd9c4SAndrew Lindesay 108*fa2dd9c4SAndrew Lindesay void NetworkUrlTest::TestHostAndPortWithNoUserNameAndPassword() 109*fa2dd9c4SAndrew Lindesay { 110*fa2dd9c4SAndrew Lindesay BUrl url("https://www.something.co.nz:443/z"); 111*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.IsValid()); 112*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.Protocol() == "https"); 113*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.HasProtocol()); 114*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(!url.HasUserName()); 115*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(!url.HasPassword()); 116*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.Port() == 443); 117*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.HasPort()); 118*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.Host() == "www.something.co.nz"); 119*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.HasHost()); 120*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.Path() == "/z"); 121*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.HasPath()); 122*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(!url.HasRequest()); 123*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(!url.HasFragment()); 124*fa2dd9c4SAndrew Lindesay } 125*fa2dd9c4SAndrew Lindesay 126*fa2dd9c4SAndrew Lindesay 127*fa2dd9c4SAndrew Lindesay void NetworkUrlTest::TestHostWithNoPortOrUserNameAndPassword() 128*fa2dd9c4SAndrew Lindesay { 129*fa2dd9c4SAndrew Lindesay BUrl url("https://www.something.co.nz/z"); 130*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.IsValid()); 131*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.Protocol() == "https"); 132*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.HasProtocol()); 133*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(!url.HasUserName()); 134*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(!url.HasPassword()); 135*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.Host() == "www.something.co.nz"); 136*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.HasHost()); 137*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(!url.HasPort()); 138*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.Path() == "/z"); 139*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.HasPath()); 140*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(!url.HasRequest()); 141*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(!url.HasFragment()); 142*fa2dd9c4SAndrew Lindesay } 143*fa2dd9c4SAndrew Lindesay 144*fa2dd9c4SAndrew Lindesay 145*fa2dd9c4SAndrew Lindesay void NetworkUrlTest::TestHostWithNoPortNoPath() 146*fa2dd9c4SAndrew Lindesay { 147*fa2dd9c4SAndrew Lindesay BUrl url("https://www.something.co.nz"); 148*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.IsValid()); 149*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.Protocol() == "https"); 150*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.HasProtocol()); 151*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(!url.HasUserName()); 152*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(!url.HasPassword()); 153*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.Host() == "www.something.co.nz"); 154*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.HasHost()); 155*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(!url.HasPort()); 156*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(!url.HasPath()); 157*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(!url.HasRequest()); 158*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(!url.HasFragment()); 159*fa2dd9c4SAndrew Lindesay } 160*fa2dd9c4SAndrew Lindesay 161*fa2dd9c4SAndrew Lindesay 162*fa2dd9c4SAndrew Lindesay void NetworkUrlTest::TestHostWithPortNoPath() 163*fa2dd9c4SAndrew Lindesay { 164*fa2dd9c4SAndrew Lindesay BUrl url("https://www.something.co.nz:1234"); 165*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.IsValid()); 166*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.Protocol() == "https"); 167*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.HasProtocol()); 168*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(!url.HasUserName()); 169*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(!url.HasPassword()); 170*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.Host() == "www.something.co.nz"); 171*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.HasHost()); 172*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.Port() == 1234); 173*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.HasPort()); 174*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(!url.HasPath()); 175*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(!url.HasRequest()); 176*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(!url.HasFragment()); 177*fa2dd9c4SAndrew Lindesay } 178*fa2dd9c4SAndrew Lindesay 179*fa2dd9c4SAndrew Lindesay 180*fa2dd9c4SAndrew Lindesay void NetworkUrlTest::TestHostWithEmptyPort() 181*fa2dd9c4SAndrew Lindesay { 182*fa2dd9c4SAndrew Lindesay BUrl url("https://www.something.co.nz:"); 183*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.IsValid()); 184*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.Protocol() == "https"); 185*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.HasProtocol()); 186*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(!url.HasUserName()); 187*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(!url.HasPassword()); 188*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.Host() == "www.something.co.nz"); 189*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(url.HasHost()); 190*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(!url.HasPort()); 191*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(!url.HasPath()); 192*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(!url.HasRequest()); 193*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(!url.HasFragment()); 194*fa2dd9c4SAndrew Lindesay } 195*fa2dd9c4SAndrew Lindesay 196*fa2dd9c4SAndrew Lindesay 197*fa2dd9c4SAndrew Lindesay // Invalid Forms --------------------------------------------------------------- 198*fa2dd9c4SAndrew Lindesay 199*fa2dd9c4SAndrew Lindesay 200*fa2dd9c4SAndrew Lindesay void NetworkUrlTest::TestWhitespaceBefore() 201*fa2dd9c4SAndrew Lindesay { 202*fa2dd9c4SAndrew Lindesay BUrl url(" https://www.something.co.nz/z"); 203*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(!url.IsValid()); 204*fa2dd9c4SAndrew Lindesay } 205*fa2dd9c4SAndrew Lindesay 206*fa2dd9c4SAndrew Lindesay 207*fa2dd9c4SAndrew Lindesay void NetworkUrlTest::TestWhitespaceAfter() 208*fa2dd9c4SAndrew Lindesay { 209*fa2dd9c4SAndrew Lindesay BUrl url("https://www.something.co.nz/z\t\t "); 210*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(!url.IsValid()); 211*fa2dd9c4SAndrew Lindesay } 212*fa2dd9c4SAndrew Lindesay 213*fa2dd9c4SAndrew Lindesay 214*fa2dd9c4SAndrew Lindesay void NetworkUrlTest::TestWhitespaceMiddle() 215*fa2dd9c4SAndrew Lindesay { 216*fa2dd9c4SAndrew Lindesay BUrl url("https://www. something.co.nz/z"); 217*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(!url.IsValid()); 218*fa2dd9c4SAndrew Lindesay } 219*fa2dd9c4SAndrew Lindesay 220*fa2dd9c4SAndrew Lindesay 221*fa2dd9c4SAndrew Lindesay void NetworkUrlTest::TestHttpNoHost() 222*fa2dd9c4SAndrew Lindesay { 223*fa2dd9c4SAndrew Lindesay BUrl url("https:///z"); 224*fa2dd9c4SAndrew Lindesay CPPUNIT_ASSERT(!url.IsValid()); 225*fa2dd9c4SAndrew Lindesay } 226*fa2dd9c4SAndrew Lindesay 227*fa2dd9c4SAndrew Lindesay 228*fa2dd9c4SAndrew Lindesay // Control --------------------------------------------------------------------- 229*fa2dd9c4SAndrew Lindesay 230*fa2dd9c4SAndrew Lindesay 231*fa2dd9c4SAndrew Lindesay /*static*/ void 232*fa2dd9c4SAndrew Lindesay NetworkUrlTest::AddTests(BTestSuite& parent) 233*fa2dd9c4SAndrew Lindesay { 234*fa2dd9c4SAndrew Lindesay CppUnit::TestSuite& suite = *new CppUnit::TestSuite("NetworkUrlTest"); 235*fa2dd9c4SAndrew Lindesay 236*fa2dd9c4SAndrew Lindesay suite.addTest(new CppUnit::TestCaller<NetworkUrlTest>( 237*fa2dd9c4SAndrew Lindesay "NetworkUrlTest::TestHostAndPortWithNoUserNameAndPassword", 238*fa2dd9c4SAndrew Lindesay &NetworkUrlTest::TestHostAndPortWithNoUserNameAndPassword)); 239*fa2dd9c4SAndrew Lindesay suite.addTest(new CppUnit::TestCaller<NetworkUrlTest>( 240*fa2dd9c4SAndrew Lindesay "NetworkUrlTest::TestWithUserNameAndPasswordNoHostAndPort", 241*fa2dd9c4SAndrew Lindesay &NetworkUrlTest::TestWithUserNameAndPasswordNoHostAndPort)); 242*fa2dd9c4SAndrew Lindesay suite.addTest(new CppUnit::TestCaller<NetworkUrlTest>( 243*fa2dd9c4SAndrew Lindesay "NetworkUrlTest::TestHostWithNoPortOrUserNameAndPassword", 244*fa2dd9c4SAndrew Lindesay &NetworkUrlTest::TestHostWithNoPortOrUserNameAndPassword)); 245*fa2dd9c4SAndrew Lindesay suite.addTest(new CppUnit::TestCaller<NetworkUrlTest>( 246*fa2dd9c4SAndrew Lindesay "NetworkUrlTest::TestHostWithNoPortNoPath", 247*fa2dd9c4SAndrew Lindesay &NetworkUrlTest::TestHostWithNoPortNoPath)); 248*fa2dd9c4SAndrew Lindesay suite.addTest(new CppUnit::TestCaller<NetworkUrlTest>( 249*fa2dd9c4SAndrew Lindesay "NetworkUrlTest::TestHostWithPortNoPath", 250*fa2dd9c4SAndrew Lindesay &NetworkUrlTest::TestHostWithPortNoPath)); 251*fa2dd9c4SAndrew Lindesay suite.addTest(new CppUnit::TestCaller<NetworkUrlTest>( 252*fa2dd9c4SAndrew Lindesay "NetworkUrlTest::TestHostWithEmptyPort", 253*fa2dd9c4SAndrew Lindesay &NetworkUrlTest::TestHostWithEmptyPort)); 254*fa2dd9c4SAndrew Lindesay 255*fa2dd9c4SAndrew Lindesay suite.addTest(new CppUnit::TestCaller<NetworkUrlTest>( 256*fa2dd9c4SAndrew Lindesay "NetworkUrlTest::TestWhitespaceBefore", 257*fa2dd9c4SAndrew Lindesay &NetworkUrlTest::TestWhitespaceBefore)); 258*fa2dd9c4SAndrew Lindesay suite.addTest(new CppUnit::TestCaller<NetworkUrlTest>( 259*fa2dd9c4SAndrew Lindesay "NetworkUrlTest::TestWhitespaceAfter", 260*fa2dd9c4SAndrew Lindesay &NetworkUrlTest::TestWhitespaceAfter)); 261*fa2dd9c4SAndrew Lindesay suite.addTest(new CppUnit::TestCaller<NetworkUrlTest>( 262*fa2dd9c4SAndrew Lindesay "NetworkUrlTest::TestWhitespaceMiddle", 263*fa2dd9c4SAndrew Lindesay &NetworkUrlTest::TestWhitespaceMiddle)); 264*fa2dd9c4SAndrew Lindesay 265*fa2dd9c4SAndrew Lindesay suite.addTest(new CppUnit::TestCaller<NetworkUrlTest>( 266*fa2dd9c4SAndrew Lindesay "NetworkUrlTest::TestFileUrl", 267*fa2dd9c4SAndrew Lindesay &NetworkUrlTest::TestFileUrl)); 268*fa2dd9c4SAndrew Lindesay suite.addTest(new CppUnit::TestCaller<NetworkUrlTest>( 269*fa2dd9c4SAndrew Lindesay "NetworkUrlTest::TestValidFullUrl", &NetworkUrlTest::TestValidFullUrl)); 270*fa2dd9c4SAndrew Lindesay 271*fa2dd9c4SAndrew Lindesay parent.addTest("NetworkUrlTest", &suite); 272*fa2dd9c4SAndrew Lindesay } 273