File indexing completed on 2024-03-17 15:28:29

0001 /*
0002     SPDX-FileCopyrightText: 2014 Alejandro Fiestas Olivares <afiestas@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0005 */
0006 
0007 #include "fakeUpower.h"
0008 #include "fakelogind.h"
0009 #include "qtest_dbus.h"
0010 
0011 #include <QDBusConnection>
0012 #include <QSignalSpy>
0013 #include <QTest>
0014 #include <Solid/AcPluggedJob>
0015 #include <Solid/Inhibition>
0016 #include <Solid/InhibitionJob>
0017 #include <Solid/Power>
0018 #include <Solid/RequestStateJob>
0019 #include <Solid/StatesJob>
0020 
0021 using namespace Solid;
0022 class solidFreedesktopTest : public QObject
0023 {
0024     Q_OBJECT
0025 private Q_SLOTS:
0026     void initTestCase();
0027     void testAcPluggedJob();
0028     void testAcPluggedChanged();
0029     void testAddInhibition();
0030     void testSupportedStates();
0031     void testRequestState();
0032 
0033 private:
0034     FakeUpower *m_fakeUPower;
0035     FakeLogind *m_fakeLogind;
0036 };
0037 
0038 void solidFreedesktopTest::initTestCase()
0039 {
0040     qputenv("SOLID_POWER_BACKEND", "FREE_DESKTOP");
0041 
0042     m_fakeUPower = new FakeUpower(this);
0043     QDBusConnection::systemBus().registerService(QStringLiteral("org.freedesktop.UPower"));
0044     QDBusConnection::systemBus().registerObject(QStringLiteral("/org/freedesktop/UPower"), m_fakeUPower, QDBusConnection::ExportAllContents);
0045 
0046     m_fakeLogind = new FakeLogind(this);
0047     QDBusConnection::systemBus().registerService(QStringLiteral("org.freedesktop.login1"));
0048     QDBusConnection::systemBus().registerObject(QStringLiteral("/org/freedesktop/login1"), m_fakeLogind, QDBusConnection::ExportAllContents);
0049 }
0050 
0051 void solidFreedesktopTest::testAcPluggedJob()
0052 {
0053     m_fakeUPower->m_onBattery = true;
0054     auto job = new AcPluggedJob(this);
0055     QVERIFY(job->exec());
0056     QCOMPARE(job->isPlugged(), false);
0057 
0058     m_fakeUPower->m_onBattery = false;
0059     job = Solid::Power::isAcPlugged();
0060     QVERIFY(job->exec());
0061     QCOMPARE(job->isPlugged(), true);
0062 }
0063 
0064 void solidFreedesktopTest::testAcPluggedChanged()
0065 {
0066     auto power = Solid::Power::self();
0067     QSignalSpy spy(power, SIGNAL(acPluggedChanged(bool)));
0068 
0069     m_fakeUPower->setOnBattery(true);
0070     m_fakeUPower->setOnBattery(false);
0071     spy.wait(10000);
0072 
0073     QCOMPARE(spy.count(), 2);
0074 
0075     QCOMPARE(spy.first().first().toBool(), false);
0076     QCOMPARE(spy.at(1).first().toBool(), true);
0077 }
0078 
0079 void solidFreedesktopTest::testAddInhibition()
0080 {
0081     QSignalSpy spy(m_fakeLogind, SIGNAL(newInhibition(QString, QString, QString, QString)));
0082     auto job = new InhibitionJob(this);
0083     job->setDescription(QStringLiteral("Foo! I am inhibing!"));
0084     job->setInhibitions(Power::Shutdown | Power::Sleep);
0085 
0086     job->exec();
0087 
0088     QCOMPARE(spy.count(), 1);
0089 
0090     QSignalSpy spyRemoved(m_fakeLogind, SIGNAL(inhibitionRemoved()));
0091     auto inhibition = job->inhibition();
0092     inhibition->stop();
0093 
0094     spyRemoved.wait(100);
0095     QCOMPARE(spy.count(), 1);
0096 
0097     QSignalSpy spyStatusChanged(inhibition, SIGNAL(stateChanged(Inhibition::State)));
0098     inhibition->start();
0099     spyStatusChanged.wait(100);
0100 
0101     QCOMPARE(spyStatusChanged.count(), 1);
0102 
0103     delete inhibition;
0104     spyRemoved.wait(100);
0105     QCOMPARE(spyRemoved.count(), 2);
0106 }
0107 
0108 void solidFreedesktopTest::testSupportedStates()
0109 {
0110 }
0111 
0112 void solidFreedesktopTest::testRequestState()
0113 {
0114 }
0115 
0116 QTEST_GUILESS_MAIN_SYSTEM_DBUS(solidFreedesktopTest)
0117 
0118 #include "solidfreedesktoptest.moc"