summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib/serialization
diff options
context:
space:
mode:
authorQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2020-04-11 01:00:13 +0200
committerShawn Rutledge <shawn.rutledge@qt.io>2020-04-11 14:59:13 +0200
commit58a42898006f221807a08557f588a2d973a7ada2 (patch)
tree62d92617eae5df5aae666ea0902159498b285b24 /tests/auto/corelib/serialization
parent033d01bd6e2aef740ad1408a04d3ca0ae3b9ba9b (diff)
parent1ec350e35fcea87c527b36cf429b595731059240 (diff)
Merge remote-tracking branch 'origin/5.15' into dev
Conflicts: tests/auto/network/socket/platformsocketengine/platformsocketengine.pri Change-Id: I22daf269a8f28f80630b5f521b91637531156404
Diffstat (limited to 'tests/auto/corelib/serialization')
-rw-r--r--tests/auto/corelib/serialization/json/tst_qtjson.cpp97
-rw-r--r--tests/auto/corelib/serialization/qcborvalue/tst_qcborvalue.cpp125
2 files changed, 222 insertions, 0 deletions
diff --git a/tests/auto/corelib/serialization/json/tst_qtjson.cpp b/tests/auto/corelib/serialization/json/tst_qtjson.cpp
index 4c85482c6a..a167612b52 100644
--- a/tests/auto/corelib/serialization/json/tst_qtjson.cpp
+++ b/tests/auto/corelib/serialization/json/tst_qtjson.cpp
@@ -56,7 +56,9 @@ private Q_SLOTS:
void testObjectSimple();
void testObjectSmallKeys();
+ void testObjectInsertCopies();
void testArraySimple();
+ void testArrayInsertCopies();
void testValueObject();
void testValueArray();
void testObjectNested();
@@ -591,6 +593,75 @@ void tst_QtJson::testObjectSmallKeys()
QCOMPARE(data1.end() - data1.begin(), 3);
}
+void tst_QtJson::testObjectInsertCopies()
+{
+ {
+ QJsonObject obj;
+ obj["prop1"] = "TEST";
+ QCOMPARE(obj.size(), 1);
+ QCOMPARE(obj.value("prop1"), "TEST");
+
+ obj["prop2"] = obj.value("prop1");
+ QCOMPARE(obj.size(), 2);
+ QCOMPARE(obj.value("prop1"), "TEST");
+ QCOMPARE(obj.value("prop2"), "TEST");
+ }
+ {
+ // see QTBUG-83366
+ QJsonObject obj;
+ obj["value"] = "TEST";
+ QCOMPARE(obj.size(), 1);
+ QCOMPARE(obj.value("value"), "TEST");
+
+ obj["prop2"] = obj.value("value");
+ QCOMPARE(obj.size(), 2);
+ QCOMPARE(obj.value("value"), "TEST");
+ QCOMPARE(obj.value("prop2"), "TEST");
+ }
+ {
+ QJsonObject obj;
+ obj["value"] = "TEST";
+ QCOMPARE(obj.size(), 1);
+ QCOMPARE(obj.value("value"), "TEST");
+
+ // same as previous, but this is a QJsonValueRef
+ QJsonValueRef rv = obj["prop2"];
+ rv = obj["value"];
+ QCOMPARE(obj.size(), 2);
+ QCOMPARE(obj.value("value"), "TEST");
+ QCOMPARE(obj.value("prop2"), "TEST");
+ }
+ {
+ QJsonObject obj;
+ obj["value"] = "TEST";
+ QCOMPARE(obj.size(), 1);
+ QCOMPARE(obj.value("value"), "TEST");
+
+ // same as previous, but this is a QJsonValueRef
+ QJsonValueRef rv = obj["value"];
+ obj["prop2"] = rv;
+ QCOMPARE(obj.size(), 2);
+ QCOMPARE(obj.value("value"), "TEST");
+ QEXPECT_FAIL("", "QTBUG-83398: design flaw: the obj[] call invalidates the QJsonValueRef", Continue);
+ QCOMPARE(obj.value("prop2"), "TEST");
+ }
+ {
+ QJsonObject obj;
+ obj["value"] = "TEST";
+ QCOMPARE(obj.size(), 1);
+ QCOMPARE(obj.value("value"), "TEST");
+
+ QJsonValueRef v = obj["value"];
+ QJsonObject obj2 = obj;
+ obj.insert("prop2", v);
+ QCOMPARE(obj.size(), 2);
+ QCOMPARE(obj.value("value"), "TEST");
+ QCOMPARE(obj.value("prop2"), "TEST");
+ QCOMPARE(obj2.size(), 1);
+ QCOMPARE(obj2.value("value"), "TEST");
+ }
+}
+
void tst_QtJson::testArraySimple()
{
QJsonArray array;
@@ -644,6 +715,32 @@ void tst_QtJson::testArraySimple()
QCOMPARE(array.at(1), QJsonValue(QLatin1String("test")));
}
+void tst_QtJson::testArrayInsertCopies()
+{
+ {
+ QJsonArray array;
+ array.append("TEST");
+ QCOMPARE(array.size(), 1);
+ QCOMPARE(array.at(0), "TEST");
+
+ array.append(array.at(0));
+ QCOMPARE(array.size(), 2);
+ QCOMPARE(array.at(0), "TEST");
+ QCOMPARE(array.at(1), "TEST");
+ }
+ {
+ QJsonArray array;
+ array.append("TEST");
+ QCOMPARE(array.size(), 1);
+ QCOMPARE(array.at(0), "TEST");
+
+ array.prepend(array.at(0));
+ QCOMPARE(array.size(), 2);
+ QCOMPARE(array.at(0), "TEST");
+ QCOMPARE(array.at(1), "TEST");
+ }
+}
+
void tst_QtJson::testValueObject()
{
QJsonObject object;
diff --git a/tests/auto/corelib/serialization/qcborvalue/tst_qcborvalue.cpp b/tests/auto/corelib/serialization/qcborvalue/tst_qcborvalue.cpp
index 6d8161c1f9..05cf199abe 100644
--- a/tests/auto/corelib/serialization/qcborvalue/tst_qcborvalue.cpp
+++ b/tests/auto/corelib/serialization/qcborvalue/tst_qcborvalue.cpp
@@ -65,6 +65,7 @@ private slots:
void arrayEmptyDetach();
void arrayInitializerList();
void arrayMutation();
+ void arrayMutateWithCopies();
void arrayPrepend();
void arrayInsertRemove_data() { basics_data(); }
void arrayInsertRemove();
@@ -79,6 +80,7 @@ private slots:
void mapEmptyDetach();
void mapSimpleInitializerList();
void mapMutation();
+ void mapMutateWithCopies();
void mapStringValues();
void mapStringKeys();
void mapInsertRemove_data() { basics_data(); }
@@ -816,6 +818,59 @@ void tst_QCborValue::arrayMutation()
QCOMPARE(val[2].toArray().size(), 5);
}
+void tst_QCborValue::arrayMutateWithCopies()
+{
+ {
+ QCborArray array;
+ array.append("TEST");
+ QCOMPARE(array.size(), 1);
+ QCOMPARE(array.at(0), "TEST");
+
+ array.append(array.at(0));
+ QCOMPARE(array.size(), 2);
+ QCOMPARE(array.at(0), "TEST");
+ QCOMPARE(array.at(1), "TEST");
+ }
+ {
+ QCborArray array;
+ array.append("TEST");
+ QCOMPARE(array.size(), 1);
+ QCOMPARE(array.at(0), "TEST");
+
+ // same as previous, but with prepend() not append()
+ array.prepend(array.at(0));
+ QCOMPARE(array.size(), 2);
+ QCOMPARE(array.at(0), "TEST");
+ QCOMPARE(array.at(1), "TEST");
+ }
+ {
+ QCborArray array;
+ array.append("TEST");
+ QCOMPARE(array.size(), 1);
+ QCOMPARE(array.at(0), "TEST");
+
+ // same as previous, but using a QCborValueRef
+ QCborValueRef rv = array[0];
+ array.prepend(rv);
+ QCOMPARE(array.size(), 2);
+ QCOMPARE(array.at(0), "TEST");
+ QCOMPARE(array.at(1), "TEST");
+ }
+ {
+ QCborArray array;
+ array.append("TEST");
+ QCOMPARE(array.size(), 1);
+ QCOMPARE(array.at(0), "TEST");
+
+ // same as previous, but now extending the array
+ QCborValueRef rv = array[0];
+ array[2] = rv;
+ QCOMPARE(array.size(), 3);
+ QCOMPARE(array.at(0), "TEST");
+ QCOMPARE(array.at(2), "TEST");
+ }
+}
+
void tst_QCborValue::mapMutation()
{
QCborMap m;
@@ -923,6 +978,76 @@ void tst_QCborValue::mapMutation()
QCOMPARE(val[any][3].toMap().size(), 1);
}
+void tst_QCborValue::mapMutateWithCopies()
+{
+ {
+ QCborMap map;
+ map[QLatin1String("prop1")] = "TEST";
+ QCOMPARE(map.size(), 1);
+ QCOMPARE(map.value("prop1"), "TEST");
+
+ map[QLatin1String("prop2")] = map.value("prop1");
+ QCOMPARE(map.size(), 2);
+ QCOMPARE(map.value("prop1"), "TEST");
+ QCOMPARE(map.value("prop2"), "TEST");
+ }
+ {
+ // see QTBUG-83366
+ QCborMap map;
+ map[QLatin1String("value")] = "TEST";
+ QCOMPARE(map.size(), 1);
+ QCOMPARE(map.value("value"), "TEST");
+
+ QCborValue v = map.value("value");
+ map[QLatin1String("prop2")] = v;
+ QCOMPARE(map.size(), 2);
+ QCOMPARE(map.value("value"), "TEST");
+ QCOMPARE(map.value("prop2"), "TEST");
+ }
+ {
+ QCborMap map;
+ map[QLatin1String("value")] = "TEST";
+ QCOMPARE(map.size(), 1);
+ QCOMPARE(map.value("value"), "TEST");
+
+ // same as previous, but this is a QJsonValueRef
+ QCborValueRef rv = map[QLatin1String("prop2")];
+ rv = map[QLatin1String("value")];
+ QCOMPARE(map.size(), 2);
+ QCOMPARE(map.value("value"), "TEST");
+ QCOMPARE(map.value("prop2"), "TEST");
+ }
+ {
+ QCborMap map;
+ map[QLatin1String("value")] = "TEST";
+ QCOMPARE(map.size(), 1);
+ QCOMPARE(map.value("value"), "TEST");
+
+ // same as previous, but now we call the operator[] that reallocates
+ // after we create the source QCborValueRef
+ QCborValueRef rv = map[QLatin1String("value")];
+ map[QLatin1String("prop2")] = rv;
+ QCOMPARE(map.size(), 2);
+ QCOMPARE(map.value("value"), "TEST");
+ QCOMPARE(map.value("prop2"), "TEST");
+ }
+ {
+ QCborMap map;
+ map[QLatin1String("value")] = "TEST";
+ QCOMPARE(map.size(), 1);
+ QCOMPARE(map.value("value"), "TEST");
+
+ QCborValueRef v = map[QLatin1String("value")];
+ QCborMap map2 = map;
+ map.insert(QLatin1String("prop2"), v);
+ QCOMPARE(map.size(), 2);
+ QCOMPARE(map.value("value"), "TEST");
+ QCOMPARE(map.value("prop2"), "TEST");
+ QCOMPARE(map2.size(), 1);
+ QCOMPARE(map2.value("value"), "TEST");
+ }
+}
+
void tst_QCborValue::arrayPrepend()
{
QCborArray a;