QUrlQuery: Use new comparison helper macros
QUrlQuery had operator==() and operator!=() defined as public member functions, so use QT_CORE_REMOVED_SINCE and removed_api.cpp to get rid of these methods and replace them with a hidden friend. Use QT_TEST_ALL_EQUALITY_OPS macro in unit-tests. Use new \compares command in the documentation to describe the comparison operators provided by QUrlQuery. Task-number: QTBUG-120303 Change-Id: I083487a134887010ebbb78906d2c1982f2ad41b5 Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
This commit is contained in:
parent
ddcbf02d20
commit
cd67684c89
@ -947,6 +947,13 @@ bool QProcessEnvironment::operator==(const QProcessEnvironment &other) const
|
|||||||
}
|
}
|
||||||
#endif // QT_CONFIG(processenvironment)
|
#endif // QT_CONFIG(processenvironment)
|
||||||
|
|
||||||
|
#include "qurlquery.h"
|
||||||
|
|
||||||
|
bool QUrlQuery::operator==(const QUrlQuery &other) const
|
||||||
|
{
|
||||||
|
return comparesEqual(*this, other);
|
||||||
|
}
|
||||||
|
|
||||||
// #include "qotherheader.h"
|
// #include "qotherheader.h"
|
||||||
// // implement removed functions from qotherheader.h
|
// // implement removed functions from qotherheader.h
|
||||||
// order sections alphabetically to reduce chances of merge conflicts
|
// order sections alphabetically to reduce chances of merge conflicts
|
||||||
|
@ -24,6 +24,8 @@ QT_BEGIN_NAMESPACE
|
|||||||
\ingroup network
|
\ingroup network
|
||||||
\ingroup shared
|
\ingroup shared
|
||||||
|
|
||||||
|
\compares equality
|
||||||
|
|
||||||
It is used to parse the query strings found in URLs like the following:
|
It is used to parse the query strings found in URLs like the following:
|
||||||
|
|
||||||
\image qurl-querystring.png
|
\image qurl-querystring.png
|
||||||
@ -399,22 +401,25 @@ QUrlQuery::~QUrlQuery()
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Returns \c true if this object and the \a other object contain the same
|
\fn bool QUrlQuery::operator==(const QUrlQuery &lhs, const QUrlQuery &rhs)
|
||||||
|
|
||||||
|
Returns \c true if QUrlQuery objects \a lhs and \a rhs contain the same
|
||||||
contents, in the same order, and use the same query delimiters.
|
contents, in the same order, and use the same query delimiters.
|
||||||
*/
|
*/
|
||||||
bool QUrlQuery::operator ==(const QUrlQuery &other) const
|
|
||||||
{
|
|
||||||
if (d == other.d)
|
|
||||||
return true;
|
|
||||||
if (d && other.d)
|
|
||||||
// keep in sync with qHash(QUrlQuery):
|
|
||||||
return d->valueDelimiter == other.d->valueDelimiter &&
|
|
||||||
d->pairDelimiter == other.d->pairDelimiter &&
|
|
||||||
d->itemList == other.d->itemList;
|
|
||||||
|
|
||||||
const QUrlQueryPrivate *x = d ? d.data() : other.d.data();
|
bool comparesEqual(const QUrlQuery &lhs, const QUrlQuery &rhs)
|
||||||
return x->valueDelimiter == defaultQueryValueDelimiter() &&
|
{
|
||||||
x->pairDelimiter == defaultQueryPairDelimiter() &&
|
if (lhs.d == rhs.d)
|
||||||
|
return true;
|
||||||
|
if (lhs.d && rhs.d)
|
||||||
|
// keep in sync with qHash(QUrlQuery):
|
||||||
|
return lhs.d->valueDelimiter == rhs.d->valueDelimiter &&
|
||||||
|
lhs.d->pairDelimiter == rhs.d->pairDelimiter &&
|
||||||
|
lhs.d->itemList == rhs.d->itemList;
|
||||||
|
|
||||||
|
const QUrlQueryPrivate *x = lhs.d ? lhs.d.data() : rhs.d.data();
|
||||||
|
return x->valueDelimiter == QUrlQuery::defaultQueryValueDelimiter() &&
|
||||||
|
x->pairDelimiter == QUrlQuery::defaultQueryPairDelimiter() &&
|
||||||
x->itemList.isEmpty();
|
x->itemList.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -810,9 +815,10 @@ void QUrlQuery::removeAllQueryItems(const QString &key)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\fn bool QUrlQuery::operator!=(const QUrlQuery &other) const
|
\fn bool QUrlQuery::operator!=(const QUrlQuery &lhs, const QUrlQuery &rhs)
|
||||||
|
|
||||||
Returns \c true if \a other is not equal to this QUrlQuery. Otherwise, returns \c false.
|
Returns \c true if the QUrlQuery object \a rhs is not equal to \a lhs.
|
||||||
|
Otherwise, returns \c false.
|
||||||
|
|
||||||
\sa operator==()
|
\sa operator==()
|
||||||
*/
|
*/
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
#ifndef QURLQUERY_H
|
#ifndef QURLQUERY_H
|
||||||
#define QURLQUERY_H
|
#define QURLQUERY_H
|
||||||
|
|
||||||
|
#include <QtCore/qcompare.h>
|
||||||
#include <QtCore/qshareddata.h>
|
#include <QtCore/qshareddata.h>
|
||||||
#include <QtCore/qurl.h>
|
#include <QtCore/qurl.h>
|
||||||
|
|
||||||
@ -34,9 +35,11 @@ public:
|
|||||||
QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QUrlQuery)
|
QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QUrlQuery)
|
||||||
~QUrlQuery();
|
~QUrlQuery();
|
||||||
|
|
||||||
|
#if QT_CORE_REMOVED_SINCE(6, 8)
|
||||||
bool operator==(const QUrlQuery &other) const;
|
bool operator==(const QUrlQuery &other) const;
|
||||||
bool operator!=(const QUrlQuery &other) const
|
bool operator!=(const QUrlQuery &other) const
|
||||||
{ return !(*this == other); }
|
{ return !operator==(other); }
|
||||||
|
#endif
|
||||||
|
|
||||||
void swap(QUrlQuery &other) noexcept { d.swap(other.d); }
|
void swap(QUrlQuery &other) noexcept { d.swap(other.d); }
|
||||||
|
|
||||||
@ -67,6 +70,8 @@ public:
|
|||||||
static constexpr char16_t defaultQueryPairDelimiter() noexcept { return u'&'; }
|
static constexpr char16_t defaultQueryPairDelimiter() noexcept { return u'&'; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
friend Q_CORE_EXPORT bool comparesEqual(const QUrlQuery &lhs, const QUrlQuery &rhs);
|
||||||
|
Q_DECLARE_EQUALITY_COMPARABLE(QUrlQuery)
|
||||||
friend class QUrl;
|
friend class QUrl;
|
||||||
friend Q_CORE_EXPORT size_t qHash(const QUrlQuery &key, size_t seed) noexcept;
|
friend Q_CORE_EXPORT size_t qHash(const QUrlQuery &key, size_t seed) noexcept;
|
||||||
QSharedDataPointer<QUrlQueryPrivate> d;
|
QSharedDataPointer<QUrlQueryPrivate> d;
|
||||||
|
@ -16,4 +16,5 @@ qt_internal_add_test(tst_qurlquery
|
|||||||
tst_qurlquery.cpp
|
tst_qurlquery.cpp
|
||||||
LIBRARIES
|
LIBRARIES
|
||||||
Qt::CorePrivate
|
Qt::CorePrivate
|
||||||
|
Qt::TestPrivate
|
||||||
)
|
)
|
||||||
|
@ -2,8 +2,10 @@
|
|||||||
// Copyright (C) 2012 Intel Corporation.
|
// Copyright (C) 2012 Intel Corporation.
|
||||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||||
|
|
||||||
#include <QtCore/QUrlQuery>
|
|
||||||
#include <QTest>
|
#include <QTest>
|
||||||
|
#include <QtTest/private/qcomparisontesthelper_p.h>
|
||||||
|
|
||||||
|
#include <QtCore/QUrlQuery>
|
||||||
|
|
||||||
typedef QList<QPair<QString, QString> > QueryItems;
|
typedef QList<QPair<QString, QString> > QueryItems;
|
||||||
Q_DECLARE_METATYPE(QueryItems)
|
Q_DECLARE_METATYPE(QueryItems)
|
||||||
@ -22,6 +24,9 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
private Q_SLOTS:
|
private Q_SLOTS:
|
||||||
|
void compareCompiles();
|
||||||
|
void compareEquality_data();
|
||||||
|
void compareEquality();
|
||||||
void constructing();
|
void constructing();
|
||||||
void addRemove();
|
void addRemove();
|
||||||
void multiAddRemove();
|
void multiAddRemove();
|
||||||
@ -119,6 +124,48 @@ static QUrlQuery emptyQuery()
|
|||||||
return QUrlQuery();
|
return QUrlQuery();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tst_QUrlQuery::compareCompiles()
|
||||||
|
{
|
||||||
|
QTestPrivate::testEqualityOperatorsCompile<QUrlQuery>();
|
||||||
|
}
|
||||||
|
|
||||||
|
void tst_QUrlQuery::compareEquality_data()
|
||||||
|
{
|
||||||
|
QTest::addColumn<QUrlQuery>("url1");
|
||||||
|
QTest::addColumn<QUrlQuery>("url2");
|
||||||
|
QTest::addColumn<bool>("equal");
|
||||||
|
|
||||||
|
QTest::newRow("empty-empty") << QUrlQuery() << QUrlQuery() << true;
|
||||||
|
|
||||||
|
QUrlQuery notEmpty;
|
||||||
|
notEmpty.addQueryItem("a", "b");
|
||||||
|
QTest::newRow("empty-notEmpty") << QUrlQuery() << notEmpty << false;
|
||||||
|
|
||||||
|
QUrlQuery notEmpty_copy = notEmpty;
|
||||||
|
QTest::newRow("sameItems") << notEmpty_copy << notEmpty << true;
|
||||||
|
|
||||||
|
QUrlQuery notEmpty_modified = notEmpty;
|
||||||
|
notEmpty_modified.addQueryItem("c", "d");
|
||||||
|
QTest::newRow("addedItems") << notEmpty_copy << notEmpty_modified << false;
|
||||||
|
|
||||||
|
QUrlQuery notEmpty2;
|
||||||
|
notEmpty2.addQueryItem("c", "d");
|
||||||
|
QTest::newRow("differentItems") << notEmpty2 << notEmpty << false;
|
||||||
|
|
||||||
|
QUrlQuery differentPairDelimiters;
|
||||||
|
differentPairDelimiters.setQueryDelimiters('(', ')');
|
||||||
|
QTest::newRow("defaultDelimiters-differentDelimiters") << QUrlQuery() << differentPairDelimiters
|
||||||
|
<< false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void tst_QUrlQuery::compareEquality()
|
||||||
|
{
|
||||||
|
QFETCH(QUrlQuery, url1);
|
||||||
|
QFETCH(QUrlQuery, url2);
|
||||||
|
QFETCH(bool, equal);
|
||||||
|
QT_TEST_EQUALITY_OPS(url1, url2, equal);
|
||||||
|
}
|
||||||
|
|
||||||
void tst_QUrlQuery::constructing()
|
void tst_QUrlQuery::constructing()
|
||||||
{
|
{
|
||||||
QUrlQuery empty;
|
QUrlQuery empty;
|
||||||
@ -137,7 +184,7 @@ void tst_QUrlQuery::constructing()
|
|||||||
QVERIFY(!copy.isDetached());
|
QVERIFY(!copy.isDetached());
|
||||||
QCOMPARE(copy, empty);
|
QCOMPARE(copy, empty);
|
||||||
QCOMPARE(qHash(copy), qHash(empty));
|
QCOMPARE(qHash(copy), qHash(empty));
|
||||||
QVERIFY(!(copy != empty));
|
QT_TEST_EQUALITY_OPS(copy, empty, true);
|
||||||
|
|
||||||
copy = empty;
|
copy = empty;
|
||||||
QCOMPARE(copy, empty);
|
QCOMPARE(copy, empty);
|
||||||
@ -170,7 +217,7 @@ void tst_QUrlQuery::constructing()
|
|||||||
QVERIFY(!other.isEmpty());
|
QVERIFY(!other.isEmpty());
|
||||||
QVERIFY(other.isDetached());
|
QVERIFY(other.isDetached());
|
||||||
QCOMPARE_NE(other, empty);
|
QCOMPARE_NE(other, empty);
|
||||||
QVERIFY(!(other == empty));
|
QT_TEST_EQUALITY_OPS(other, empty, false);
|
||||||
|
|
||||||
// copy-construct
|
// copy-construct
|
||||||
QUrlQuery copy(other);
|
QUrlQuery copy(other);
|
||||||
@ -276,7 +323,7 @@ void tst_QUrlQuery::addRemove()
|
|||||||
QVERIFY(allItems.contains(qItem("c", "d")));
|
QVERIFY(allItems.contains(qItem("c", "d")));
|
||||||
|
|
||||||
QCOMPARE_NE(query, original);
|
QCOMPARE_NE(query, original);
|
||||||
QVERIFY(!(query == original));
|
QT_TEST_EQUALITY_OPS(query, original, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -299,7 +346,7 @@ void tst_QUrlQuery::addRemove()
|
|||||||
QCOMPARE(allItems.at(0).second, QString("b"));
|
QCOMPARE(allItems.at(0).second, QString("b"));
|
||||||
|
|
||||||
QCOMPARE(query, original);
|
QCOMPARE(query, original);
|
||||||
QVERIFY(!(query != original));
|
QT_TEST_EQUALITY_OPS(query, original, true);
|
||||||
QCOMPARE(qHash(query), qHash(original));
|
QCOMPARE(qHash(query), qHash(original));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -323,7 +370,7 @@ void tst_QUrlQuery::addRemove()
|
|||||||
QVERIFY(allItems.contains(qItem("e", emptyButNotNull)));
|
QVERIFY(allItems.contains(qItem("e", emptyButNotNull)));
|
||||||
|
|
||||||
QCOMPARE_NE(query, original);
|
QCOMPARE_NE(query, original);
|
||||||
QVERIFY(!(query == original));
|
QT_TEST_EQUALITY_OPS(query, original, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user