diff options
author | Jędrzej Nowacki <jedrzej.nowacki@nokia.com> | 2011-12-13 12:07:47 +0100 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-12-22 13:20:40 +0100 |
commit | 56f154c747a6623fc8249265262160ac0adbe4cd (patch) | |
tree | 5b3a86073db010820b745d0ca8a9284997a71e7b /tests/auto/corelib/kernel/qmetatype | |
parent | d868c9945a188d6ad22e0b7d6d24ac7fca00ab4e (diff) |
Allow QMetaType to register information about movability
We need that information to perform some optimizations in QVariant.
Change-Id: Id9a1716e49e4cedd17cd09a32fea4ff003ef61f2
Reviewed-by: João Abecasis <joao.abecasis@nokia.com>
Diffstat (limited to 'tests/auto/corelib/kernel/qmetatype')
-rw-r--r-- | tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp b/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp index e0433ea4b0..12a57447cd 100644 --- a/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp +++ b/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp @@ -78,6 +78,8 @@ private slots: void createCopy(); void sizeOf_data(); void sizeOf(); + void flags_data(); + void flags(); void construct_data(); void construct(); void constructCopy_data(); @@ -129,6 +131,10 @@ protected: #ifdef Q_OS_LINUX pthread_yield(); #endif + if (QMetaType::typeFlags(tp) != (QMetaType::NeedsConstruction | QMetaType::NeedsDestruction)) { + ++failureCount; + qWarning() << "Wrong typeInfo returned for" << tp; + } if (!QMetaType::isRegistered(tp)) { ++failureCount; qWarning() << name << "is not a registered metatype"; @@ -578,6 +584,40 @@ void tst_QMetaType::sizeOf() QCOMPARE(QMetaType::sizeOf(type), size); } +struct CustomMovable {}; +QT_BEGIN_NAMESPACE +Q_DECLARE_TYPEINFO(CustomMovable, Q_MOVABLE_TYPE); +QT_END_NAMESPACE +Q_DECLARE_METATYPE(CustomMovable); + +void tst_QMetaType::flags_data() +{ + QTest::addColumn<int>("type"); + QTest::addColumn<bool>("isMovable"); + QTest::addColumn<bool>("isComplex"); + +#define ADD_METATYPE_TEST_ROW(MetaTypeName, MetaTypeId, RealType) \ + QTest::newRow(#RealType) << MetaTypeId << bool(!QTypeInfo<RealType>::isStatic) << bool(QTypeInfo<RealType>::isComplex); +QT_FOR_EACH_STATIC_CORE_CLASS(ADD_METATYPE_TEST_ROW) +QT_FOR_EACH_STATIC_PRIMITIVE_POINTER(ADD_METATYPE_TEST_ROW) +QT_FOR_EACH_STATIC_CORE_POINTER(ADD_METATYPE_TEST_ROW) +#undef ADD_METATYPE_TEST_ROW + QTest::newRow("TestSpace::Foo") << ::qMetaTypeId<TestSpace::Foo>() << false << true; + QTest::newRow("Whity<double>") << ::qMetaTypeId<Whity<double> >() << false << true; + QTest::newRow("CustomMovable") << ::qMetaTypeId<CustomMovable>() << true << true; +} + +void tst_QMetaType::flags() +{ + QFETCH(int, type); + QFETCH(bool, isMovable); + QFETCH(bool, isComplex); + + QCOMPARE(bool(QMetaType::typeFlags(type) & QMetaType::NeedsConstruction), isComplex); + QCOMPARE(bool(QMetaType::typeFlags(type) & QMetaType::NeedsDestruction), isComplex); + QCOMPARE(bool(QMetaType::typeFlags(type) & QMetaType::MovableType), isMovable); +} + void tst_QMetaType::construct_data() { create_data(); |