diff options
author | Stephen Kelly <stephen.kelly@kdab.com> | 2013-09-08 08:49:29 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-09-11 12:24:42 +0200 |
commit | 546d52e605b6a74d9a5be26fb374b831a46f2550 (patch) | |
tree | c48f2e75179c44f5bee37ee2c5d8b8afcc4d072a /tests | |
parent | 3256856bbea22da03109b84ef407e8dbc69930e7 (diff) |
Add a convenient way to get a type-erased smart pointer from a QVariant.
Any known smart pointer in a QVariant can be handled in this way. The
metatype system can be informed of new smart pointer types using an
existing macro which is now documented.
This is very similar to the existing infrastructure
for containers.
Change-Id: Iac4f9fabbc5a0626c04e1185d51d720b8b54603d
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp index 502e2504c9..c59e87cf13 100644 --- a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp +++ b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp @@ -2300,6 +2300,8 @@ Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE(MyNS::AssociativeContainer) // Test that explicit declaration does not degrade features. Q_DECLARE_METATYPE(MyNS::SmartPointer<int>) +Q_DECLARE_METATYPE(MyNS::SmartPointer<QIODevice>) +Q_DECLARE_METATYPE(QSharedPointer<QIODevice>) void tst_QVariant::qvariant_cast_QObject_wrapper() { @@ -2319,6 +2321,57 @@ void tst_QVariant::qvariant_cast_QObject_wrapper() QVariant::fromValue(sc); QVariant::fromValue(ac); + { + QFile *f = new QFile(this); + MyNS::SmartPointer<QFile> sp(f); + QVariant spVar = QVariant::fromValue(sp); + QVERIFY(spVar.canConvert<QObject*>()); + QCOMPARE(f, spVar.value<QObject*>()); + } + { + QFile *f = new QFile(this); + QPointer<QFile> sp(f); + QVariant spVar = QVariant::fromValue(sp); + QVERIFY(spVar.canConvert<QObject*>()); + QCOMPARE(f, spVar.value<QObject*>()); + } + { + QFile *f = new QFile(this); + QWeakPointer<QFile> sp(f); + QVariant spVar = QVariant::fromValue(sp); + QVERIFY(spVar.canConvert<QObject*>()); + QCOMPARE(f, spVar.value<QObject*>()); + } + { + QFile *f = new QFile(this); + QSharedPointer<QFile> sp(f); + QWeakPointer<QFile> wp = sp.toWeakRef(); + QVariant wpVar = QVariant::fromValue(wp); + QVERIFY(wpVar.canConvert<QObject*>()); + QCOMPARE(f, wpVar.value<QObject*>()); + } + { + QFile *f = new QFile(this); + QSharedPointer<QFile> sp(f); + QVariant spVar = QVariant::fromValue(sp); + QVERIFY(spVar.canConvert<QObject*>()); + QCOMPARE(f, spVar.value<QObject*>()); + } + { + QIODevice *f = new QFile(this); + MyNS::SmartPointer<QIODevice> sp(f); + QVariant spVar = QVariant::fromValue(sp); + QVERIFY(spVar.canConvert<QObject*>()); + QCOMPARE(f, spVar.value<QObject*>()); + } + { + QIODevice *f = new QFile(this); + QSharedPointer<QIODevice> sp(f); + QVariant spVar = QVariant::fromValue(sp); + QVERIFY(spVar.canConvert<QObject*>()); + QCOMPARE(f, spVar.value<QObject*>()); + } + // Compile tests: qRegisterMetaType<MyNS::SmartPointer<int> >(); // Not declared as a metatype: |