Fix a bug in the assignment operators for QJsonObject and Array
When objects or arrays where being used read only, several objects can share the same d pointer, but will have different pointers into the binary data. Correctly change the pointer into the binary data even if the d-pointer is the same. Change-Id: Ife0ea5ac5daf46586f855dccdf35b51ec696a623 Reviewed-by: João Abecasis <joao.abecasis@nokia.com>bb10
parent
cf6dd5baca
commit
763790bb5c
|
|
@ -122,10 +122,10 @@ QJsonArray &QJsonArray::operator =(const QJsonArray &other)
|
|||
if (d && !d->ref.deref())
|
||||
delete d;
|
||||
d = other.d;
|
||||
a = other.a;
|
||||
if (d)
|
||||
d->ref.ref();
|
||||
}
|
||||
a = other.a;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -125,10 +125,10 @@ QJsonObject &QJsonObject::operator =(const QJsonObject &other)
|
|||
if (d && !d->ref.deref())
|
||||
delete d;
|
||||
d = other.d;
|
||||
o = other.o;
|
||||
if (d)
|
||||
d->ref.ref();
|
||||
}
|
||||
o = other.o;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -117,6 +117,9 @@ private Q_SLOTS:
|
|||
void testCompactionError();
|
||||
|
||||
void parseUnicodeEscapes();
|
||||
|
||||
void assignObjects();
|
||||
void assignArrays();
|
||||
private:
|
||||
QString testDataDir;
|
||||
};
|
||||
|
|
@ -1774,5 +1777,35 @@ void TestQtJson::parseUnicodeEscapes()
|
|||
QCOMPARE(array.first().toString(), result);
|
||||
}
|
||||
|
||||
void TestQtJson::assignObjects()
|
||||
{
|
||||
const char *json =
|
||||
"[ { \"Key\": 1 }, { \"Key\": 2 } ]";
|
||||
|
||||
QJsonDocument doc = QJsonDocument::fromJson(json);
|
||||
QJsonArray array = doc.array();
|
||||
|
||||
QJsonObject object = array.at(0).toObject();
|
||||
QCOMPARE(object.value("Key").toDouble(), 1.);
|
||||
|
||||
object = array.at(1).toObject();
|
||||
QCOMPARE(object.value("Key").toDouble(), 2.);
|
||||
}
|
||||
|
||||
void TestQtJson::assignArrays()
|
||||
{
|
||||
const char *json =
|
||||
"[ [ 1 ], [ 2 ] ]";
|
||||
|
||||
QJsonDocument doc = QJsonDocument::fromJson(json);
|
||||
QJsonArray array = doc.array();
|
||||
|
||||
QJsonArray inner = array.at(0).toArray() ;
|
||||
QCOMPARE(inner.at(0).toDouble(), 1.);
|
||||
|
||||
inner= array.at(1).toArray();
|
||||
QCOMPARE(inner.at(0).toDouble(), 2.);
|
||||
}
|
||||
|
||||
QTEST_MAIN(TestQtJson)
|
||||
#include "tst_qtjson.moc"
|
||||
|
|
|
|||
Loading…
Reference in New Issue