File indexing completed on 2024-11-10 04:40:22

0001 /*
0002     SPDX-FileCopyrightText: 2019 Daniel Vrátil <dvratil@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include <QObject>
0008 #include <QTest>
0009 
0010 #include "shared/akscopeguard.h"
0011 
0012 using namespace Akonadi;
0013 
0014 class AkScopeGuardTest : public QObject
0015 {
0016     Q_OBJECT
0017 
0018 private:
0019     static void staticMethod()
0020     {
0021         Q_ASSERT(!mCalled);
0022         mCalled = true;
0023     }
0024 
0025     void regularMethod()
0026     {
0027         Q_ASSERT(!mCalled);
0028         mCalled = true;
0029     }
0030 
0031 private Q_SLOTS:
0032 
0033     void testLambda()
0034     {
0035         mCalled = false;
0036         {
0037             AkScopeGuard guard([&]() {
0038                 Q_ASSERT(!mCalled);
0039                 mCalled = true;
0040             });
0041         }
0042         QVERIFY(mCalled);
0043     }
0044 
0045     void testStaticMethod()
0046     {
0047         mCalled = false;
0048         {
0049             AkScopeGuard guard(&AkScopeGuardTest::staticMethod);
0050         }
0051         QVERIFY(mCalled);
0052     }
0053 
0054     void testBindExpr()
0055     {
0056         mCalled = false;
0057         {
0058             AkScopeGuard guard(std::bind(&AkScopeGuardTest::regularMethod, this));
0059         }
0060         QVERIFY(mCalled);
0061     }
0062 
0063     void testStdFunction()
0064     {
0065         mCalled = false;
0066         std::function<void()> func = [&]() {
0067             Q_ASSERT(!mCalled);
0068             mCalled = true;
0069         };
0070         {
0071             AkScopeGuard guard(func);
0072         }
0073         QVERIFY(mCalled);
0074     }
0075 
0076 private:
0077     static bool mCalled;
0078 };
0079 
0080 bool AkScopeGuardTest::mCalled = false;
0081 
0082 QTEST_GUILESS_MAIN(AkScopeGuardTest)
0083 
0084 #include "akscopeguardtest.moc"