summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp')
-rw-r--r--tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp36
1 files changed, 36 insertions, 0 deletions
diff --git a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp
index dab40db0ec..39b16200df 100644
--- a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp
+++ b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp
@@ -154,6 +154,7 @@ private slots:
void qvariant_cast_QObject_data();
void qvariant_cast_QObject();
void qvariant_cast_QObject_derived();
+ void qvariant_cast_QObject_wrapper();
void toLocale();
@@ -2235,6 +2236,41 @@ void tst_QVariant::qvariant_cast_QObject_derived()
}
}
+struct QObjectWrapper
+{
+ explicit QObjectWrapper(QObject *o = 0) : obj(o) {}
+
+ QObject* getObject() const {
+ return obj;
+ }
+private:
+ QObject *obj;
+};
+
+Q_DECLARE_METATYPE(QObjectWrapper)
+
+struct Converter
+{
+ Converter() {}
+
+ QObject* operator()(const QObjectWrapper &f) const
+ {
+ return f.getObject();
+ }
+};
+
+void tst_QVariant::qvariant_cast_QObject_wrapper()
+{
+ QMetaType::registerConverter<QObjectWrapper, QObject*>(&QObjectWrapper::getObject);
+
+ CustomQObjectDerived *object = new CustomQObjectDerived(this);
+ QObjectWrapper wrapper(object);
+ QVariant v = QVariant::fromValue(wrapper);
+ v.convert(qMetaTypeId<QObject*>());
+ QCOMPARE(v.value<QObject*>(), object);
+
+}
+
void tst_QVariant::convertToQUint8() const
{
/* qint8. */