From 364cf0bf20d7acdc0ed4073db0ca603ec5435c97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C4=99drzej=20Nowacki?= Date: Tue, 8 Jul 2014 14:56:25 +0200 Subject: Fix QJsonValue comparison. QJsonValue, while comparing two QJsonArrays, should consult also length of the arrays, because a different than null base pointer doesn't mean that an array is not empty. Change-Id: If76739355a4e74b842e836289565f98d95c006d5 Reviewed-by: Lars Knoll --- tests/auto/corelib/json/tst_qtjson.cpp | 55 ++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) (limited to 'tests/auto/corelib/json') diff --git a/tests/auto/corelib/json/tst_qtjson.cpp b/tests/auto/corelib/json/tst_qtjson.cpp index 9a2fdecafc..c7590fd023 100644 --- a/tests/auto/corelib/json/tst_qtjson.cpp +++ b/tests/auto/corelib/json/tst_qtjson.cpp @@ -139,6 +139,8 @@ private Q_SLOTS: void valueEquals(); void objectEquals_data(); void objectEquals(); + void arrayEquals_data(); + void arrayEquals(); void bom(); void nesting(); @@ -2460,6 +2462,59 @@ void tst_QtJson::objectEquals() QCOMPARE(QJsonValue(right) != QJsonValue(left), !result); } +void tst_QtJson::arrayEquals_data() +{ + QTest::addColumn("left"); + QTest::addColumn("right"); + QTest::addColumn("result"); + + QTest::newRow("two defaults") << QJsonArray() << QJsonArray() << true; + + QJsonArray array1; + array1.append(1); + QJsonArray array2; + array2.append(2111); + array2[0] = 1; + QJsonArray array3; + array3.insert(0, 1); + array3.insert(1, 2); + + QTest::newRow("the same array (1 vs 2)") << array1 << array2 << true; + QTest::newRow("the same array (3 vs 3)") << array3 << array3 << true; + QTest::newRow("different arrays (2 vs 3)") << array2 << array3 << false; + QTest::newRow("array vs default") << array1 << QJsonArray() << false; + + QJsonArray empty; + empty.append(1); + empty.takeAt(0); + QTest::newRow("default vs empty") << QJsonArray() << empty << true; + QTest::newRow("empty vs default") << empty << QJsonArray() << true; + QTest::newRow("empty vs empty") << empty << empty << true; + QTest::newRow("array vs empty") << array1 << empty << false; +} + +void tst_QtJson::arrayEquals() +{ + QFETCH(QJsonArray, left); + QFETCH(QJsonArray, 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); + + // The same but from QJsonValue perspective + QCOMPARE(QJsonValue(left) == QJsonValue(right), result); + QCOMPARE(QJsonValue(left) != QJsonValue(right), !result); + QCOMPARE(QJsonValue(right) == QJsonValue(left), result); + QCOMPARE(QJsonValue(right) != QJsonValue(left), !result); +} + void tst_QtJson::bom() { QFile file(testDataDir + "/bom.json"); -- cgit v1.2.3