// ---------------------------------------------------------------------------
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
CPPUNIT_TEST( IPv6 );
CPPUNIT_TEST( Server );
CPPUNIT_TEST( Paths );
+ CPPUNIT_TEST( UserAndPass );
CPPUNIT_TEST( NormalResolving );
CPPUNIT_TEST( ComplexResolving );
CPPUNIT_TEST( ReallyComplexResolving );
void IPv6();
void Server();
void Paths();
+ void UserAndPass();
void NormalResolving();
void ComplexResolving();
void ReallyComplexResolving();
#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",
"../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); \