QUrl: add RemoveFilename to UrlFormattingOptions.
This allows to find the parent directory url using url.adjusted(QUrl::RemoveFilename). Change-Id: I1ca433ac67e4f93080de54a9b7ab2e538509ed04 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
parent
602c911820
commit
10023de7a8
@ -225,6 +225,9 @@
|
|||||||
\value RemoveQuery The query part of the URL (following a '?' character)
|
\value RemoveQuery The query part of the URL (following a '?' character)
|
||||||
is removed.
|
is removed.
|
||||||
\value RemoveFragment
|
\value RemoveFragment
|
||||||
|
\value RemoveFilename The filename (i.e. everything after the last '/' in the path) is removed.
|
||||||
|
The trailing '/' is kept, unless StripTrailingSlash is set.
|
||||||
|
Only valid if RemovePath is not set.
|
||||||
\value PreferLocalFile If the URL is a local file according to isLocalFile()
|
\value PreferLocalFile If the URL is a local file according to isLocalFile()
|
||||||
and contains no query or fragment, a local file path is returned.
|
and contains no query or fragment, a local file path is returned.
|
||||||
\value StripTrailingSlash The trailing slash is removed if one is present.
|
\value StripTrailingSlash The trailing slash is removed if one is present.
|
||||||
@ -800,6 +803,12 @@ inline void QUrlPrivate::appendPassword(QString &appendTo, QUrl::FormattingOptio
|
|||||||
inline void QUrlPrivate::appendPath(QString &appendTo, QUrl::FormattingOptions options, Section appendingTo) const
|
inline void QUrlPrivate::appendPath(QString &appendTo, QUrl::FormattingOptions options, Section appendingTo) const
|
||||||
{
|
{
|
||||||
QString thePath = path;
|
QString thePath = path;
|
||||||
|
if (options & QUrl::RemoveFilename) {
|
||||||
|
const int slash = path.lastIndexOf(QLatin1Char('/'));
|
||||||
|
if (slash == -1)
|
||||||
|
return;
|
||||||
|
thePath = path.left(slash+1);
|
||||||
|
}
|
||||||
// check if we need to remove trailing slashes
|
// check if we need to remove trailing slashes
|
||||||
if ((options & QUrl::StripTrailingSlash) && !thePath.isEmpty() && thePath != QLatin1String("/") && thePath.endsWith(QLatin1Char('/')))
|
if ((options & QUrl::StripTrailingSlash) && !thePath.isEmpty() && thePath != QLatin1String("/") && thePath.endsWith(QLatin1Char('/')))
|
||||||
thePath.chop(1);
|
thePath.chop(1);
|
||||||
@ -3226,7 +3235,7 @@ QUrl QUrl::adjusted(QUrl::FormattingOptions options) const
|
|||||||
that.setFragment(QString());
|
that.setFragment(QString());
|
||||||
if (options & RemovePath) {
|
if (options & RemovePath) {
|
||||||
that.setPath(QString());
|
that.setPath(QString());
|
||||||
} else if (options & StripTrailingSlash) {
|
} else if (options & (StripTrailingSlash | RemoveFilename)) {
|
||||||
QString path;
|
QString path;
|
||||||
d->appendPath(path, options, QUrlPrivate::Path);
|
d->appendPath(path, options, QUrlPrivate::Path);
|
||||||
that.setPath(path);
|
that.setPath(path);
|
||||||
|
@ -136,7 +136,8 @@ public:
|
|||||||
RemoveFragment = 0x80,
|
RemoveFragment = 0x80,
|
||||||
// 0x100 was a private code in Qt 4, keep unused for a while
|
// 0x100 was a private code in Qt 4, keep unused for a while
|
||||||
PreferLocalFile = 0x200,
|
PreferLocalFile = 0x200,
|
||||||
StripTrailingSlash = 0x400
|
StripTrailingSlash = 0x400,
|
||||||
|
RemoveFilename = 0x800
|
||||||
};
|
};
|
||||||
|
|
||||||
enum ComponentFormattingOption {
|
enum ComponentFormattingOption {
|
||||||
|
@ -2428,27 +2428,35 @@ void tst_QUrl::fromEncoded()
|
|||||||
void tst_QUrl::stripTrailingSlash_data()
|
void tst_QUrl::stripTrailingSlash_data()
|
||||||
{
|
{
|
||||||
QTest::addColumn<QString>("url");
|
QTest::addColumn<QString>("url");
|
||||||
QTest::addColumn<QString>("expected");
|
QTest::addColumn<QString>("expectedStrip"); // toString(Strip)
|
||||||
|
QTest::addColumn<QString>("expectedDir"); // toString(RemoveFilename)
|
||||||
|
QTest::addColumn<QString>("expectedDirStrip"); // toString(RemoveFilename|Strip)
|
||||||
|
|
||||||
QTest::newRow("subdir no slash") << "ftp://kde.org/dir/subdir" << "ftp://kde.org/dir/subdir";
|
QTest::newRow("subdir no slash") << "ftp://kde.org/dir/subdir" << "ftp://kde.org/dir/subdir" << "ftp://kde.org/dir/" << "ftp://kde.org/dir";
|
||||||
QTest::newRow("ftp no slash") << "ftp://ftp.de.kde.org/dir" << "ftp://ftp.de.kde.org/dir";
|
QTest::newRow("ftp no slash") << "ftp://kde.org/dir" << "ftp://kde.org/dir" << "ftp://kde.org/" << "ftp://kde.org/";
|
||||||
QTest::newRow("ftp slash") << "ftp://ftp.de.kde.org/dir/" << "ftp://ftp.de.kde.org/dir";
|
QTest::newRow("ftp slash") << "ftp://kde.org/dir/" << "ftp://kde.org/dir" << "ftp://kde.org/dir/" << "ftp://kde.org/dir";
|
||||||
QTest::newRow("file slash") << "file:///dir/" << "file:///dir";
|
QTest::newRow("file slash") << "file:///dir/" << "file:///dir" << "file:///dir/" << "file:///dir";
|
||||||
QTest::newRow("file no slash") << "file:///dir/" << "file:///dir";
|
QTest::newRow("file no slash") << "file:///dir" << "file:///dir" << "file:///" << "file:///";
|
||||||
QTest::newRow("file root") << "file:///" << "file:///";
|
QTest::newRow("file root") << "file:///" << "file:///" << "file:///" << "file:///";
|
||||||
QTest::newRow("no path") << "remote://" << "remote://";
|
QTest::newRow("no path") << "remote://" << "remote://" << "remote://" << "remote://";
|
||||||
}
|
}
|
||||||
|
|
||||||
void tst_QUrl::stripTrailingSlash()
|
void tst_QUrl::stripTrailingSlash()
|
||||||
{
|
{
|
||||||
QFETCH(QString, url);
|
QFETCH(QString, url);
|
||||||
QFETCH(QString, expected);
|
QFETCH(QString, expectedStrip);
|
||||||
|
QFETCH(QString, expectedDir);
|
||||||
|
QFETCH(QString, expectedDirStrip);
|
||||||
|
|
||||||
QUrl u(url);
|
QUrl u(url);
|
||||||
QCOMPARE(u.toString(QUrl::StripTrailingSlash), expected);
|
QCOMPARE(u.toString(QUrl::StripTrailingSlash), expectedStrip);
|
||||||
|
QCOMPARE(u.toString(QUrl::RemoveFilename), expectedDir);
|
||||||
|
QCOMPARE(u.toString(QUrl::RemoveFilename | QUrl::StripTrailingSlash), expectedDirStrip);
|
||||||
|
|
||||||
// Same thing, using QUrl::adjusted()
|
// Same thing, using QUrl::adjusted()
|
||||||
QCOMPARE(u.adjusted(QUrl::StripTrailingSlash).toString(), expected);
|
QCOMPARE(u.adjusted(QUrl::StripTrailingSlash).toString(), expectedStrip);
|
||||||
|
QCOMPARE(u.adjusted(QUrl::RemoveFilename).toString(), expectedDir);
|
||||||
|
QCOMPARE(u.adjusted(QUrl::RemoveFilename | QUrl::StripTrailingSlash).toString(), expectedDirStrip);
|
||||||
}
|
}
|
||||||
|
|
||||||
void tst_QUrl::hosts_data()
|
void tst_QUrl::hosts_data()
|
||||||
|
Loading…
Reference in New Issue
Block a user