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:
Vadim Zeitlin
2009-01-21 17:02:11 +00:00
parent d81b2f54cc
commit 62e3e6c2bc
2 changed files with 19 additions and 10 deletions

View File

@@ -184,22 +184,19 @@ void wxURI::AppendNextEscaped(wxString& s, const char *& p)
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
wxString wxURI::GetUser() const wxString wxURI::GetUser() const
{ {
size_t dwPasswordPos = m_userinfo.find(':'); // 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
if (dwPasswordPos == wxString::npos) return m_userinfo(0, m_userinfo.find(':'));
dwPasswordPos = 0;
return m_userinfo(0, dwPasswordPos);
} }
wxString wxURI::GetPassword() const 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 ""; 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 // combine all URI fields in a single string, applying funcDecode to each

View File

@@ -47,6 +47,7 @@ private:
CPPUNIT_TEST( IPv6 ); CPPUNIT_TEST( IPv6 );
CPPUNIT_TEST( Server ); CPPUNIT_TEST( Server );
CPPUNIT_TEST( Paths ); CPPUNIT_TEST( Paths );
CPPUNIT_TEST( UserAndPass );
CPPUNIT_TEST( NormalResolving ); CPPUNIT_TEST( NormalResolving );
CPPUNIT_TEST( ComplexResolving ); CPPUNIT_TEST( ComplexResolving );
CPPUNIT_TEST( ReallyComplexResolving ); CPPUNIT_TEST( ReallyComplexResolving );
@@ -68,6 +69,7 @@ private:
void IPv6(); void IPv6();
void Server(); void Server();
void Paths(); void Paths();
void UserAndPass();
void NormalResolving(); void NormalResolving();
void ComplexResolving(); void ComplexResolving();
void ReallyComplexResolving(); void ReallyComplexResolving();
@@ -111,6 +113,9 @@ URITestCase::URITestCase()
#define URI_ASSERT_PATH_EQUAL(uri, expected) \ #define URI_ASSERT_PATH_EQUAL(uri, expected) \
URI_ASSERT_PART_EQUAL((uri), (expected), GetPath()) URI_ASSERT_PART_EQUAL((uri), (expected), GetPath())
#define URI_ASSERT_USER_EQUAL(uri, expected) \
URI_ASSERT_PART_EQUAL((uri), (expected), GetUser())
void URITestCase::IPv4() void URITestCase::IPv4()
{ {
URI_ASSERT_HOSTTYPE_EQUAL("http://user:password@192.168.1.100:5050/path", URI_ASSERT_HOSTTYPE_EQUAL("http://user:password@192.168.1.100:5050/path",
@@ -192,6 +197,13 @@ void URITestCase::Paths()
"../joe", BuildURI()); "../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) \ #define URI_TEST_RESOLVE_IMPL(string, eq, strict) \
{ \ { \
wxURI uri(string); \ wxURI uri(string); \