[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