From 1c7421ad14f9321422cdfeede3902552a34ccf3b Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Thu, 26 Apr 2012 14:40:48 +0200 Subject: Add test of automated container metatype declaration. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Iddaf444ead6d9f0147b9b11452ccea46aa712ba3 Reviewed-by: Jędrzej Nowacki --- .../corelib/kernel/qmetatype/tst_qmetatype.cpp | 104 +++++++++++++++++++++ 1 file changed, 104 insertions(+) (limited to 'tests/auto') diff --git a/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp b/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp index e09517678e..c3e2bd299d 100644 --- a/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp +++ b/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp @@ -1331,6 +1331,110 @@ void tst_QMetaType::automaticTemplateRegistration() typedef QList UnregisteredTypeList; QVERIFY(qRegisterMetaType("UnregisteredTypeList") > 0); } + +#ifdef Q_COMPILER_VARIADIC_MACROS + + #define FOR_EACH_STATIC_PRIMITIVE_TYPE(F, ...) \ + F(bool, __VA_ARGS__) \ + F(int, __VA_ARGS__) \ + F(uint, __VA_ARGS__) \ + F(qlonglong, __VA_ARGS__) \ + F(qulonglong, __VA_ARGS__) \ + F(double, __VA_ARGS__) \ + F(long, __VA_ARGS__) \ + F(short, __VA_ARGS__) \ + F(char, __VA_ARGS__) \ + F(ulong, __VA_ARGS__) \ + F(ushort, __VA_ARGS__) \ + F(uchar, __VA_ARGS__) \ + F(float, __VA_ARGS__) \ + F(QObject*, __VA_ARGS__) \ + F(QString, __VA_ARGS__) \ + F(CustomMovable, __VA_ARGS__) + + #define FOR_EACH_STATIC_PRIMITIVE_TYPE2(F, ...) \ + F(bool, __VA_ARGS__) \ + F(int, __VA_ARGS__) \ + F(uint, __VA_ARGS__) \ + F(qlonglong, __VA_ARGS__) \ + F(qulonglong, __VA_ARGS__) \ + F(double, __VA_ARGS__) \ + F(long, __VA_ARGS__) \ + F(short, __VA_ARGS__) \ + F(char, __VA_ARGS__) \ + F(ulong, __VA_ARGS__) \ + F(ushort, __VA_ARGS__) \ + F(uchar, __VA_ARGS__) \ + F(float, __VA_ARGS__) \ + F(QObject*, __VA_ARGS__) \ + F(QString, __VA_ARGS__) \ + F(CustomMovable, __VA_ARGS__) + + + #define CREATE_AND_VERIFY_CONTAINER(CONTAINER, ...) \ + { \ + CONTAINER< __VA_ARGS__ > t; \ + const QVariant v = QVariant::fromValue(t); \ + QByteArray tn = #CONTAINER + QByteArray("<"); \ + const QList args = QByteArray(#__VA_ARGS__).split(','); \ + tn += args.first().trimmed(); \ + if (args.size() > 1) { \ + QList::const_iterator it = args.constBegin() + 1; \ + const QList::const_iterator end = args.constEnd(); \ + for (; it != end; ++it) { \ + tn += ","; \ + tn += it->trimmed(); \ + } \ + } \ + tn += ">"; \ + const int type = QMetaType::type(tn); \ + const int expectedType = ::qMetaTypeId >(); \ + QCOMPARE(type, expectedType); \ + } + + #define FOR_EACH_1ARG_TEMPLATE_TYPE(F, TYPE) \ + F(QList, TYPE) \ + F(QVector, TYPE) \ + F(QLinkedList, TYPE) \ + F(QVector, TYPE) \ + F(QVector, TYPE) \ + F(QQueue, TYPE) \ + F(QStack, TYPE) \ + F(QSet, TYPE) \ + F(QSharedPointer, TYPE) + + #define PRINT_1ARG_TEMPLATE(RealName, ...) \ + FOR_EACH_1ARG_TEMPLATE_TYPE(CREATE_AND_VERIFY_CONTAINER, RealName) + + #define FOR_EACH_2ARG_TEMPLATE_TYPE(F, RealName, ...) \ + F(QHash, __VA_ARGS__) \ + F(QMap, __VA_ARGS__) \ + F(QPair, __VA_ARGS__) + + #define PRINT_2ARG_TEMPLATE_INTERNAL(RealName, ...) \ + FOR_EACH_2ARG_TEMPLATE_TYPE(CREATE_AND_VERIFY_CONTAINER, 0, RealName, __VA_ARGS__) + + #define PRINT_2ARG_TEMPLATE(RealName, ...) \ + FOR_EACH_STATIC_PRIMITIVE_TYPE2(PRINT_2ARG_TEMPLATE_INTERNAL, RealName) + + #define REGISTER_TYPEDEF(TYPE, ARG1, ARG2) \ + qRegisterMetaType >(#TYPE "<" #ARG1 "," #ARG2 ">"); + + REGISTER_TYPEDEF(QHash, int, uint) + REGISTER_TYPEDEF(QMap, int, uint) + REGISTER_TYPEDEF(QPair, int, uint) + + FOR_EACH_STATIC_PRIMITIVE_TYPE( + PRINT_1ARG_TEMPLATE + ) + FOR_EACH_STATIC_PRIMITIVE_TYPE( + PRINT_2ARG_TEMPLATE + ) + + CREATE_AND_VERIFY_CONTAINER(QList, QList > >) + +#endif // Q_COMPILER_VARIADIC_MACROS + } template -- cgit v1.2.3