diff options
author | Fabian Kosmale <fabian.kosmale@qt.io> | 2020-11-18 16:32:46 +0100 |
---|---|---|
committer | Fabian Kosmale <fabian.kosmale@qt.io> | 2020-11-30 17:16:21 +0100 |
commit | 2cea05fce920d428dd05938620f16981ddc9176f (patch) | |
tree | 155539a255a8ed5311c28791b5de96896ddae408 /tests/auto/corelib | |
parent | 71200ae11ded9aba41c96101b09e0a0b01d29cac (diff) |
tst_qmetaobjectbuilder: Clean-up deallocation of dynamic metaobjects
If a testcase failed before we reached free, the QMetaObject would have
leaked.
Moreover, defer freeing until all tests have run: dynamic QMetaObjects
might create dynamic metatypes. If those were shared, we would run into
issues.
Change-Id: I2edfcb2605e58eaba454bfe0446a6b187a5210df
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'tests/auto/corelib')
-rw-r--r-- | tests/auto/corelib/kernel/qmetaobjectbuilder/tst_qmetaobjectbuilder.cpp | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/tests/auto/corelib/kernel/qmetaobjectbuilder/tst_qmetaobjectbuilder.cpp b/tests/auto/corelib/kernel/qmetaobjectbuilder/tst_qmetaobjectbuilder.cpp index 2c3798e4ca..21166533bf 100644 --- a/tests/auto/corelib/kernel/qmetaobjectbuilder/tst_qmetaobjectbuilder.cpp +++ b/tests/auto/corelib/kernel/qmetaobjectbuilder/tst_qmetaobjectbuilder.cpp @@ -66,10 +66,13 @@ private slots: void propertyMetaType(); + void cleanupTestCase(); + private: static bool checkForSideEffects (const QMetaObjectBuilder& builder, QMetaObjectBuilder::AddMembers members); + QList<QMetaObject *> dynamicMetaObjectsPendingFree; }; struct MetaObjectComparison { @@ -757,13 +760,12 @@ void tst_QMetaObjectBuilder::variantProperty() QMetaObjectBuilder builder; builder.addProperty("variant", "const QVariant &"); QMetaObject *meta = builder.toMetaObject(); + dynamicMetaObjectsPendingFree.push_back(meta); QMetaProperty prop = meta->property(meta->propertyOffset()); QCOMPARE(QMetaType::Type(prop.userType()), QMetaType::QVariant); QCOMPARE(QMetaType::Type(prop.userType()), QMetaType::QVariant); QCOMPARE(QByteArray(prop.typeName()), QByteArray("QVariant")); - - free(meta); } void tst_QMetaObjectBuilder::notifySignal() @@ -1007,21 +1009,21 @@ void tst_QMetaObjectBuilder::copyMetaObject() { QMetaObjectBuilder builder(&QObject::staticMetaObject); QMetaObject *meta = builder.toMetaObject(); + dynamicMetaObjectsPendingFree.push_back(meta); auto compared = sameMetaObject(meta, &QObject::staticMetaObject); QVERIFY2(compared, qPrintable(compared.details)); - free(meta); QMetaObjectBuilder builder2(&staticMetaObject); meta = builder2.toMetaObject(); + dynamicMetaObjectsPendingFree.push_back(meta); compared = sameMetaObject(meta, &staticMetaObject); QVERIFY2(compared, qPrintable(compared.details)); - free(meta); QMetaObjectBuilder builder3(&SomethingOfEverything::staticMetaObject); meta = builder3.toMetaObject(); + dynamicMetaObjectsPendingFree.push_back(meta); compared = sameMetaObject(meta, &SomethingOfEverything::staticMetaObject); QVERIFY2(compared, qPrintable(compared.details)); - free(meta); } // Serialize and deserialize a meta object and check that @@ -1032,6 +1034,7 @@ void tst_QMetaObjectBuilder::serialize() { QMetaObjectBuilder builder(&SomethingOfEverything::staticMetaObject); QMetaObject *meta = builder.toMetaObject(); + dynamicMetaObjectsPendingFree.push_back(meta); QByteArray data; QDataStream stream(&data, QIODevice::WriteOnly | QIODevice::Append); @@ -1044,11 +1047,10 @@ void tst_QMetaObjectBuilder::serialize() builder2.deserialize(stream2, references); builder2.setStaticMetacallFunction(builder.staticMetacallFunction()); QMetaObject *meta2 = builder2.toMetaObject(); + dynamicMetaObjectsPendingFree.push_back(meta2); auto compared = sameMetaObject(meta, meta2); QVERIFY2(compared, qPrintable(compared.details)); - free(meta); - free(meta2); } // Partial QMetaObjectBuilder @@ -1102,13 +1104,12 @@ void tst_QMetaObjectBuilder::relocatableData() QMetaObject *meta = builder.toMetaObject(); auto compared = sameMetaObject(meta, &meta2); + dynamicMetaObjectsPendingFree.push_back(meta); QVERIFY2(compared, qPrintable(compared.details)); QVERIFY(!meta2.d.extradata); QVERIFY(!meta2.d.relatedMetaObjects); QVERIFY(!meta2.d.static_metacall); - - free(meta); } @@ -1745,6 +1746,12 @@ void tst_QMetaObjectBuilder::propertyMetaType() free(mo); } +void tst_QMetaObjectBuilder::cleanupTestCase() +{ + for (QMetaObject *obj: dynamicMetaObjectsPendingFree) + free(obj); +} + QTEST_MAIN(tst_QMetaObjectBuilder) #include "tst_qmetaobjectbuilder.moc" |