Add a simple test for QVariant carrying a QSharedPointer<QObject>

Change-Id: Ibe17355c7ed8d4af7fda6261d72cfd64779471a7
Reviewed-by: Stephen Kelly <stephen.kelly@kdab.com>
This commit is contained in:
Thiago Macieira 2013-09-10 12:55:05 -07:00 committed by The Qt Project
parent bcbec4bc49
commit 8fa0e4d1d2

View File

@ -155,6 +155,7 @@ private slots:
void qvariant_cast_QObject();
void qvariant_cast_QObject_derived();
void qvariant_cast_QObject_wrapper();
void qvariant_cast_QSharedPointerQObject();
void toLocale();
@ -2324,6 +2325,41 @@ void tst_QVariant::qvariant_cast_QObject_wrapper()
qRegisterMetaType<MyNS::SmartPointer<double> >("MyNS::SmartPointer<double>");
}
void tst_QVariant::qvariant_cast_QSharedPointerQObject()
{
// ensure no problems between this form and the auto-registering in QVariant::fromValue
qRegisterMetaType<QSharedPointer<QObject> >("QSharedPointer<QObject>");
QObject *rawptr = new QObject;
QSharedPointer<QObject> strong(rawptr);
QWeakPointer<QObject> weak(strong);
QPointer<QObject> qptr(rawptr);
QVariant v = QVariant::fromValue(strong);
QCOMPARE(v.value<QSharedPointer<QObject> >(), strong);
// clear our QSP; the copy inside the variant should keep the object alive
strong.clear();
// check that the object didn't get deleted
QVERIFY(!weak.isNull());
QVERIFY(!qptr.isNull());
strong = qvariant_cast<QSharedPointer<QObject> >(v);
QCOMPARE(strong.data(), rawptr);
QVERIFY(strong == weak);
// now really delete the object and verify
strong.clear();
v.clear();
QVERIFY(weak.isNull());
QVERIFY(qptr.isNull());
// compile test:
// QVariant::fromValue has already called this function
qRegisterMetaType<QSharedPointer<QObject> >();
}
void tst_QVariant::convertToQUint8() const
{
/* qint8. */