From 9e1a9878aaeac75f5c9e73a0d0e1a4e489e13cbc Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Thu, 24 May 2012 14:30:42 +0200 Subject: [PATCH] Add a unit test to QSharedPointer being deleted by a C++11 lambda This already worked, but let's have a test so we can be sure it doesn't regress. Change-Id: I358b436d216e3ec4310f05ccf4f70f9e7aad3281 Reviewed-by: Stephen Kelly Reviewed-by: Lars Knoll --- .../qsharedpointer/tst_qsharedpointer.cpp | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp b/tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp index 506bab6a23..7c3f0e5415 100644 --- a/tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp +++ b/tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp @@ -89,6 +89,7 @@ private slots: #endif void constCorrectness(); void customDeleter(); + void lambdaCustomDeleter(); void creating(); void creatingQObject(); void mixTrackingPointerCode(); @@ -1336,6 +1337,37 @@ void tst_QSharedPointer::customDeleter() safetyCheck(); } +void tst_QSharedPointer::lambdaCustomDeleter() +{ +#ifndef Q_COMPILER_LAMBDA + QSKIP("This compiler is not in C++11 mode or does not support lambdas"); +#else + { + // stateless, one-argument + QSharedPointer ptr(new Data, [](Data *d) { delete d; }); + QSharedPointer ptr2(new Data, [](Data *d) { d->doDelete(); }); + } + safetyCheck(); + + customDeleterFnCallCount = 0; + { + // stateless, one-argument, modifies globals + QSharedPointer ptr(new Data, [](Data *d) { ++customDeleterFnCallCount; delete d; }); + } + safetyCheck(); + QCOMPARE(customDeleterFnCallCount, 1); + + { + // stateful by ref, one-argument + int i = 0; + QSharedPointer ptr(new Data, [&i](Data *d) { i = 42; delete d; }); + ptr.clear(); + QCOMPARE(i, 42); + } + safetyCheck(); +#endif +} + void customQObjectDeleterFn(QObject *obj) { ++customDeleterFnCallCount;