X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/dd65d8c83003ebbf9ab3275957fefa8cd7c87cc3..32485259c1342115488d219776dfebeb3d4d81b1:/tests/uris/uris.cpp diff --git a/tests/uris/uris.cpp b/tests/uris/uris.cpp index 69a9128d9c..cbf4aef571 100644 --- a/tests/uris/uris.cpp +++ b/tests/uris/uris.cpp @@ -11,7 +11,7 @@ // headers // ---------------------------------------------------------------------------- -#include "wx/wxprec.h" +#include "testprec.h" #ifdef __BORLANDC__ #pragma hdrstop @@ -22,8 +22,10 @@ #endif // WX_PRECOMP #include "wx/uri.h" +#include "wx/url.h" -#include "wx/cppunit.h" +// Test wxURL & wxURI compat? +#define TEST_URL ( 1 && wxUSE_URL ) // ---------------------------------------------------------------------------- // test class @@ -46,6 +48,13 @@ private: CPPUNIT_TEST( BackwardsResolving ); CPPUNIT_TEST( Assignment ); CPPUNIT_TEST( Comparison ); + CPPUNIT_TEST( Unescaping ); +#if TEST_URL + CPPUNIT_TEST( URLCompat ); +#if wxUSE_PROTOCOL_HTTP + CPPUNIT_TEST( URLProxy ); +#endif +#endif CPPUNIT_TEST_SUITE_END(); void IPv4(); @@ -58,6 +67,12 @@ private: void BackwardsResolving(); void Assignment(); void Comparison(); + void Unescaping(); + +#if TEST_URL + void URLCompat(); + void URLProxy(); +#endif DECLARE_NO_COPY_CLASS(URITestCase) }; @@ -92,7 +107,7 @@ void URITestCase::IPv4() wxURI* uri; - URI_TEST("http://user:password@192.168.1.100:5050/path", + URI_TEST("http://user:password@192.168.1.100:5050/path", uri->GetHostType() == wxURI_IPV4ADDRESS); URI_TEST("http://user:password@192.255.1.100:5050/path", @@ -117,17 +132,17 @@ void URITestCase::IPv6() // / [ *5( h16 ":" ) h16 ] "::" h16 // / [ *6( h16 ":" ) h16 ] "::" // ls32 = ( h16 ":" h16 ) / IPv4address - - URI_TEST("http://user:password@[aa:aa:aa:aa:aa:aa:192.168.1.100]:5050/path", + + URI_TEST("http://user:password@[aa:aa:aa:aa:aa:aa:192.168.1.100]:5050/path", uri->GetHostType() == wxURI_IPV6ADDRESS); - URI_TEST("http://user:password@[aa:aa:aa:aa:aa:aa:aa:aa]:5050/path", + URI_TEST("http://user:password@[aa:aa:aa:aa:aa:aa:aa:aa]:5050/path", uri->GetHostType() == wxURI_IPV6ADDRESS); - URI_TEST("http://user:password@[aa:aa:aa:aa::192.168.1.100]:5050/path", + URI_TEST("http://user:password@[aa:aa:aa:aa::192.168.1.100]:5050/path", uri->GetHostType() == wxURI_IPV6ADDRESS); - URI_TEST("http://user:password@[aa:aa:aa:aa::aa:aa]:5050/path", + URI_TEST("http://user:password@[aa:aa:aa:aa::aa:aa]:5050/path", uri->GetHostType() == wxURI_IPV6ADDRESS); } @@ -136,27 +151,27 @@ void URITestCase::Paths() wxURI* uri; //path tests - URI_TEST("http://user:password@192.256.1.100:5050/../path", + URI_TEST("http://user:password@192.256.1.100:5050/../path", uri->GetPath() == wxT("/path")); - URI_TEST("http://user:password@192.256.1.100:5050/path/../", + URI_TEST("http://user:password@192.256.1.100:5050/path/../", uri->GetPath() == wxT("/")); - URI_TEST("http://user:password@192.256.1.100:5050/path/.", + URI_TEST("http://user:password@192.256.1.100:5050/path/.", uri->GetPath() == wxT("/path/")); - URI_TEST("http://user:password@192.256.1.100:5050/path/./", + URI_TEST("http://user:password@192.256.1.100:5050/path/./", uri->GetPath() == wxT("/path/")); - - URI_TEST("path/john/../../../joe", - uri->Get() == wxT("../joe")); + + URI_TEST("path/john/../../../joe", + uri->BuildURI() == wxT("../joe")); } #undef URI_TEST #define URI_TEST_RESOLVE(string, eq, strict) \ uri = new wxURI(wxT(string));\ uri->Resolve(masteruri, strict);\ - CPPUNIT_ASSERT(uri->Get() == wxT(eq));\ + CPPUNIT_ASSERT(uri->BuildURI() == wxT(eq));\ delete uri; #define URI_TEST(string, eq) \ @@ -169,31 +184,31 @@ void URITestCase::NormalResolving() { wxURI masteruri(wxT("http://a/b/c/d;p?q")); wxURI* uri; - + URI_TEST("g:h" ,"g:h") - URI_TEST("g" ,"http://a/b/c/g") - URI_TEST("./g" ,"http://a/b/c/g") - URI_TEST("g/" ,"http://a/b/c/g/") - URI_TEST("/g" ,"http://a/g") - URI_TEST("//g" ,"http://g") - URI_TEST("?y" ,"http://a/b/c/d;p?y") + URI_TEST("g" ,"http://a/b/c/g") + URI_TEST("./g" ,"http://a/b/c/g") + URI_TEST("g/" ,"http://a/b/c/g/") + URI_TEST("/g" ,"http://a/g") + URI_TEST("//g" ,"http://g") + URI_TEST("?y" ,"http://a/b/c/d;p?y") URI_TEST("g?y" ,"http://a/b/c/g?y") - URI_TEST("#s" ,"http://a/b/c/d;p?q#s") - URI_TEST("g#s" ,"http://a/b/c/g#s") - URI_TEST("g?y#s","http://a/b/c/g?y#s") - URI_TEST(";x" ,"http://a/b/c/;x") - URI_TEST("g;x" ,"http://a/b/c/g;x") - URI_TEST("g;x?y#s","http://a/b/c/g;x?y#s") - - URI_TEST("" ,"http://a/b/c/d;p?q") - URI_TEST("." ,"http://a/b/c/") - URI_TEST("./" ,"http://a/b/c/") - URI_TEST(".." ,"http://a/b/") - URI_TEST("../" ,"http://a/b/") - URI_TEST("../g" ,"http://a/b/g") - URI_TEST("../..","http://a/") - URI_TEST("../../" , "http://a/") - URI_TEST("../../g" , "http://a/g") + URI_TEST("#s" ,"http://a/b/c/d;p?q#s") + URI_TEST("g#s" ,"http://a/b/c/g#s") + URI_TEST("g?y#s","http://a/b/c/g?y#s") + URI_TEST(";x" ,"http://a/b/c/;x") + URI_TEST("g;x" ,"http://a/b/c/g;x") + URI_TEST("g;x?y#s","http://a/b/c/g;x?y#s") + + URI_TEST("" ,"http://a/b/c/d;p?q") + URI_TEST("." ,"http://a/b/c/") + URI_TEST("./" ,"http://a/b/c/") + URI_TEST(".." ,"http://a/b/") + URI_TEST("../" ,"http://a/b/") + URI_TEST("../g" ,"http://a/b/g") + URI_TEST("../..","http://a/") + URI_TEST("../../" , "http://a/") + URI_TEST("../../g" , "http://a/g") } void URITestCase::ComplexResolving() @@ -202,12 +217,12 @@ void URITestCase::ComplexResolving() wxURI* uri; //odd path examples - URI_TEST("/./g" ,"http://a/g") - URI_TEST("/../g" ,"http://a/g") - URI_TEST("g." ,"http://a/b/c/g.") - URI_TEST(".g" ,"http://a/b/c/.g") - URI_TEST("g.." ,"http://a/b/c/g..") - URI_TEST("..g" ,"http://a/b/c/..g") + URI_TEST("/./g" ,"http://a/g") + URI_TEST("/../g" ,"http://a/g") + URI_TEST("g." ,"http://a/b/c/g.") + URI_TEST(".g" ,"http://a/b/c/.g") + URI_TEST("g.." ,"http://a/b/c/g..") + URI_TEST("..g" ,"http://a/b/c/..g") } //Should Fail //"../../../g" = "http://a/g" @@ -219,12 +234,12 @@ void URITestCase::ReallyComplexResolving() wxURI* uri; //even more odder path examples - URI_TEST("./../g" ,"http://a/b/g") - URI_TEST("./g/." ,"http://a/b/c/g/") - URI_TEST("g/./h" ,"http://a/b/c/g/h") - URI_TEST("g/../h" ,"http://a/b/c/h") - URI_TEST("g;x=1/./y" , "http://a/b/c/g;x=1/y") - URI_TEST("g;x=1/../y" , "http://a/b/c/y") + URI_TEST("./../g" ,"http://a/b/g") + URI_TEST("./g/." ,"http://a/b/c/g/") + URI_TEST("g/./h" ,"http://a/b/c/g/h") + URI_TEST("g/../h" ,"http://a/b/c/h") + URI_TEST("g;x=1/./y" , "http://a/b/c/g;x=1/y") + URI_TEST("g;x=1/../y" , "http://a/b/c/y") } void URITestCase::QueryFragmentResolving() @@ -232,11 +247,11 @@ void URITestCase::QueryFragmentResolving() wxURI masteruri(wxT("http://a/b/c/d;p?q")); wxURI* uri; - //query/fragment ambigiousness - URI_TEST("g?y/./x","http://a/b/c/g?y/./x") - URI_TEST("g?y/../x" , "http://a/b/c/g?y/../x") - URI_TEST("g#s/./x","http://a/b/c/g#s/./x") - URI_TEST("g#s/../x" , "http://a/b/c/g#s/../x") + //query/fragment ambigiousness + URI_TEST("g?y/./x","http://a/b/c/g?y/./x") + URI_TEST("g?y/../x" , "http://a/b/c/g?y/../x") + URI_TEST("g#s/./x","http://a/b/c/g#s/./x") + URI_TEST("g#s/../x" , "http://a/b/c/g#s/../x") } void URITestCase::BackwardsResolving() @@ -244,10 +259,10 @@ void URITestCase::BackwardsResolving() wxURI masteruri(wxT("http://a/b/c/d;p?q")); wxURI* uri; - //"NEW" - URI_TEST("http:g" , "http:g") //strict - //bw compat - URI_TEST_RESOLVE("http:g", "http://a/b/c/g", false); + //"NEW" + URI_TEST("http:g" , "http:g") //strict + //bw compat + URI_TEST_RESOLVE("http:g", "http://a/b/c/g", false); } void URITestCase::Assignment() @@ -257,10 +272,117 @@ void URITestCase::Assignment() uri2 = uri1; - CPPUNIT_ASSERT(uri1.Get() == uri2.Get()); + CPPUNIT_ASSERT(uri1.BuildURI() == uri2.BuildURI()); } void URITestCase::Comparison() { CPPUNIT_ASSERT(wxURI(wxT("http://mysite.com")) == wxURI(wxT("http://mysite.com"))); } + +void URITestCase::Unescaping() +{ + wxString orig = wxT("http://test.com/of/file%3A%2F%2FC%3A%5Curi%5C") + wxT("escaping%5Cthat%5Cseems%5Cbroken%5Csadly%5B1%5D.rss"); + + wxString works= wxURI(orig).BuildUnescapedURI(); + + CPPUNIT_ASSERT(orig.IsSameAs(works) == false); + + wxString orig2 = wxT("http://test.com/of/file%3A%2F%") + wxT("2FC%3A%5Curi%5Cescaping%5Cthat%5Cseems%") + wxT("5Cbroken%5Csadly%5B1%5D.rss"); + + wxString works2 = wxURI::Unescape(orig2); + wxString broken2 = wxURI(orig2).BuildUnescapedURI(); + + CPPUNIT_ASSERT(works2.IsSameAs(broken2)); + +} +#if TEST_URL + +const wxChar* pszProblemUrls[] = { wxT("http://www.csdn.net"), + wxT("http://www.163.com"), + wxT("http://www.sina.com.cn") }; + +#include "wx/url.h" +#include "wx/file.h" + +void URITestCase::URLCompat() +{ + wxURL url(wxT("http://user:password@wxwidgets.org")); + + CPPUNIT_ASSERT(url.GetError() == wxURL_NOERR); + + wxInputStream* pInput = url.GetInputStream(); + + CPPUNIT_ASSERT( pInput != NULL ); + + CPPUNIT_ASSERT( url == wxURL(wxT("http://user:password@wxwidgets.org")) ); + + wxURI uri(wxT("http://user:password@wxwidgets.org")); + + CPPUNIT_ASSERT( url == uri ); + + wxURL urlcopy(uri); + + CPPUNIT_ASSERT( urlcopy == url ); + CPPUNIT_ASSERT( urlcopy == uri ); + + wxURI uricopy(url); + + CPPUNIT_ASSERT( uricopy == url ); + CPPUNIT_ASSERT( uricopy == urlcopy ); + CPPUNIT_ASSERT( uricopy == uri ); +#if WXWIN_COMPATIBILITY_2_4 + CPPUNIT_ASSERT( wxURL::ConvertFromURI(wxT("%20%41%20")) == wxT(" A ") ); +#endif + CPPUNIT_ASSERT( wxURI::Unescape(wxT("%20%41%20")) == wxT(" A ") ); + + wxURI test(wxT("file:\"myf\"ile.txt")); + + CPPUNIT_ASSERT( test.BuildURI() == wxT("file:%22myf%22ile.txt") ); + CPPUNIT_ASSERT( test.GetScheme() == wxT("file") ); + CPPUNIT_ASSERT( test.GetPath() == wxT("%22myf%22ile.txt") ); + + // Test problem urls (reported not to work some time ago by a user...) + for ( size_t i = 0; i < WXSIZEOF(pszProblemUrls); ++i ) + { + wxURL urlProblem(pszProblemUrls[i]); + CPPUNIT_ASSERT(urlProblem.GetError() == wxURL_NOERR); + + wxInputStream* is = urlProblem.GetInputStream(); + CPPUNIT_ASSERT(is != NULL); + + wxFile fOut(_T("test.html"), wxFile::write); + wxASSERT(fOut.IsOpened()); + + char buf[1001]; + for( ;; ) + { + is->Read(buf, 1000); + size_t n = is->LastRead(); + if ( n == 0 ) + break; + buf[n] = 0; + fOut.Write(buf, n); + } + + delete is; + } +} + +#if wxUSE_PROTOCOL_HTTP +void URITestCase::URLProxy() +{ + wxURL url(wxT("http://www.asite.com/index.html")); + url.SetProxy(wxT("pserv:3122")); + + wxURL::SetDefaultProxy(wxT("fol.singnet.com.sg:8080")); + wxURL url2(wxT("http://server-name/path/to/file?query_data=value")); + wxInputStream *data = url2.GetInputStream(); + CPPUNIT_ASSERT(data != NULL); +} +#endif // wxUSE_PROTOCOL_HTTP + +#endif // TEST_URL