diff options
author | Thiago Macieira <thiago.macieira@intel.com> | 2020-08-10 10:25:41 -0700 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2020-08-12 03:20:34 +0000 |
commit | 801f719f12da68508a21ecebf1b37db6650beb8a (patch) | |
tree | b27a0db43a3ef9a5540ce17d05cbac7dbebf7672 /tests | |
parent | f0186293dffc5a67d6700f73a990949c60a222c6 (diff) |
QJsonDocument: fix comparison of valid vs default
[ChangeLog][QtCore][QJsonDocument] Fixed a bug that caused
QJsonDocument's equality operator to crash if one of the operands was
default-constructed and the other wasn't.
Fixes: QTBUG-85969
Change-Id: I5e00996d7f4b4a10bc98fffd1629f835f570ef6b
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
(cherry picked from commit e790af0e0a030dea597bbc9489170b5ba1cf9e46)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/corelib/serialization/json/tst_qtjson.cpp | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/tests/auto/corelib/serialization/json/tst_qtjson.cpp b/tests/auto/corelib/serialization/json/tst_qtjson.cpp index a53219148b..ba035bd15b 100644 --- a/tests/auto/corelib/serialization/json/tst_qtjson.cpp +++ b/tests/auto/corelib/serialization/json/tst_qtjson.cpp @@ -134,6 +134,8 @@ private Q_SLOTS: void objectEquals(); void arrayEquals_data(); void arrayEquals(); + void documentEquals_data(); + void documentEquals(); void bom(); void nesting(); @@ -2752,6 +2754,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() @@ -2805,6 +2813,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() |