From 579ea489a40ae0240f22c3d31bde1fc2cd8aaf15 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Thu, 24 May 2012 14:35:45 +0200 Subject: Record if a metatype is a smart pointer to a QObject derived. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This allows QVariant/QMetaType software (such as QtDeclarative) to deal with smart pointers in a similar way to how they can deal with naked pointers (accessing properties etc). This also adds a requirement that T be fully defined when QSharedPointer is inserted into a QVariant. Change-Id: I29e12b8a6aa5f4aadbd62f92b89bc238f64b5725 Reviewed-by: Jędrzej Nowacki --- .../corelib/kernel/qmetatype/tst_qmetatype.cpp | 31 ++++++++++++---------- 1 file changed, 17 insertions(+), 14 deletions(-) (limited to 'tests') diff --git a/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp b/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp index 861cedf416..f1053ad2b4 100644 --- a/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp +++ b/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp @@ -1462,30 +1462,33 @@ void tst_QMetaType::automaticTemplateRegistration() #endif // Q_COMPILER_VARIADIC_MACROS -#define TEST_SMARTPOINTER(SMARTPOINTER, ELEMENT_TYPE) \ +#define TEST_SMARTPOINTER(SMARTPOINTER, ELEMENT_TYPE, FLAG_TEST, FROMVARIANTFUNCTION) \ { \ SMARTPOINTER < ELEMENT_TYPE > sp(new ELEMENT_TYPE); \ + sp.data()->setObjectName("Test name"); \ QVariant v = QVariant::fromValue(sp); \ QCOMPARE(v.typeName(), #SMARTPOINTER "<" #ELEMENT_TYPE ">"); \ + QVERIFY(QMetaType::typeFlags(::qMetaTypeId >()) & QMetaType::FLAG_TEST); \ + SMARTPOINTER < QObject > extractedPtr = FROMVARIANTFUNCTION(v); \ + QCOMPARE(extractedPtr.data()->objectName(), sp.data()->objectName()); \ } - TEST_SMARTPOINTER(QSharedPointer, QObject) - TEST_SMARTPOINTER(QSharedPointer, QFile) - TEST_SMARTPOINTER(QSharedPointer, QTemporaryFile) - TEST_SMARTPOINTER(QSharedPointer, MyObject) + TEST_SMARTPOINTER(QSharedPointer, QObject, SharedPointerToQObject, qSharedPointerFromVariant) + TEST_SMARTPOINTER(QSharedPointer, QFile, SharedPointerToQObject, qSharedPointerFromVariant) + TEST_SMARTPOINTER(QSharedPointer, QTemporaryFile, SharedPointerToQObject, qSharedPointerFromVariant) + TEST_SMARTPOINTER(QSharedPointer, MyObject, SharedPointerToQObject, qSharedPointerFromVariant) - TEST_SMARTPOINTER(QWeakPointer, QObject) - TEST_SMARTPOINTER(QWeakPointer, QFile) - TEST_SMARTPOINTER(QWeakPointer, QTemporaryFile) - TEST_SMARTPOINTER(QWeakPointer, MyObject) + TEST_SMARTPOINTER(QWeakPointer, QObject, WeakPointerToQObject, qWeakPointerFromVariant) + TEST_SMARTPOINTER(QWeakPointer, QFile, WeakPointerToQObject, qWeakPointerFromVariant) + TEST_SMARTPOINTER(QWeakPointer, QTemporaryFile, WeakPointerToQObject, qWeakPointerFromVariant) + TEST_SMARTPOINTER(QWeakPointer, MyObject, WeakPointerToQObject, qWeakPointerFromVariant) - TEST_SMARTPOINTER(QPointer, QObject) - TEST_SMARTPOINTER(QPointer, QFile) - TEST_SMARTPOINTER(QPointer, QTemporaryFile) - TEST_SMARTPOINTER(QPointer, MyObject) + TEST_SMARTPOINTER(QPointer, QObject, TrackingPointerToQObject, qPointerFromVariant) + TEST_SMARTPOINTER(QPointer, QFile, TrackingPointerToQObject, qPointerFromVariant) + TEST_SMARTPOINTER(QPointer, QTemporaryFile, TrackingPointerToQObject, qPointerFromVariant) + TEST_SMARTPOINTER(QPointer, MyObject, TrackingPointerToQObject, qPointerFromVariant) #undef TEST_SMARTPOINTER - } template -- cgit v1.2.3