summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/io/qurl.cpp507
-rw-r--r--src/corelib/io/qurl.h39
-rw-r--r--src/corelib/io/qurlquery.h23
-rw-r--r--tests/auto/corelib/io/qurl/tst_qurl.cpp101
-rw-r--r--tests/auto/corelib/io/qurlquery/tst_qurlquery.cpp120
5 files changed, 157 insertions, 633 deletions
diff --git a/src/corelib/io/qurl.cpp b/src/corelib/io/qurl.cpp
index fe8255118c..b4e46b0473 100644
--- a/src/corelib/io/qurl.cpp
+++ b/src/corelib/io/qurl.cpp
@@ -4971,57 +4971,6 @@ bool QUrl::hasQuery() const
}
/*!
- Sets the characters used for delimiting between keys and values,
- and between key-value pairs in the URL's query string. The default
- value delimiter is '=' and the default pair delimiter is '&'.
-
- \img qurl-querystring.png
-
- \a valueDelimiter will be used for separating keys from values,
- and \a pairDelimiter will be used to separate key-value pairs.
- Any occurrences of these delimiting characters in the encoded
- representation of the keys and values of the query string are
- percent encoded.
-
- If \a valueDelimiter is set to '-' and \a pairDelimiter is '/',
- the above query string would instead be represented like this:
-
- \snippet doc/src/snippets/code/src_corelib_io_qurl.cpp 4
-
- Calling this function does not change the delimiters of the
- current query string. It only affects queryItems(),
- setQueryItems() and addQueryItems().
-*/
-void QUrl::setQueryDelimiters(char valueDelimiter, char pairDelimiter)
-{
- if (!d) d = new QUrlPrivate;
- detach();
-
- d->valueDelimiter = valueDelimiter;
- d->pairDelimiter = pairDelimiter;
-}
-
-/*!
- Returns the character used to delimit between key-value pairs in
- the query string of the URL.
-*/
-char QUrl::queryPairDelimiter() const
-{
- if (!d) return '&';
- return d->pairDelimiter;
-}
-
-/*!
- Returns the character used to delimit between keys and values in
- the query string of the URL.
-*/
-char QUrl::queryValueDelimiter() const
-{
- if (!d) return '=';
- return d->valueDelimiter;
-}
-
-/*!
Sets the query string of the URL to \a query. The string is
inserted as-is, and no further encoding is performed when calling
toEncoded().
@@ -5050,462 +4999,6 @@ void QUrl::setEncodedQuery(const QByteArray &query)
}
/*!
- Sets the query string of the URL to an encoded version of \a
- query. The contents of \a query are converted to a string
- internally, each pair delimited by the character returned by
- pairDelimiter(), and the key and value are delimited by
- valueDelimiter().
-
- \note This method does not encode spaces (ASCII 0x20) as plus (+) signs,
- like HTML forms do. If you need that kind of encoding, you must encode
- the value yourself and use QUrl::setEncodedQueryItems.
-
- \sa setQueryDelimiters(), queryItems(), setEncodedQueryItems()
-*/
-void QUrl::setQueryItems(const QList<QPair<QString, QString> > &query)
-{
- if (!d) d = new QUrlPrivate;
- if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
- detach();
-
- char alsoEncode[3];
- alsoEncode[0] = d->valueDelimiter;
- alsoEncode[1] = d->pairDelimiter;
- alsoEncode[2] = 0;
-
- QByteArray queryTmp;
- for (int i = 0; i < query.size(); i++) {
- if (i) queryTmp += d->pairDelimiter;
- // query = *( pchar / "/" / "?" )
- queryTmp += toPercentEncodingHelper(query.at(i).first, queryExcludeChars, alsoEncode);
- queryTmp += d->valueDelimiter;
- // query = *( pchar / "/" / "?" )
- queryTmp += toPercentEncodingHelper(query.at(i).second, queryExcludeChars, alsoEncode);
- }
-
- d->query = queryTmp;
- d->hasQuery = !query.isEmpty();
-}
-
-/*!
- \since 4.4
-
- Sets the query string of the URL to the encoded version of \a
- query. The contents of \a query are converted to a string
- internally, each pair delimited by the character returned by
- pairDelimiter(), and the key and value are delimited by
- valueDelimiter().
-
- Note: this function does not verify that the key-value pairs
- are properly encoded. It is the caller's responsibility to ensure
- that the query delimiters are properly encoded, if any.
-
- \sa setQueryDelimiters(), encodedQueryItems(), setQueryItems()
-*/
-void QUrl::setEncodedQueryItems(const QList<QPair<QByteArray, QByteArray> > &query)
-{
- if (!d) d = new QUrlPrivate;
- if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
- detach();
-
- QByteArray queryTmp;
- for (int i = 0; i < query.size(); i++) {
- if (i) queryTmp += d->pairDelimiter;
- queryTmp += query.at(i).first;
- queryTmp += d->valueDelimiter;
- queryTmp += query.at(i).second;
- }
-
- d->query = queryTmp;
- d->hasQuery = !query.isEmpty();
-}
-
-/*!
- Inserts the pair \a key = \a value into the query string of the
- URL.
-
- The key/value pair is encoded before it is added to the query. The
- pair is converted into separate strings internally. The \a key and
- \a value is first encoded into UTF-8 and then delimited by the
- character returned by valueDelimiter(). Each key/value pair is
- delimited by the character returned by pairDelimiter().
-
- \note This method does not encode spaces (ASCII 0x20) as plus (+) signs,
- like HTML forms do. If you need that kind of encoding, you must encode
- the value yourself and use QUrl::addEncodedQueryItem.
-
- \sa addEncodedQueryItem()
-*/
-void QUrl::addQueryItem(const QString &key, const QString &value)
-{
- if (!d) d = new QUrlPrivate;
- if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
- detach();
-
- char alsoEncode[3];
- alsoEncode[0] = d->valueDelimiter;
- alsoEncode[1] = d->pairDelimiter;
- alsoEncode[2] = 0;
-
- if (!d->query.isEmpty())
- d->query += d->pairDelimiter;
-
- // query = *( pchar / "/" / "?" )
- d->query += toPercentEncodingHelper(key, queryExcludeChars, alsoEncode);
- d->query += d->valueDelimiter;
- // query = *( pchar / "/" / "?" )
- d->query += toPercentEncodingHelper(value, queryExcludeChars, alsoEncode);
-
- d->hasQuery = !d->query.isEmpty();
-}
-
-/*!
- \since 4.4
-
- Inserts the pair \a key = \a value into the query string of the
- URL.
-
- Note: this function does not verify that either \a key or \a value
- are properly encoded. It is the caller's responsibility to ensure
- that the query delimiters are properly encoded, if any.
-
- \sa addQueryItem(), setQueryDelimiters()
-*/
-void QUrl::addEncodedQueryItem(const QByteArray &key, const QByteArray &value)
-{
- if (!d) d = new QUrlPrivate;
- if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
- detach();
-
- if (!d->query.isEmpty())
- d->query += d->pairDelimiter;
-
- d->query += key;
- d->query += d->valueDelimiter;
- d->query += value;
-
- d->hasQuery = !d->query.isEmpty();
-}
-
-/*!
- Returns the query string of the URL, as a map of keys and values.
-
- \note This method does not decode spaces plus (+) signs as spaces (ASCII
- 0x20), like HTML forms do. If you need that kind of decoding, you must
- use QUrl::encodedQueryItems and decode the data yourself.
-
- \sa setQueryItems(), setEncodedQuery()
-*/
-QList<QPair<QString, QString> > QUrl::queryItems() const
-{
- if (!d) return QList<QPair<QString, QString> >();
- if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
-
- QList<QPair<QString, QString> > itemMap;
-
- int pos = 0;
- const char *query = d->query.constData();
- while (pos < d->query.size()) {
- int valuedelim, end;
- d->queryItem(pos, &valuedelim, &end);
- QByteArray q(query + pos, valuedelim - pos);
- if (valuedelim < end) {
- QByteArray v(query + valuedelim + 1, end - valuedelim - 1);
- itemMap += qMakePair(fromPercentEncodingMutable(&q),
- fromPercentEncodingMutable(&v));
- } else {
- itemMap += qMakePair(fromPercentEncodingMutable(&q), QString());
- }
- pos = end + 1;
- }
-
- return itemMap;
-}
-
-/*!
- \since 4.4
-
- Returns the query string of the URL, as a map of encoded keys and values.
-
- \sa setEncodedQueryItems(), setQueryItems(), setEncodedQuery()
-*/
-QList<QPair<QByteArray, QByteArray> > QUrl::encodedQueryItems() const
-{
- if (!d) return QList<QPair<QByteArray, QByteArray> >();
- if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
-
- QList<QPair<QByteArray, QByteArray> > itemMap;
-
- int pos = 0;
- const char *query = d->query.constData();
- while (pos < d->query.size()) {
- int valuedelim, end;
- d->queryItem(pos, &valuedelim, &end);
- if (valuedelim < end)
- itemMap += qMakePair(QByteArray(query + pos, valuedelim - pos),
- QByteArray(query + valuedelim + 1, end - valuedelim - 1));
- else
- itemMap += qMakePair(QByteArray(query + pos, valuedelim - pos), QByteArray());
- pos = end + 1;
- }
-
- return itemMap;
-}
-
-/*!
- Returns true if there is a query string pair whose key is equal
- to \a key from the URL.
-
- \sa hasEncodedQueryItem()
-*/
-bool QUrl::hasQueryItem(const QString &key) const
-{
- if (!d) return false;
- return hasEncodedQueryItem(key.toUtf8().toPercentEncoding(queryExcludeChars));
-}
-
-/*!
- \since 4.4
-
- Returns true if there is a query string pair whose key is equal
- to \a key from the URL.
-
- Note: if the encoded \a key does not match the encoded version of
- the query, this function will return false. That is, if the
- encoded query of this URL is "search=Qt%20Rules", calling this
- function with \a key = "%73earch" will return false.
-
- \sa hasQueryItem()
-*/
-bool QUrl::hasEncodedQueryItem(const QByteArray &key) const
-{
- if (!d) return false;
- if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
-
- int pos = 0;
- const char *query = d->query.constData();
- while (pos < d->query.size()) {
- int valuedelim, end;
- d->queryItem(pos, &valuedelim, &end);
- if (key == QByteArray::fromRawData(query + pos, valuedelim - pos))
- return true;
- pos = end + 1;
- }
- return false;
-}
-
-/*!
- Returns the first query string value whose key is equal to \a key
- from the URL.
-
- \note This method does not decode spaces plus (+) signs as spaces (ASCII
- 0x20), like HTML forms do. If you need that kind of decoding, you must
- use QUrl::encodedQueryItemValue and decode the data yourself.
-
- \sa allQueryItemValues()
-*/
-QString QUrl::queryItemValue(const QString &key) const
-{
- if (!d) return QString();
- QByteArray tmp = encodedQueryItemValue(key.toUtf8().toPercentEncoding(queryExcludeChars));
- return fromPercentEncodingMutable(&tmp);
-}
-
-/*!
- \since 4.4
-
- Returns the first query string value whose key is equal to \a key
- from the URL.
-
- Note: if the encoded \a key does not match the encoded version of
- the query, this function will not work. That is, if the
- encoded query of this URL is "search=Qt%20Rules", calling this
- function with \a key = "%73earch" will return an empty string.
-
- \sa queryItemValue(), allQueryItemValues()
-*/
-QByteArray QUrl::encodedQueryItemValue(const QByteArray &key) const
-{
- if (!d) return QByteArray();
- if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
-
- int pos = 0;
- const char *query = d->query.constData();
- while (pos < d->query.size()) {
- int valuedelim, end;
- d->queryItem(pos, &valuedelim, &end);
- if (key == QByteArray::fromRawData(query + pos, valuedelim - pos))
- return valuedelim < end ?
- QByteArray(query + valuedelim + 1, end - valuedelim - 1) : QByteArray();
- pos = end + 1;
- }
- return QByteArray();
-}
-
-/*!
- Returns the a list of query string values whose key is equal to
- \a key from the URL.
-
- \note This method does not decode spaces plus (+) signs as spaces (ASCII
- 0x20), like HTML forms do. If you need that kind of decoding, you must
- use QUrl::allEncodedQueryItemValues and decode the data yourself.
-
- \sa queryItemValue()
-*/
-QStringList QUrl::allQueryItemValues(const QString &key) const
-{
- if (!d) return QStringList();
- if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
-
- QByteArray encodedKey = key.toUtf8().toPercentEncoding(queryExcludeChars);
- QStringList values;
-
- int pos = 0;
- const char *query = d->query.constData();
- while (pos < d->query.size()) {
- int valuedelim, end;
- d->queryItem(pos, &valuedelim, &end);
- if (encodedKey == QByteArray::fromRawData(query + pos, valuedelim - pos)) {
- QByteArray v(query + valuedelim + 1, end - valuedelim - 1);
- values += valuedelim < end ?
- fromPercentEncodingMutable(&v)
- : QString();
- }
- pos = end + 1;
- }
-
- return values;
-}
-
-/*!
- \since 4.4
-
- Returns the a list of query string values whose key is equal to
- \a key from the URL.
-
- Note: if the encoded \a key does not match the encoded version of
- the query, this function will not work. That is, if the
- encoded query of this URL is "search=Qt%20Rules", calling this
- function with \a key = "%73earch" will return an empty list.
-
- \sa allQueryItemValues(), queryItemValue(), encodedQueryItemValue()
-*/
-QList<QByteArray> QUrl::allEncodedQueryItemValues(const QByteArray &key) const
-{
- if (!d) return QList<QByteArray>();
- if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
-
- QList<QByteArray> values;
-
- int pos = 0;
- const char *query = d->query.constData();
- while (pos < d->query.size()) {
- int valuedelim, end;
- d->queryItem(pos, &valuedelim, &end);
- if (key == QByteArray::fromRawData(query + pos, valuedelim - pos))
- values += valuedelim < end ?
- QByteArray(query + valuedelim + 1, end - valuedelim - 1)
- : QByteArray();
- pos = end + 1;
- }
-
- return values;
-}
-
-/*!
- Removes the first query string pair whose key is equal to \a key
- from the URL.
-
- \sa removeAllQueryItems()
-*/
-void QUrl::removeQueryItem(const QString &key)
-{
- if (!d) return;
- removeEncodedQueryItem(key.toUtf8().toPercentEncoding(queryExcludeChars));
-}
-
-/*!
- \since 4.4
-
- Removes the first query string pair whose key is equal to \a key
- from the URL.
-
- Note: if the encoded \a key does not match the encoded version of
- the query, this function will not work. That is, if the
- encoded query of this URL is "search=Qt%20Rules", calling this
- function with \a key = "%73earch" will do nothing.
-
- \sa removeQueryItem(), removeAllQueryItems()
-*/
-void QUrl::removeEncodedQueryItem(const QByteArray &key)
-{
- if (!d) return;
- if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
- detach();
-
- int pos = 0;
- const char *query = d->query.constData();
- while (pos < d->query.size()) {
- int valuedelim, end;
- d->queryItem(pos, &valuedelim, &end);
- if (key == QByteArray::fromRawData(query + pos, valuedelim - pos)) {
- if (end < d->query.size())
- ++end; // remove additional '%'
- d->query.remove(pos, end - pos);
- return;
- }
- pos = end + 1;
- }
-}
-
-/*!
- Removes all the query string pairs whose key is equal to \a key
- from the URL.
-
- \sa removeQueryItem()
-*/
-void QUrl::removeAllQueryItems(const QString &key)
-{
- if (!d) return;
- removeAllEncodedQueryItems(key.toUtf8().toPercentEncoding(queryExcludeChars));
-}
-
-/*!
- \since 4.4
-
- Removes all the query string pairs whose key is equal to \a key
- from the URL.
-
- Note: if the encoded \a key does not match the encoded version of
- the query, this function will not work. That is, if the
- encoded query of this URL is "search=Qt%20Rules", calling this
- function with \a key = "%73earch" will do nothing.
-
- \sa removeQueryItem()
-*/
-void QUrl::removeAllEncodedQueryItems(const QByteArray &key)
-{
- if (!d) return;
- if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
- detach();
-
- int pos = 0;
- const char *query = d->query.constData();
- while (pos < d->query.size()) {
- int valuedelim, end;
- d->queryItem(pos, &valuedelim, &end);
- if (key == QByteArray::fromRawData(query + pos, valuedelim - pos)) {
- if (end < d->query.size())
- ++end; // remove additional '%'
- d->query.remove(pos, end - pos);
- query = d->query.constData(); //required if remove detach;
- } else {
- pos = end + 1;
- }
- }
-}
-
-/*!
Returns the query string of the URL in percent encoded form.
*/
QByteArray QUrl::encodedQuery() const
diff --git a/src/corelib/io/qurl.h b/src/corelib/io/qurl.h
index 1600cb8fa3..55cdcbe2d0 100644
--- a/src/corelib/io/qurl.h
+++ b/src/corelib/io/qurl.h
@@ -44,7 +44,6 @@
#include <QtCore/qbytearray.h>
#include <QtCore/qobjectdefs.h>
-#include <QtCore/qpair.h>
#include <QtCore/qstring.h>
#include <QtCore/qhash.h>
@@ -156,31 +155,8 @@ public:
QByteArray encodedPath() const;
bool hasQuery() const;
-
- void setEncodedQuery(const QByteArray &query);
QByteArray encodedQuery() const;
-
- void setQueryDelimiters(char valueDelimiter, char pairDelimiter);
- char queryValueDelimiter() const;
- char queryPairDelimiter() const;
-
- void setQueryItems(const QList<QPair<QString, QString> > &query);
- void addQueryItem(const QString &key, const QString &value);
- QList<QPair<QString, QString> > queryItems() const;
- bool hasQueryItem(const QString &key) const;
- QString queryItemValue(const QString &key) const;
- QStringList allQueryItemValues(const QString &key) const;
- void removeQueryItem(const QString &key);
- void removeAllQueryItems(const QString &key);
-
- void setEncodedQueryItems(const QList<QPair<QByteArray, QByteArray> > &query);
- void addEncodedQueryItem(const QByteArray &key, const QByteArray &value);
- QList<QPair<QByteArray, QByteArray> > encodedQueryItems() const;
- bool hasEncodedQueryItem(const QByteArray &key) const;
- QByteArray encodedQueryItemValue(const QByteArray &key) const;
- QList<QByteArray> allEncodedQueryItemValues(const QByteArray &key) const;
- void removeEncodedQueryItem(const QByteArray &key);
- void removeAllEncodedQueryItems(const QByteArray &key);
+ void setEncodedQuery(const QByteArray &query);
void setFragment(const QString &fragment);
QString fragment() const;
@@ -218,6 +194,15 @@ public:
{ return fromAce(punycode); }
QT_DEPRECATED static QByteArray toPunycode(const QString &string)
{ return toAce(string); }
+ QT_DEPRECATED inline void setQueryItems(const QList<QPair<QString, QString> > &qry);
+ QT_DEPRECATED inline void addQueryItem(const QString &key, const QString &value);
+ QT_DEPRECATED inline QList<QPair<QString, QString> > queryItems() const;
+ QT_DEPRECATED inline bool hasQueryItem(const QString &key) const;
+ QT_DEPRECATED inline QString queryItemValue(const QString &key) const;
+ QT_DEPRECATED inline QStringList allQueryItemValues(const QString &key) const;
+ QT_DEPRECATED inline void removeQueryItem(const QString &key);
+ QT_DEPRECATED inline void removeAllQueryItems(const QString &key);
+
#endif
static QString fromAce(const QByteArray &);
@@ -262,6 +247,10 @@ Q_CORE_EXPORT QDebug operator<<(QDebug, const QUrl &);
QT_END_NAMESPACE
+#if QT_DEPRECATED_SINCE(5,0)
+# include <QtCore/qurlquery.h>
+#endif
+
QT_END_HEADER
#endif // QURL_H
diff --git a/src/corelib/io/qurlquery.h b/src/corelib/io/qurlquery.h
index e2b28f78e7..3e0baa32bc 100644
--- a/src/corelib/io/qurlquery.h
+++ b/src/corelib/io/qurlquery.h
@@ -46,6 +46,10 @@
#include <QtCore/qshareddata.h>
#include <QtCore/qurl.h>
+#if QT_DEPRECATED_SINCE(5,0)
+#include <QtCore/qstringlist.h>
+#endif
+
QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
@@ -110,6 +114,25 @@ public:
Q_DECLARE_TYPEINFO(QUrlQuery, Q_MOVABLE_TYPE);
Q_DECLARE_SHARED(QUrlQuery)
+#if QT_DEPRECATED_SINCE(5,0)
+inline void QUrl::setQueryItems(const QList<QPair<QString, QString> > &qry)
+{ QUrlQuery q(*this); q.setQueryItems(qry); setQuery(q.query()); }
+inline void QUrl::addQueryItem(const QString &key, const QString &value)
+{ QUrlQuery q(*this); q.addQueryItem(key, value); setQuery(q.query()); }
+inline QList<QPair<QString, QString> > QUrl::queryItems() const
+{ return QUrlQuery(*this).queryItems(); }
+inline bool QUrl::hasQueryItem(const QString &key) const
+{ return QUrlQuery(*this).hasQueryItem(key); }
+inline QString QUrl::queryItemValue(const QString &key) const
+{ return QUrlQuery(*this).queryItemValue(key); }
+inline QStringList QUrl::allQueryItemValues(const QString &key) const
+{ return QUrlQuery(*this).allQueryItemValues(key); }
+inline void QUrl::removeQueryItem(const QString &key)
+{ QUrlQuery q(*this); q.removeQueryItem(key); setQuery(q.query()); }
+inline void QUrl::removeAllQueryItems(const QString &key)
+{ QUrlQuery q(*this); q.removeAllQueryItems(key); }
+#endif
+
QT_END_NAMESPACE
QT_END_HEADER
diff --git a/tests/auto/corelib/io/qurl/tst_qurl.cpp b/tests/auto/corelib/io/qurl/tst_qurl.cpp
index 7ca7fbb81d..900d0b7644 100644
--- a/tests/auto/corelib/io/qurl/tst_qurl.cpp
+++ b/tests/auto/corelib/io/qurl/tst_qurl.cpp
@@ -114,11 +114,8 @@ private slots:
void isRelative_data();
void isRelative();
void setQueryItems();
- void queryItems();
void hasQuery_data();
void hasQuery();
- void hasQueryItem_data();
- void hasQueryItem();
void nameprep();
void isValid();
void schemeValidator_data();
@@ -157,8 +154,6 @@ private slots:
void toEncodedNotUsingUninitializedPath();
void emptyAuthorityRemovesExistingAuthority();
void acceptEmptyAuthoritySegments();
- void removeAllEncodedQueryItems_data();
- void removeAllEncodedQueryItems();
};
// Testing get/set functions
@@ -1416,8 +1411,6 @@ void tst_QUrl::symmetry()
QCOMPARE(url.path(), QString::fromLatin1("/pub"));
// this will be encoded ...
QCOMPARE(url.encodedQuery().constData(), QString::fromLatin1("a=b&a=d%C3%B8&a=f").toLatin1().constData());
- // unencoded
- QCOMPARE(url.allQueryItemValues("a").join(""), QString::fromUtf8("bdøf"));
QCOMPARE(url.fragment(), QString::fromUtf8("vræl"));
QUrl onlyHost("//qt.nokia.com");
@@ -1577,56 +1570,6 @@ void tst_QUrl::setQueryItems()
"/ole&du>anne+jørgen=sant/prosent>%25#top"));
}
-void tst_QUrl::queryItems()
-{
- QUrl url;
- QVERIFY(!url.hasQuery());
-
- QList<QPair<QString, QString> > newItems;
- newItems += qMakePair(QString("2"), QString("b"));
- newItems += qMakePair(QString("1"), QString("a"));
- newItems += qMakePair(QString("3"), QString("c"));
- newItems += qMakePair(QString("4"), QString("a b"));
- newItems += qMakePair(QString("5"), QString("&"));
- newItems += qMakePair(QString("foo bar"), QString("hello world"));
- newItems += qMakePair(QString("foo+bar"), QString("hello+world"));
- newItems += qMakePair(QString("tex"), QString("a + b = c"));
- url.setQueryItems(newItems);
- QVERIFY(url.hasQuery());
-
- QList<QPair<QString, QString> > setItems = url.queryItems();
- QVERIFY(newItems == setItems);
-
- url.addQueryItem("1", "z");
-
- QVERIFY(url.hasQueryItem("1"));
- QCOMPARE(url.queryItemValue("1").toLatin1().constData(), "a");
-
- url.addQueryItem("1", "zz");
-
- QStringList expected;
- expected += "a";
- expected += "z";
- expected += "zz";
- QCOMPARE(expected, url.allQueryItemValues("1"));
-
- url.removeQueryItem("1");
- QCOMPARE(url.allQueryItemValues("1").size(), 2);
- QCOMPARE(url.queryItemValue("1").toLatin1().constData(), "z");
-
- url.removeAllQueryItems("1");
- QVERIFY(!url.hasQueryItem("1"));
-
- QCOMPARE(url.queryItemValue("4").toLatin1().constData(), "a b");
- QCOMPARE(url.queryItemValue("5").toLatin1().constData(), "&");
- QCOMPARE(url.queryItemValue("tex").toLatin1().constData(), "a + b = c");
- QCOMPARE(url.queryItemValue("foo bar").toLatin1().constData(), "hello world");
- url.setUrl("http://www.google.com/search?q=a+b");
- QCOMPARE(url.queryItemValue("q"), QString("a+b"));
- url.setUrl("http://www.google.com/search?q=a=b"); // invalid, but should be tolerated
- QCOMPARE(url.queryItemValue("q"), QString("a=b"));
-}
-
void tst_QUrl::hasQuery_data()
{
QTest::addColumn<QString>("url");
@@ -1656,27 +1599,6 @@ void tst_QUrl::hasQuery()
QCOMPARE(qurl.encodedQuery().isNull(), !trueFalse);
}
-void tst_QUrl::hasQueryItem_data()
-{
- QTest::addColumn<QString>("url");
- QTest::addColumn<QString>("item");
- QTest::addColumn<bool>("trueFalse");
-
- QTest::newRow("no query items") << "http://www.foo.bar" << "baz" << false;
- QTest::newRow("query item: hello") << "http://www.foo.bar?hello=world" << "hello" << true;
- QTest::newRow("no query item: world") << "http://www.foo.bar?hello=world" << "world" << false;
- QTest::newRow("query item: qt") << "http://www.foo.bar?hello=world&qt=rocks" << "qt" << true;
-}
-
-void tst_QUrl::hasQueryItem()
-{
- QFETCH(QString, url);
- QFETCH(QString, item);
- QFETCH(bool, trueFalse);
-
- QCOMPARE(QUrl(url).hasQueryItem(item), trueFalse);
-}
-
void tst_QUrl::nameprep()
{
QUrl url(QString::fromUtf8("http://www.fu""\xc3""\x9f""ball.de/"));
@@ -2568,28 +2490,5 @@ void tst_QUrl::effectiveTLDs()
QCOMPARE(domain.topLevelDomain(), TLD);
}
-void tst_QUrl::removeAllEncodedQueryItems_data()
-{
- QTest::addColumn<QUrl>("url");
- QTest::addColumn<QByteArray>("key");
- QTest::addColumn<QUrl>("result");
-
- QTest::newRow("test1") << QUrl::fromEncoded("http://qt.nokia.com/foo?aaa=a&bbb=b&ccc=c") << QByteArray("bbb") << QUrl::fromEncoded("http://qt.nokia.com/foo?aaa=a&ccc=c");
- QTest::newRow("test2") << QUrl::fromEncoded("http://qt.nokia.com/foo?aaa=a&bbb=b&ccc=c") << QByteArray("aaa") << QUrl::fromEncoded("http://qt.nokia.com/foo?bbb=b&ccc=c");
-// QTest::newRow("test3") << QUrl::fromEncoded("http://qt.nokia.com/foo?aaa=a&bbb=b&ccc=c") << QByteArray("ccc") << QUrl::fromEncoded("http://qt.nokia.com/foo?aaa=a&bbb=b");
- QTest::newRow("test4") << QUrl::fromEncoded("http://qt.nokia.com/foo?aaa=a&bbb=b&ccc=c") << QByteArray("b%62b") << QUrl::fromEncoded("http://qt.nokia.com/foo?aaa=a&bbb=b&ccc=c");
- QTest::newRow("test5") << QUrl::fromEncoded("http://qt.nokia.com/foo?aaa=a&b%62b=b&ccc=c") << QByteArray("b%62b") << QUrl::fromEncoded("http://qt.nokia.com/foo?aaa=a&ccc=c");
- QTest::newRow("test6") << QUrl::fromEncoded("http://qt.nokia.com/foo?aaa=a&b%62b=b&ccc=c") << QByteArray("bbb") << QUrl::fromEncoded("http://qt.nokia.com/foo?aaa=a&b%62b=b&ccc=c");
-}
-
-void tst_QUrl::removeAllEncodedQueryItems()
-{
- QFETCH(QUrl, url);
- QFETCH(QByteArray, key);
- QFETCH(QUrl, result);
- url.removeAllEncodedQueryItems(key);
- QCOMPARE(url, result);
-}
-
QTEST_MAIN(tst_QUrl)
#include "tst_qurl.moc"
diff --git a/tests/auto/corelib/io/qurlquery/tst_qurlquery.cpp b/tests/auto/corelib/io/qurlquery/tst_qurlquery.cpp
index 4ce621c4ba..ec9170bd7d 100644
--- a/tests/auto/corelib/io/qurlquery/tst_qurlquery.cpp
+++ b/tests/auto/corelib/io/qurlquery/tst_qurlquery.cpp
@@ -72,6 +72,12 @@ private Q_SLOTS:
void encodedParsing_data();
void encodedParsing();
void differentDelimiters();
+
+ // old tests from tst_qurl.cpp
+ // add new tests above
+ void old_queryItems();
+ void old_hasQueryItem_data();
+ void old_hasQueryItem();
};
static QString prettyElement(const QString &key, const QString &value)
@@ -230,6 +236,14 @@ void tst_QUrlQuery::constructing()
empty.setQueryDelimiters('(', ')');
QCOMPARE(empty.queryValueDelimiter(), QChar(QLatin1Char('(')));
QCOMPARE(empty.queryPairDelimiter(), QChar(QLatin1Char(')')));
+
+ QList<QPair<QString, QString> > query;
+ query += qMakePair(QString("type"), QString("login"));
+ query += qMakePair(QString("name"), QString::fromUtf8("åge nissemannsen"));
+ query += qMakePair(QString("ole&du"), QString::fromUtf8("anne+jørgen=sant"));
+ query += qMakePair(QString("prosent"), QString("%"));
+ copy.setQueryItems(query);
+ QVERIFY(!copy.isEmpty());
}
void tst_QUrlQuery::addRemove()
@@ -690,6 +704,112 @@ void tst_QUrlQuery::differentDelimiters()
}
}
+void tst_QUrlQuery::old_queryItems()
+{
+ // test imported from old tst_qurl.cpp
+ QUrlQuery url;
+
+ QList<QPair<QString, QString> > newItems;
+ newItems += qMakePair(QString("1"), QString("a"));
+ newItems += qMakePair(QString("2"), QString("b"));
+ newItems += qMakePair(QString("3"), QString("c"));
+ newItems += qMakePair(QString("4"), QString("a b"));
+ newItems += qMakePair(QString("5"), QString("&"));
+ newItems += qMakePair(QString("foo bar"), QString("hello world"));
+ newItems += qMakePair(QString("foo+bar"), QString("hello+world"));
+ newItems += qMakePair(QString("tex"), QString("a + b = c"));
+ url.setQueryItems(newItems);
+ QVERIFY(!url.isEmpty());
+
+ QList<QPair<QString, QString> > setItems = url.queryItems();
+ QVERIFY(newItems == setItems);
+
+ url.addQueryItem("1", "z");
+
+#if 0
+ // undefined behaviour in the new QUrlQuery
+
+ QVERIFY(url.hasQueryItem("1"));
+ QCOMPARE(url.queryItemValue("1").toLatin1().constData(), "a");
+
+ url.addQueryItem("1", "zz");
+
+ QStringList expected;
+ expected += "a";
+ expected += "z";
+ expected += "zz";
+ QCOMPARE(url.allQueryItemValues("1"), expected);
+
+ url.removeQueryItem("1");
+ QCOMPARE(url.allQueryItemValues("1").size(), 2);
+ QCOMPARE(url.queryItemValue("1").toLatin1().constData(), "z");
+#endif
+
+ url.removeAllQueryItems("1");
+ QVERIFY(!url.hasQueryItem("1"));
+
+ QCOMPARE(url.queryItemValue("4").toLatin1().constData(), "a b");
+ QCOMPARE(url.queryItemValue("5").toLatin1().constData(), "&");
+ QCOMPARE(url.queryItemValue("tex").toLatin1().constData(), "a + b = c");
+ QCOMPARE(url.queryItemValue("foo bar").toLatin1().constData(), "hello world");
+
+ //url.setUrl("http://www.google.com/search?q=a+b");
+ url.setQuery("q=a+b");
+ QCOMPARE(url.queryItemValue("q"), QString("a+b"));
+
+ //url.setUrl("http://www.google.com/search?q=a=b"); // invalid, but should be tolerated
+ url.setQuery("q=a=b");
+ QCOMPARE(url.queryItemValue("q"), QString("a=b"));
+}
+
+void tst_QUrlQuery::old_hasQueryItem_data()
+{
+ QTest::addColumn<QString>("url");
+ QTest::addColumn<QString>("item");
+ QTest::addColumn<bool>("trueFalse");
+
+ // the old tests started with "http://www.foo.bar"
+ QTest::newRow("no query items") << "" << "baz" << false;
+ QTest::newRow("query item: hello") << "hello=world" << "hello" << true;
+ QTest::newRow("no query item: world") << "hello=world" << "world" << false;
+ QTest::newRow("query item: qt") << "hello=world&qt=rocks" << "qt" << true;
+}
+
+void tst_QUrlQuery::old_hasQueryItem()
+{
+ QFETCH(QString, url);
+ QFETCH(QString, item);
+ QFETCH(bool, trueFalse);
+
+ QCOMPARE(QUrlQuery(url).hasQueryItem(item), trueFalse);
+}
+
+#if 0
+// this test doesn't make sense anymore
+void tst_QUrl::removeAllEncodedQueryItems_data()
+{
+ QTest::addColumn<QUrl>("url");
+ QTest::addColumn<QByteArray>("key");
+ QTest::addColumn<QUrl>("result");
+
+ QTest::newRow("test1") << QUrl::fromEncoded("http://qt.nokia.com/foo?aaa=a&bbb=b&ccc=c") << QByteArray("bbb") << QUrl::fromEncoded("http://qt.nokia.com/foo?aaa=a&ccc=c");
+ QTest::newRow("test2") << QUrl::fromEncoded("http://qt.nokia.com/foo?aaa=a&bbb=b&ccc=c") << QByteArray("aaa") << QUrl::fromEncoded("http://qt.nokia.com/foo?bbb=b&ccc=c");
+// QTest::newRow("test3") << QUrl::fromEncoded("http://qt.nokia.com/foo?aaa=a&bbb=b&ccc=c") << QByteArray("ccc") << QUrl::fromEncoded("http://qt.nokia.com/foo?aaa=a&bbb=b");
+ QTest::newRow("test4") << QUrl::fromEncoded("http://qt.nokia.com/foo?aaa=a&bbb=b&ccc=c") << QByteArray("b%62b") << QUrl::fromEncoded("http://qt.nokia.com/foo?aaa=a&bbb=b&ccc=c");
+ QTest::newRow("test5") << QUrl::fromEncoded("http://qt.nokia.com/foo?aaa=a&b%62b=b&ccc=c") << QByteArray("b%62b") << QUrl::fromEncoded("http://qt.nokia.com/foo?aaa=a&ccc=c");
+ QTest::newRow("test6") << QUrl::fromEncoded("http://qt.nokia.com/foo?aaa=a&b%62b=b&ccc=c") << QByteArray("bbb") << QUrl::fromEncoded("http://qt.nokia.com/foo?aaa=a&b%62b=b&ccc=c");
+}
+
+void tst_QUrl::removeAllEncodedQueryItems()
+{
+ QFETCH(QUrl, url);
+ QFETCH(QByteArray, key);
+ QFETCH(QUrl, result);
+ url.removeAllEncodedQueryItems(key);
+ QCOMPARE(url, result);
+}
+#endif
+
QTEST_APPLESS_MAIN(tst_QUrlQuery)
#include "tst_qurlquery.moc"