QJsonArray: use new comparison helper macros
Replace public operators operator==(), operator!=() of QJsonArray to friend methods comparesEqual(). Use QT_CORE_REMOVED_SINCE and removed_api.cpp to get rid of current comparison methods and replace them with a friend. Add friend method comparesEqual(QJsonArray, QJsonValue) to the QJsonArray class, to support comparison between QJsonArray and QJsonValue elements, see test-case fromToVariantConversions() Task-number: QTBUG-120300 Change-Id: I8440ca0761bede8551ff792bfa7f22e47b56fa79 Reviewed-by: Ivan Solovev <ivan.solovev@qt.io> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
parent
587003c3cc
commit
2499de8874
@ -959,6 +959,18 @@ bool QFileInfo::operator==(const QFileInfo &fileinfo) const
|
||||
return comparesEqual(*this, fileinfo);
|
||||
}
|
||||
|
||||
#include "qjsonarray.h"
|
||||
|
||||
bool QJsonArray::operator==(const QJsonArray &other) const
|
||||
{
|
||||
return comparesEqual(*this, other);
|
||||
}
|
||||
|
||||
bool QJsonArray::operator!=(const QJsonArray &other) const
|
||||
{
|
||||
return !comparesEqual(*this, other);
|
||||
}
|
||||
|
||||
#if QT_CONFIG(processenvironment)
|
||||
#include "qprocess.h" // inlined API
|
||||
|
||||
|
@ -28,6 +28,10 @@ QT_BEGIN_NAMESPACE
|
||||
|
||||
\brief The QJsonArray class encapsulates a JSON array.
|
||||
|
||||
\compares equality
|
||||
\compareswith equality QJsonValue
|
||||
\endcompareswith
|
||||
|
||||
A JSON array is a list of values. The list can be manipulated by inserting and
|
||||
removing QJsonValue's from the array.
|
||||
|
||||
@ -471,36 +475,40 @@ QJsonValue QJsonArray::operator[](qsizetype i) const
|
||||
return at(i);
|
||||
}
|
||||
|
||||
/*!
|
||||
Returns \c true if this array is equal to \a other.
|
||||
*/
|
||||
bool QJsonArray::operator==(const QJsonArray &other) const
|
||||
bool comparesEqual(const QJsonArray &lhs, const QJsonArray &rhs) noexcept
|
||||
{
|
||||
if (a == other.a)
|
||||
if (lhs.a == rhs.a)
|
||||
return true;
|
||||
|
||||
if (!a)
|
||||
return !other.a->elements.size();
|
||||
if (!other.a)
|
||||
return !a->elements.size();
|
||||
if (a->elements.size() != other.a->elements.size())
|
||||
if (!lhs.a)
|
||||
return !rhs.a->elements.size();
|
||||
if (!rhs.a)
|
||||
return !lhs.a->elements.size();
|
||||
if (lhs.a->elements.size() != rhs.a->elements.size())
|
||||
return false;
|
||||
|
||||
for (qsizetype i = 0; i < a->elements.size(); ++i) {
|
||||
if (a->valueAt(i) != other.a->valueAt(i))
|
||||
for (qsizetype i = 0; i < lhs.a->elements.size(); ++i) {
|
||||
if (lhs.a->valueAt(i) != rhs.a->valueAt(i))
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/*!
|
||||
Returns \c true if this array is not equal to \a other.
|
||||
*/
|
||||
bool QJsonArray::operator!=(const QJsonArray &other) const
|
||||
bool comparesEqual(const QJsonArray &lhs, const QJsonValue &rhs) noexcept
|
||||
{
|
||||
return !(*this == other);
|
||||
return lhs == rhs.toArray();
|
||||
}
|
||||
|
||||
/*! \fn bool QJsonArray::operator==(const QJsonArray &lhs, const QJsonArray &rhs)
|
||||
|
||||
Returns \c true if \a lhs array is equal to \a rhs, \c false otherwise.
|
||||
*/
|
||||
|
||||
/*! \fn bool QJsonArray::operator!=(const QJsonArray &lhs, const QJsonArray &rhs)
|
||||
|
||||
Returns \c true if \a lhs array is not equal to \a rhs, \c false otherwise.
|
||||
*/
|
||||
|
||||
/*! \fn QJsonArray::iterator QJsonArray::begin()
|
||||
|
||||
Returns an \l{STL-style iterators}{STL-style iterator} pointing to the first item in
|
||||
|
@ -60,9 +60,10 @@ public:
|
||||
QJsonValueRef operator[](qsizetype i);
|
||||
QJsonValue operator[](qsizetype i) const;
|
||||
|
||||
#if QT_CORE_REMOVED_SINCE(6, 8)
|
||||
bool operator==(const QJsonArray &other) const;
|
||||
bool operator!=(const QJsonArray &other) const;
|
||||
|
||||
#endif
|
||||
void swap(QJsonArray &other) noexcept
|
||||
{
|
||||
a.swap(other.a);
|
||||
@ -225,6 +226,14 @@ private:
|
||||
friend class QCborArray;
|
||||
friend Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonArray &);
|
||||
|
||||
friend Q_CORE_EXPORT bool comparesEqual(const QJsonArray &lhs,
|
||||
const QJsonArray &rhs) noexcept;
|
||||
|
||||
friend Q_CORE_EXPORT bool comparesEqual(const QJsonArray &lhs,
|
||||
const QJsonValue &rhs) noexcept;
|
||||
Q_DECLARE_EQUALITY_COMPARABLE(QJsonArray)
|
||||
Q_DECLARE_EQUALITY_COMPARABLE(QJsonArray, QJsonValue)
|
||||
|
||||
QJsonArray(QCborContainerPrivate *array);
|
||||
bool detach(qsizetype reserve = 0);
|
||||
|
||||
|
@ -26,6 +26,7 @@ qt_internal_add_test(tst_json
|
||||
tst_qtjson.cpp
|
||||
LIBRARIES
|
||||
Qt::CorePrivate
|
||||
Qt::TestPrivate
|
||||
TESTDATA ${json_resource_files}
|
||||
)
|
||||
|
||||
|
@ -3,6 +3,7 @@
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
#include <QTest>
|
||||
#include <QtTest/private/qcomparisontesthelper_p.h>
|
||||
#include <QMap>
|
||||
#include <QVariantList>
|
||||
|
||||
@ -27,6 +28,7 @@ class tst_QtJson: public QObject
|
||||
private Q_SLOTS:
|
||||
void initTestCase();
|
||||
|
||||
void compareCompiles();
|
||||
void testValueSimple();
|
||||
void testNumbers();
|
||||
void testNumbers_2();
|
||||
@ -47,6 +49,8 @@ private Q_SLOTS:
|
||||
void testArrayNested();
|
||||
void testArrayNestedEmpty();
|
||||
void testArrayComfortOperators();
|
||||
void testArrayEquality_data();
|
||||
void testArrayEquality();
|
||||
void testObjectNestedEmpty();
|
||||
|
||||
void testValueRef();
|
||||
@ -169,6 +173,12 @@ void tst_QtJson::initTestCase()
|
||||
testDataDir = QCoreApplication::applicationDirPath();
|
||||
}
|
||||
|
||||
void tst_QtJson::compareCompiles()
|
||||
{
|
||||
QTestPrivate::testEqualityOperatorsCompile<QJsonArray>();
|
||||
QTestPrivate::testEqualityOperatorsCompile<QJsonArray, QJsonValue>();
|
||||
}
|
||||
|
||||
void tst_QtJson::testValueSimple()
|
||||
{
|
||||
QJsonObject object;
|
||||
@ -901,6 +911,36 @@ void tst_QtJson::testObjectNestedEmpty()
|
||||
QCOMPARE(object.value("inner").type(), QJsonValue::Object);
|
||||
}
|
||||
|
||||
void tst_QtJson::testArrayEquality_data()
|
||||
{
|
||||
QTest::addColumn<QJsonArray>("array1");
|
||||
QTest::addColumn<QJsonArray>("array2");
|
||||
QTest::addColumn<bool>("expectedResult");
|
||||
QTest::addRow("QJsonArray(), QJsonArray{665, 666, 667}")
|
||||
<< QJsonArray() << QJsonArray{665, 666, 667} << false;
|
||||
QTest::addRow("QJsonArray(), QJsonArray{}")
|
||||
<< QJsonArray() << QJsonArray{} <<true;
|
||||
QTest::addRow("QJsonArray(), QJsonArray{123, QLatin1String(\"foo\")}")
|
||||
<< QJsonArray() << QJsonArray{123, QLatin1String("foo")} << false;
|
||||
QTest::addRow(
|
||||
"QJsonArray{123,QLatin1String(\"foo\")}, QJsonArray{123,QLatin1String(\"foo\")}")
|
||||
<< QJsonArray{123, QLatin1String("foo")}
|
||||
<< QJsonArray{123, QLatin1String("foo")}
|
||||
<< true;
|
||||
}
|
||||
|
||||
void tst_QtJson::testArrayEquality()
|
||||
{
|
||||
QFETCH(QJsonArray, array1);
|
||||
QFETCH(QJsonArray, array2);
|
||||
QFETCH(bool, expectedResult);
|
||||
|
||||
QJsonValue value = QJsonValue(array1);
|
||||
|
||||
QT_TEST_EQUALITY_OPS(array1, array2, expectedResult);
|
||||
QT_TEST_EQUALITY_OPS(value, array2, expectedResult);
|
||||
}
|
||||
|
||||
void tst_QtJson::testArrayComfortOperators()
|
||||
{
|
||||
QJsonArray first;
|
||||
|
Loading…
x
Reference in New Issue
Block a user