File indexing completed on 2024-04-21 16:12:20

0001 /*
0002     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0003     SPDX-FileCopyrightText: 2021 Harald Sitter <sitter@kde.org>
0004 */
0005 
0006 #include <QSignalSpy>
0007 #include <QTest>
0008 
0009 #include <config-drkonqi.h>
0010 #include <statusnotifier_activationclosetimer.h>
0011 
0012 class MockDBusServiceWatcher : public DBusServiceWatcher
0013 {
0014     Q_OBJECT
0015 public:
0016     using DBusServiceWatcher::DBusServiceWatcher;
0017     void start() override
0018     {
0019     }
0020 };
0021 
0022 class MockIdleWatcher : public IdleWatcher
0023 {
0024     Q_OBJECT
0025 public:
0026     using IdleWatcher::IdleWatcher;
0027     void start() override
0028     {
0029     }
0030 };
0031 
0032 class ActivationCloseTimerTest : public QObject
0033 {
0034     Q_OBJECT
0035 private Q_SLOTS:
0036     void serviceLostTest()
0037     {
0038         ActivationCloseTimer timer;
0039         timer.setActivationTimeout(1s);
0040         timer.setCloseTimeout(2s);
0041 
0042         MockDBusServiceWatcher dbus;
0043         MockIdleWatcher idle;
0044         QSignalSpy activateSpy(&timer, &ActivationCloseTimer::autoActivate);
0045         QSignalSpy closeSpy(&timer, &ActivationCloseTimer::autoClose);
0046         timer.start(&dbus, &idle);
0047         Q_EMIT dbus.serviceUnregistered();
0048         QVERIFY(activateSpy.wait());
0049         QVERIFY(closeSpy.empty());
0050     }
0051 
0052     void serviceLostThenBackTest()
0053     {
0054         ActivationCloseTimer timer;
0055         timer.setActivationTimeout(1s);
0056         timer.setCloseTimeout(2s);
0057 
0058         MockDBusServiceWatcher dbus;
0059         MockIdleWatcher idle;
0060         QSignalSpy activateSpy(&timer, &ActivationCloseTimer::autoActivate);
0061         QSignalSpy closeSpy(&timer, &ActivationCloseTimer::autoClose);
0062         timer.start(&dbus, &idle);
0063         Q_EMIT dbus.serviceUnregistered();
0064         Q_EMIT dbus.serviceRegistered();
0065         QVERIFY(!activateSpy.wait());
0066         QVERIFY(!closeSpy.empty()); // seeing as the service returned we should receive an auto close
0067     }
0068 
0069     void idleSystemLostAServiceTest()
0070     {
0071         ActivationCloseTimer timer;
0072         timer.setActivationTimeout(1s);
0073         timer.setCloseTimeout(2s);
0074 
0075         MockDBusServiceWatcher dbus;
0076         MockIdleWatcher idle;
0077         QSignalSpy activateSpy(&timer, &ActivationCloseTimer::autoActivate);
0078         QSignalSpy closeSpy(&timer, &ActivationCloseTimer::autoClose);
0079         timer.start(&dbus, &idle);
0080         Q_EMIT idle.idle();
0081         Q_EMIT dbus.serviceUnregistered();
0082         QVERIFY(activateSpy.wait());
0083         QVERIFY(closeSpy.empty());
0084     }
0085 
0086     void idleSystemHasAllServices()
0087     {
0088         ActivationCloseTimer timer;
0089         timer.setActivationTimeout(1s);
0090         timer.setCloseTimeout(2s);
0091 
0092         MockDBusServiceWatcher dbus;
0093         MockIdleWatcher idle;
0094         QSignalSpy activateSpy(&timer, &ActivationCloseTimer::autoActivate);
0095         QSignalSpy closeSpy(&timer, &ActivationCloseTimer::autoClose);
0096         timer.start(&dbus, &idle);
0097         Q_EMIT idle.idle();
0098         QVERIFY(!closeSpy.wait());
0099         QVERIFY(activateSpy.empty());
0100     }
0101 
0102     void justAutoCloseTest()
0103     {
0104         ActivationCloseTimer timer;
0105         timer.setActivationTimeout(1s);
0106         timer.setCloseTimeout(2s);
0107 
0108         MockDBusServiceWatcher dbus;
0109         MockIdleWatcher idle;
0110         QSignalSpy activateSpy(&timer, &ActivationCloseTimer::autoActivate);
0111         QSignalSpy closeSpy(&timer, &ActivationCloseTimer::autoClose);
0112         timer.start(&dbus, &idle);
0113         QVERIFY(closeSpy.wait());
0114         QVERIFY(activateSpy.empty());
0115     }
0116 };
0117 
0118 QTEST_GUILESS_MAIN(ActivationCloseTimerTest)
0119 
0120 #include "statusnotifier_activationclosetimertest.moc"