]> git.saurik.com Git - wxWidgets.git/commitdiff
fix wxURI::GetUser() for URIs without password; added unit test case for it (closes...
authorVadim Zeitlin <vadim@wxwidgets.org>
Wed, 21 Jan 2009 17:02:11 +0000 (17:02 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Wed, 21 Jan 2009 17:02:11 +0000 (17:02 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58272 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/common/uri.cpp
tests/uris/uris.cpp

index fd5b69caaf8afef3038883ba53cb9fb30ed17600..aac7aec3d19d2c7a6a79ccb9b2a229ff0f4e3539 100644 (file)
@@ -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
index e4920fcec65df1b7c8aa2ede45a691167f8add08..f2cc591394b5fff3f31e92aab102661bf72d27ee 100644 (file)
@@ -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); \