[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    branches/kdepim/enterprise4/kdepimlibs
From:       Thomas McGuire <mcguire () kde ! org>
Date:       2009-08-13 15:33:26
Message-ID: 1250177606.782835.9217.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 1010908 by tmcguire:

Merged revisions 1007460 via svnmerge from 
svn+ssh://tmcguire@svn.kde.org/home/kde/branches/KDE/4.3/kdepimlibs

........
  r1007460 | tmcguire | 2009-08-05 21:31:23 +0200 (Wed, 05 Aug 2009) | 8 lines
  
  Backport r1005872 by mkoller from trunk to the 4.3 branch:
  
  CCBUG: 201900
  
  Allow ( ) inside URLs.
  Also add a unit test.
........


 _M            . (directory)  
 M  +7 -3      kpimutils/linklocator.cpp  
 M  +90 -0     kpimutils/tests/testlinklocator.cpp  
 M  +4 -0      kpimutils/tests/testlinklocator.h  


** branches/kdepim/enterprise4/kdepimlibs #property svnmerge-integrated
   - /branches/KDE/4.3/kdepimlibs:1-986158,990023,990532,990575,990631,990684,991932,996755,997101,997490,998251,1000615
  + /branches/KDE/4.3/kdepimlibs:1-986158,990023,990532,990575,990631,990684,991932,996755,997101,997490,998251,1000615,1007460
                
--- branches/kdepim/enterprise4/kdepimlibs/kpimutils/linklocator.cpp #1010907:1010908
@@ -107,15 +107,19 @@
 {
   QString url;
   if ( atUrl() ) {
-    // handle cases like this: <link>http://foobar.org/</link>
+    // for reference: rfc1738:
+    // Thus, only alphanumerics, the special characters "$-_.+!*'(),", and
+    // reserved characters used for their reserved purposes may be used
+    // unencoded within a URL.
+    // NOTE: this implementation is not RFC conforming
     int start = mPos;
     while ( mPos < (int)mText.length() &&
             mText[mPos] > ' ' && mText[mPos] != '"' &&
-            QString( "<>()[]" ).indexOf( mText[mPos] ) == -1 ) {
+            QString( "<>[]" ).indexOf( mText[mPos] ) == -1 ) {
       ++mPos;
     }
 
-    /* some URLs really end with:  # / & - _    */
+    // some URLs really end with:  # / & - _
     const QString allowedSpecialChars = QString( "#/&-_" );
     while ( mPos > start && mText[mPos-1].isPunct() &&
             allowedSpecialChars.indexOf( mText[mPos-1] ) == -1 ) {
--- branches/kdepim/enterprise4/kdepimlibs/kpimutils/tests/testlinklocator.cpp \
#1010907:1010908 @@ -19,6 +19,7 @@
   Boston, MA 02110-1301, USA.
 */
 #include <qtest_kde.h>
+#include <kdebug.h>
 
 #include "testlinklocator.h"
 #include "testlinklocator.moc"
@@ -104,3 +105,92 @@
   QVERIFY( llq.getEmailAddress() == "foo@bar-bar.baz" );
 }
 
+void LinkLocatorTest::testGetUrl()
+{
+  QStringList brackets;
+  brackets << "" << "";   // no brackets
+  brackets << "(" << ")";
+  brackets << "<" << ">";
+  brackets << "[" << "]";
+  brackets << "<link>" << "</link>";
+
+  for (int i = 0; i < brackets.count(); i += 2)
+    testGetUrl2(brackets[i], brackets[i+1]);
+}
+
+void LinkLocatorTest::testGetUrl2(const QString &left, const QString &right)
+{
+  QStringList schemas;
+  schemas << "http://";
+  schemas << "https://";
+  schemas << "vnc://";
+  schemas << "fish://";
+  schemas << "ftp://";
+  schemas << "ftps://";
+  schemas << "sftp://";
+  schemas << "smb://";
+  schemas << "file://";
+
+  QStringList urls;
+  urls << "www.kde.org";
+  urls << "user@www.kde.org";
+  urls << "user:pass@www.kde.org";
+  urls << "user:pass@www.kde.org:1234";
+  urls << "user:pass@www.kde.org:1234/sub/path";
+  urls << "user:pass@www.kde.org:1234/sub/path?a=1";
+  urls << "user:pass@www.kde.org:1234/sub/path?a=1#anchor";
+  urls << "user:pass@www.kde.org:1234/sub/path/special(123)?a=1#anchor";
+  urls << "user:pass@www.kde.org:1234/sub/path:with:colon/special(123)?a=1#anchor";
+
+  foreach (QString schema, schemas)
+  {
+    foreach (QString url, urls)
+    {
+      QString test(left + schema + url + right);
+      LinkLocator ll(test, left.length());
+      QString gotUrl = ll.getUrl();
+
+      bool ok = ( gotUrl == (schema + url) );
+      qDebug() << "check:" << (ok ? "OK" : "NOK") << test << "=>" << (schema + url);
+      QVERIFY2( ok, qPrintable(test) );
+    }
+  }
+
+  QStringList urlsWithoutSchema;
+  urlsWithoutSchema << ".kde.org";
+  urlsWithoutSchema << ".kde.org:1234/sub/path";
+  urlsWithoutSchema << ".kde.org:1234/sub/path?a=1";
+  urlsWithoutSchema << ".kde.org:1234/sub/path?a=1#anchor";
+  urlsWithoutSchema << ".kde.org:1234/sub/path/special(123)?a=1#anchor";
+  urlsWithoutSchema << ".kde.org:1234/sub/path:with:colon/special(123)?a=1#anchor";
+
+  QStringList starts;
+  starts << "www" << "ftp" << "news:www";
+
+  foreach (QString start, starts)
+  {
+    foreach (QString url, urlsWithoutSchema)
+    {
+      QString test(left + start + url + right);
+      LinkLocator ll(test, left.length());
+      QString gotUrl = ll.getUrl();
+
+      bool ok = ( gotUrl == (start + url) );
+      qDebug() << "check:" << (ok ? "OK" : "NOK") << test << "=>" << (start + url);
+      QVERIFY2( ok, qPrintable(test) );
+    }
+  }
+
+  // mailto
+  {
+    QString addr = "mailto:test@kde.org";
+    QString test(left + addr + right);
+    LinkLocator ll(test, left.length());
+
+    QString gotUrl = ll.getUrl();
+
+    bool ok = ( gotUrl == addr );
+    qDebug() << "check:" << (ok ? "OK" : "NOK") << test << "=>" << addr;
+    QVERIFY2( ok, qPrintable(test) );
+  }
+}
--- branches/kdepim/enterprise4/kdepimlibs/kpimutils/tests/testlinklocator.h \
#1010907:1010908 @@ -29,6 +29,10 @@
   Q_OBJECT
   private Q_SLOTS:
     void testGetEmailAddress();
+    void testGetUrl();
+
+  private:
+    void testGetUrl2(const QString &left, const QString &right);
 };
 
 #endif


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic