summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/json/qjsonarray.cpp2
-rw-r--r--src/corelib/json/qjsonvalue.cpp8
-rw-r--r--tests/auto/corelib/json/tst_qtjson.cpp48
3 files changed, 58 insertions, 0 deletions
diff --git a/src/corelib/json/qjsonarray.cpp b/src/corelib/json/qjsonarray.cpp
index d143215efd..0884f10354 100644
--- a/src/corelib/json/qjsonarray.cpp
+++ b/src/corelib/json/qjsonarray.cpp
@@ -87,6 +87,8 @@ QJsonArray::QJsonArray()
QJsonArray::QJsonArray(QJsonPrivate::Data *data, QJsonPrivate::Array *array)
: d(data), a(array)
{
+ Q_ASSERT(data);
+ Q_ASSERT(array);
d->ref.ref();
}
diff --git a/src/corelib/json/qjsonvalue.cpp b/src/corelib/json/qjsonvalue.cpp
index b4a689da60..7e8fdf8221 100644
--- a/src/corelib/json/qjsonvalue.cpp
+++ b/src/corelib/json/qjsonvalue.cpp
@@ -448,9 +448,17 @@ bool QJsonValue::operator==(const QJsonValue &other) const
case String:
return toString() == other.toString();
case Array:
+ if (base == other.base)
+ return true;
+ if (!base || !other.base)
+ return false;
return QJsonArray(d, static_cast<QJsonPrivate::Array *>(base))
== QJsonArray(other.d, static_cast<QJsonPrivate::Array *>(other.base));
case Object:
+ if (base == other.base)
+ return true;
+ if (!base || !other.base)
+ return false;
return QJsonObject(d, static_cast<QJsonPrivate::Object *>(base))
== QJsonObject(other.d, static_cast<QJsonPrivate::Object *>(other.base));
}
diff --git a/tests/auto/corelib/json/tst_qtjson.cpp b/tests/auto/corelib/json/tst_qtjson.cpp
index 4ab4b78da1..bf6a58a24b 100644
--- a/tests/auto/corelib/json/tst_qtjson.cpp
+++ b/tests/auto/corelib/json/tst_qtjson.cpp
@@ -123,6 +123,8 @@ private Q_SLOTS:
void testTrailingComma();
void testDetachBug();
+
+ void valueEquals();
private:
QString testDataDir;
};
@@ -1845,5 +1847,51 @@ void TestQtJson::testDetachBug()
QCOMPARE(local.keys().size(), 1);
}
+void TestQtJson::valueEquals()
+{
+ QVERIFY(QJsonValue() == QJsonValue());
+ QVERIFY(QJsonValue() != QJsonValue(QJsonValue::Undefined));
+ QVERIFY(QJsonValue() != QJsonValue(true));
+ QVERIFY(QJsonValue() != QJsonValue(1.));
+ QVERIFY(QJsonValue() != QJsonValue(QJsonArray()));
+ QVERIFY(QJsonValue() != QJsonValue(QJsonObject()));
+
+ QVERIFY(QJsonValue(true) == QJsonValue(true));
+ QVERIFY(QJsonValue(true) != QJsonValue(false));
+ QVERIFY(QJsonValue(true) != QJsonValue(QJsonValue::Undefined));
+ QVERIFY(QJsonValue(true) != QJsonValue());
+ QVERIFY(QJsonValue(true) != QJsonValue(1.));
+ QVERIFY(QJsonValue(true) != QJsonValue(QJsonArray()));
+ QVERIFY(QJsonValue(true) != QJsonValue(QJsonObject()));
+
+ QVERIFY(QJsonValue(1.) == QJsonValue(1.));
+ QVERIFY(QJsonValue(1.) != QJsonValue(2.));
+ QVERIFY(QJsonValue(1.) != QJsonValue(QJsonValue::Undefined));
+ QVERIFY(QJsonValue(1.) != QJsonValue());
+ QVERIFY(QJsonValue(1.) != QJsonValue(true));
+ QVERIFY(QJsonValue(1.) != QJsonValue(QJsonArray()));
+ QVERIFY(QJsonValue(1.) != QJsonValue(QJsonObject()));
+
+ QVERIFY(QJsonValue(QJsonArray()) == QJsonValue(QJsonArray()));
+ QJsonArray nonEmptyArray;
+ nonEmptyArray.append(true);
+ QVERIFY(QJsonValue(QJsonArray()) != nonEmptyArray);
+ QVERIFY(QJsonValue(QJsonArray()) != QJsonValue(QJsonValue::Undefined));
+ QVERIFY(QJsonValue(QJsonArray()) != QJsonValue());
+ QVERIFY(QJsonValue(QJsonArray()) != QJsonValue(true));
+ QVERIFY(QJsonValue(QJsonArray()) != QJsonValue(1.));
+ QVERIFY(QJsonValue(QJsonArray()) != QJsonValue(QJsonObject()));
+
+ QVERIFY(QJsonValue(QJsonObject()) == QJsonValue(QJsonObject()));
+ QJsonObject nonEmptyObject;
+ nonEmptyObject.insert("Key", true);
+ QVERIFY(QJsonValue(QJsonObject()) != nonEmptyObject);
+ QVERIFY(QJsonValue(QJsonObject()) != QJsonValue(QJsonValue::Undefined));
+ QVERIFY(QJsonValue(QJsonObject()) != QJsonValue());
+ QVERIFY(QJsonValue(QJsonObject()) != QJsonValue(true));
+ QVERIFY(QJsonValue(QJsonObject()) != QJsonValue(1.));
+ QVERIFY(QJsonValue(QJsonObject()) != QJsonValue(QJsonArray()));
+}
+
QTEST_MAIN(TestQtJson)
#include "tst_qtjson.moc"