summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@intel.com>2020-08-10 10:25:41 -0700
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2020-08-12 03:20:34 +0000
commit801f719f12da68508a21ecebf1b37db6650beb8a (patch)
treeb27a0db43a3ef9a5540ce17d05cbac7dbebf7672 /tests
parentf0186293dffc5a67d6700f73a990949c60a222c6 (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.cpp61
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()