From e790af0e0a030dea597bbc9489170b5ba1cf9e46 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Mon, 10 Aug 2020 10:25:41 -0700 Subject: 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. Pick-to: 5.15 Fixes: QTBUG-85969 Change-Id: I5e00996d7f4b4a10bc98fffd1629f835f570ef6b Reviewed-by: Sona Kurazyan --- .../auto/corelib/serialization/json/tst_qtjson.cpp | 61 ++++++++++++++++++++++ 1 file changed, 61 insertions(+) (limited to 'tests/auto/corelib/serialization') 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("left"); + QTest::addColumn("right"); + QTest::addColumn("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() -- cgit v1.2.3