Add some tests for compatible and incompatible custom deleters
authorThiago Macieira <thiago.macieira@intel.com>
Mon, 24 Sep 2012 15:51:15 +0000 (17:51 +0200)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Mon, 24 Sep 2012 19:27:51 +0000 (21:27 +0200)
Change-Id: I2bb7f597aab0f00a250881602e6a6bb7bfe42e18
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp

index 03270a2..614c046 100644 (file)
@@ -1317,6 +1317,12 @@ void tst_QSharedPointer::customDeleter()
     QCOMPARE(derivedDataDeleter.callCount, 1);
     QCOMPARE(refcount, 2);
     safetyCheck();
+
+    // a custom deleter with a different pointer parameter
+    {
+        QSharedPointer<char> ptr(static_cast<char *>(malloc(1)), free);
+    }
+    safetyCheck();
 }
 
 void tst_QSharedPointer::lambdaCustomDeleter()
@@ -1804,6 +1810,20 @@ void tst_QSharedPointer::invalidConstructs_data()
         << &QTest::QExternalTest::tryCompileFail
         << "Data *ptr = 0;\n"
            "QSharedPointer<Data> weakptr = Qt::Uninitialized;\n";
+
+    QTest::newRow("incompatible-custom-deleter1")
+        << &QTest::QExternalTest::tryCompileFail
+        << "extern void incompatibleCustomDeleter(int *);\n"
+           "QSharedPointer<Data> ptr(new Data, incompatibleCustomDeleter);\n";
+    QTest::newRow("incompatible-custom-deleter2")
+        << &QTest::QExternalTest::tryCompileFail
+        << "struct IncompatibleCustomDeleter { void operator()(int *); };\n"
+           "QSharedPointer<Data> ptr(new Data, IncompatibleCustomDeleter());\n";
+#ifdef Q_COMPILER_LAMBDA
+    QTest::newRow("incompatible-custom-lambda-deleter")
+        << &QTest::QExternalTest::tryCompileFail
+        << "QSharedPointer<Data> ptr(new Data, [](int *) {});\n";
+#endif
 }
 
 void tst_QSharedPointer::invalidConstructs()