more standard (although less RFC-conformant) treatment of file: URIs (patch 1415189)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@37403 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
f8855e4725
commit
97ad053bff
@ -75,6 +75,12 @@ if(myuri.HasScheme())
|
||||
protocol = myuri.GetScheme();
|
||||
\end{verbatim}
|
||||
|
||||
\membersection{Deviations from the RFC}\label{deviationsfromrfc}
|
||||
|
||||
Note that on URIs with a "file" scheme wxURI does not
|
||||
parse the userinfo, server, or port portion. This is to keep
|
||||
compatability with wxFileSystem, the old wxURL, and older url specifications.
|
||||
|
||||
\membersection{wxURI::wxURI}\label{wxuriwxuri}
|
||||
|
||||
\func{}{wxURI}{\void}
|
||||
|
@ -432,11 +432,18 @@ const wxChar* wxURI::ParseAuthority(const wxChar* uri)
|
||||
// authority = [ userinfo "@" ] host [ ":" port ]
|
||||
if (*uri == wxT('/') && *(uri+1) == wxT('/'))
|
||||
{
|
||||
//skip past the two slashes
|
||||
uri += 2;
|
||||
|
||||
// ############# DEVIATION FROM RFC #########################
|
||||
// Don't parse the server component for file URIs
|
||||
if(m_scheme != wxT("file"))
|
||||
{
|
||||
//normal way
|
||||
uri = ParseUserInfo(uri);
|
||||
uri = ParseServer(uri);
|
||||
return ParsePort(uri);
|
||||
}
|
||||
}
|
||||
|
||||
return uri;
|
||||
|
@ -49,6 +49,7 @@ private:
|
||||
CPPUNIT_TEST( Assignment );
|
||||
CPPUNIT_TEST( Comparison );
|
||||
CPPUNIT_TEST( Unescaping );
|
||||
CPPUNIT_TEST( FileScheme );
|
||||
#if TEST_URL
|
||||
CPPUNIT_TEST( URLCompat );
|
||||
#if wxUSE_PROTOCOL_HTTP
|
||||
@ -68,6 +69,7 @@ private:
|
||||
void Assignment();
|
||||
void Comparison();
|
||||
void Unescaping();
|
||||
void FileScheme();
|
||||
|
||||
#if TEST_URL
|
||||
void URLCompat();
|
||||
@ -299,6 +301,26 @@ void URITestCase::Unescaping()
|
||||
CPPUNIT_ASSERT(works2.IsSameAs(broken2));
|
||||
|
||||
}
|
||||
|
||||
void URITestCase::FileScheme()
|
||||
{
|
||||
//file:// variety (NOT CONFORMANT TO THE RFC)
|
||||
CPPUNIT_ASSERT(wxURI(wxString(wxT("file://e:/wxcode/script1.xml"))).GetPath()
|
||||
== wxT("e:/wxcode/script1.xml") );
|
||||
|
||||
//file:/// variety
|
||||
CPPUNIT_ASSERT(wxURI(wxString(wxT("file:///e:/wxcode/script1.xml"))).GetPath()
|
||||
== wxT("/e:/wxcode/script1.xml") );
|
||||
|
||||
//file:/ variety
|
||||
CPPUNIT_ASSERT(wxURI(wxString(wxT("file:/e:/wxcode/script1.xml"))).GetPath()
|
||||
== wxT("/e:/wxcode/script1.xml") );
|
||||
|
||||
//file: variety
|
||||
CPPUNIT_ASSERT(wxURI(wxString(wxT("file:e:/wxcode/script1.xml"))).GetPath()
|
||||
== wxT("e:/wxcode/script1.xml") );
|
||||
}
|
||||
|
||||
#if TEST_URL
|
||||
|
||||
const wxChar* pszProblemUrls[] = { wxT("http://www.csdn.net"),
|
||||
|
Loading…
Reference in New Issue
Block a user