diff options
-rw-r--r-- | src/corelib/serialization/qjsondocument.cpp | 4 | ||||
-rw-r--r-- | tests/auto/corelib/serialization/json/tst_qtjson.cpp | 61 |
2 files changed, 64 insertions, 1 deletions
diff --git a/src/corelib/serialization/qjsondocument.cpp b/src/corelib/serialization/qjsondocument.cpp index 579bb70a2b..6ec169da62 100644 --- a/src/corelib/serialization/qjsondocument.cpp +++ b/src/corelib/serialization/qjsondocument.cpp @@ -495,7 +495,9 @@ const QJsonValue QJsonDocument::operator[](int i) const */ bool QJsonDocument::operator==(const QJsonDocument &other) const { - return (!d) ? (!other.d) : (d->value == other.d->value); + if (d && other.d) + return d->value == other.d->value; + return !d == !other.d; } /*! diff --git a/tests/auto/corelib/serialization/json/tst_qtjson.cpp b/tests/auto/corelib/serialization/json/tst_qtjson.cpp index bc3fc1ce24..82ad404932 100644 --- a/tests/auto/corelib/serialization/json/tst_qtjson.cpp +++ b/tests/auto/corelib/serialization/json/tst_qtjson.cpp @@ -128,6 +128,8 @@ private Q_SLOTS: void objectEquals(); void arrayEquals_data(); void arrayEquals(); + void documentEquals_data(); + void documentEquals(); void bom(); void nesting(); @@ -2575,6 +2577,12 @@ void tst_QtJson::objectEquals() QCOMPARE(QJsonValue(left) != QJsonValue(right), !result); QCOMPARE(QJsonValue(right) == QJsonValue(left), result); QCOMPARE(QJsonValue(right) != QJsonValue(left), !result); + + // The same, but from a QJsonDocument perspective + QCOMPARE(QJsonDocument(left) == QJsonDocument(right), result); + QCOMPARE(QJsonDocument(left) != QJsonDocument(right), !result); + QCOMPARE(QJsonDocument(right) == QJsonDocument(left), result); + QCOMPARE(QJsonDocument(right) != QJsonDocument(left), !result); } void tst_QtJson::arrayEquals_data() @@ -2628,6 +2636,59 @@ void tst_QtJson::arrayEquals() QCOMPARE(QJsonValue(left) != QJsonValue(right), !result); QCOMPARE(QJsonValue(right) == QJsonValue(left), result); QCOMPARE(QJsonValue(right) != QJsonValue(left), !result); + + // The same but from QJsonDocument perspective + QCOMPARE(QJsonDocument(left) == QJsonDocument(right), result); + QCOMPARE(QJsonDocument(left) != QJsonDocument(right), !result); + QCOMPARE(QJsonDocument(right) == QJsonDocument(left), result); + QCOMPARE(QJsonDocument(right) != QJsonDocument(left), !result); +} + +void tst_QtJson::documentEquals_data() +{ + QTest::addColumn<QJsonDocument>("left"); + QTest::addColumn<QJsonDocument>("right"); + QTest::addColumn<bool>("result"); + + QTest::newRow("two defaults") << QJsonDocument() << QJsonDocument() << true; + + QJsonDocument emptyobj(QJsonObject{}); + QJsonDocument emptyarr(QJsonArray{}); + QTest::newRow("emptyarray vs default") << emptyarr << QJsonDocument() << false; + QTest::newRow("emptyobject vs default") << emptyobj << QJsonDocument() << false; + QTest::newRow("emptyarray vs emptyobject") << emptyarr << emptyobj << false; + + QJsonDocument array1(QJsonArray{1}); + QJsonDocument array2(QJsonArray{2}); + QTest::newRow("emptyarray vs emptyarray") << emptyarr << emptyarr << true; + QTest::newRow("emptyarray vs array") << emptyarr << array1 << false; + QTest::newRow("array vs array") << array1 << array1 << true; + QTest::newRow("array vs otherarray") << array1 << array2 << false; + + QJsonDocument object1(QJsonObject{{"hello", "world"}}); + QJsonDocument object2(QJsonObject{{"hello", 2}}); + QTest::newRow("emptyobject vs emptyobject") << emptyobj << emptyobj << true; + QTest::newRow("emptyobject vs object") << emptyobj << object1 << false; + QTest::newRow("object vs object") << object1 << object1 << true; + QTest::newRow("object vs otherobject") << object1 << object2 << false; + + QTest::newRow("object vs array") << array1 << object1 << false; +} + +void tst_QtJson::documentEquals() +{ + QFETCH(QJsonDocument, left); + QFETCH(QJsonDocument, right); + QFETCH(bool, result); + + QCOMPARE(left == right, result); + QCOMPARE(right == left, result); + + // invariants checks + QCOMPARE(left, left); + QCOMPARE(right, right); + QCOMPARE(left != right, !result); + QCOMPARE(right != left, !result); } void tst_QtJson::bom() |