fix wxURI::GetUser() for URIs without password; added unit test case for it (closes #10412)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58272 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -184,22 +184,19 @@ void wxURI::AppendNextEscaped(wxString& s, const char *& p)
|
||||
// ---------------------------------------------------------------------------
|
||||
wxString wxURI::GetUser() const
|
||||
{
|
||||
size_t dwPasswordPos = m_userinfo.find(':');
|
||||
|
||||
if (dwPasswordPos == wxString::npos)
|
||||
dwPasswordPos = 0;
|
||||
|
||||
return m_userinfo(0, dwPasswordPos);
|
||||
// if there is no colon at all, find() returns npos and this method returns
|
||||
// the entire string which is correct as it means that password was omitted
|
||||
return m_userinfo(0, m_userinfo.find(':'));
|
||||
}
|
||||
|
||||
wxString wxURI::GetPassword() const
|
||||
{
|
||||
size_t dwPasswordPos = m_userinfo.find(':');
|
||||
size_t posColon = m_userinfo.find(':');
|
||||
|
||||
if (dwPasswordPos == wxString::npos)
|
||||
if ( posColon == wxString::npos )
|
||||
return "";
|
||||
else
|
||||
return m_userinfo(dwPasswordPos+1, m_userinfo.length() + 1);
|
||||
|
||||
return m_userinfo(posColon + 1, wxString::npos);
|
||||
}
|
||||
|
||||
// combine all URI fields in a single string, applying funcDecode to each
|
||||
|
@@ -47,6 +47,7 @@ private:
|
||||
CPPUNIT_TEST( IPv6 );
|
||||
CPPUNIT_TEST( Server );
|
||||
CPPUNIT_TEST( Paths );
|
||||
CPPUNIT_TEST( UserAndPass );
|
||||
CPPUNIT_TEST( NormalResolving );
|
||||
CPPUNIT_TEST( ComplexResolving );
|
||||
CPPUNIT_TEST( ReallyComplexResolving );
|
||||
@@ -68,6 +69,7 @@ private:
|
||||
void IPv6();
|
||||
void Server();
|
||||
void Paths();
|
||||
void UserAndPass();
|
||||
void NormalResolving();
|
||||
void ComplexResolving();
|
||||
void ReallyComplexResolving();
|
||||
@@ -111,6 +113,9 @@ URITestCase::URITestCase()
|
||||
#define URI_ASSERT_PATH_EQUAL(uri, expected) \
|
||||
URI_ASSERT_PART_EQUAL((uri), (expected), GetPath())
|
||||
|
||||
#define URI_ASSERT_USER_EQUAL(uri, expected) \
|
||||
URI_ASSERT_PART_EQUAL((uri), (expected), GetUser())
|
||||
|
||||
void URITestCase::IPv4()
|
||||
{
|
||||
URI_ASSERT_HOSTTYPE_EQUAL("http://user:password@192.168.1.100:5050/path",
|
||||
@@ -192,6 +197,13 @@ void URITestCase::Paths()
|
||||
"../joe", BuildURI());
|
||||
}
|
||||
|
||||
void URITestCase::UserAndPass()
|
||||
{
|
||||
URI_ASSERT_USER_EQUAL("http://user:pass@host/path/", "user");
|
||||
URI_ASSERT_USER_EQUAL("http://user@host/path/", "user");
|
||||
URI_ASSERT_USER_EQUAL("http://host/path/", "");
|
||||
}
|
||||
|
||||
#define URI_TEST_RESOLVE_IMPL(string, eq, strict) \
|
||||
{ \
|
||||
wxURI uri(string); \
|
||||
|
Reference in New Issue
Block a user