File indexing completed on 2024-05-19 05:34:38
0001 /* 0002 SPDX-FileCopyrightText: 2014 Marco Martin <mart@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "coronatest.h" 0008 0009 #include <QAction> 0010 #include <QApplication> 0011 #include <QProcess> 0012 #include <QRandomGenerator> 0013 #include <QSignalSpy> 0014 #include <QStandardPaths> 0015 0016 SimpleCorona::SimpleCorona(QObject *parent) 0017 : Plasma::Corona(parent) 0018 { 0019 } 0020 0021 SimpleCorona::~SimpleCorona() 0022 { 0023 } 0024 0025 QRect SimpleCorona::screenGeometry(int screen) const 0026 { 0027 // completely arbitrary, still not tested 0028 return QRect(100 * screen, 100, 100, 100); 0029 } 0030 0031 int SimpleCorona::screenForContainment(const Plasma::Containment *c) const 0032 { 0033 if (qobject_cast<const SimpleNoScreenContainment *>(c)) { 0034 return -1; 0035 } 0036 return 0; 0037 } 0038 0039 SimpleApplet::SimpleApplet(QObject *parentObject, const KPluginMetaData &data, const QVariantList &args) 0040 : Plasma::Applet(parentObject, data, args) 0041 { 0042 // updateConstraints(Plasma::Types::UiReadyConstraint); 0043 m_timer.setSingleShot(true); 0044 m_timer.setInterval(QRandomGenerator::global()->bounded((500 + 1) - 100) + 100); 0045 m_timer.start(); 0046 connect(&m_timer, &QTimer::timeout, [this]() { 0047 updateConstraints(Plasma::Applet::UiReadyConstraint); 0048 }); 0049 } 0050 0051 SimpleContainment::SimpleContainment(QObject *parentObject, const KPluginMetaData &data, const QVariantList &args) 0052 : Plasma::Containment(parentObject, data, args) 0053 { 0054 // updateConstraints(Plasma::Types::UiReadyConstraint); 0055 m_timer.setSingleShot(true); 0056 m_timer.setInterval(QRandomGenerator::global()->bounded((500 + 1) - 100) + 100); 0057 m_timer.start(); 0058 connect(&m_timer, &QTimer::timeout, [this]() { 0059 updateConstraints(Plasma::Applet::UiReadyConstraint); 0060 }); 0061 } 0062 0063 SimpleNoScreenContainment::SimpleNoScreenContainment(QObject *parentObject, const KPluginMetaData &data, const QVariantList &args) 0064 : Plasma::Containment(parentObject, data, args) 0065 { 0066 // This containment will *never* be isUiReady() 0067 } 0068 0069 void CoronaTest::initTestCase() 0070 { 0071 QStandardPaths::setTestModeEnabled(true); 0072 m_corona = new SimpleCorona; 0073 0074 m_configDir = QDir(QStandardPaths::writableLocation(QStandardPaths::ConfigLocation)); 0075 m_configDir.removeRecursively(); 0076 0077 QVERIFY(m_configDir.mkpath(QStringLiteral("."))); 0078 0079 QVERIFY(QFile::copy(QStringLiteral(":/plasma-test-appletsrc"), m_configDir.filePath(QStringLiteral("plasma-test-appletsrc")))); 0080 } 0081 0082 void CoronaTest::cleanupTestCase() 0083 { 0084 m_configDir.removeRecursively(); 0085 delete m_corona; 0086 } 0087 0088 void CoronaTest::restore() 0089 { 0090 m_corona->loadLayout(QStringLiteral("plasma-test-appletsrc")); 0091 QCOMPARE(m_corona->containments().count(), 3); 0092 0093 const auto containments = m_corona->containments(); 0094 for (auto cont : containments) { 0095 switch (cont->id()) { 0096 case 1: 0097 QCOMPARE(cont->applets().count(), 2); 0098 break; 0099 default: 0100 QCOMPARE(cont->applets().count(), 0); 0101 break; 0102 } 0103 } 0104 } 0105 0106 void CoronaTest::checkOrder() 0107 { 0108 QCOMPARE(m_corona->containments().count(), 3); 0109 0110 // check containments order 0111 QCOMPARE(m_corona->containments().at(0)->id(), (uint)1); 0112 QCOMPARE(m_corona->containments().at(1)->id(), (uint)4); 0113 QCOMPARE(m_corona->containments().at(2)->id(), (uint)5); 0114 0115 // check applets order 0116 QCOMPARE(m_corona->containments().at(0)->applets().count(), 2); 0117 QCOMPARE(m_corona->containments().at(0)->applets().at(0)->id(), (uint)2); 0118 QCOMPARE(m_corona->containments().at(0)->applets().at(1)->id(), (uint)3); 0119 } 0120 0121 void CoronaTest::startupCompletion() 0122 { 0123 QVERIFY(!m_corona->isStartupCompleted()); 0124 QVERIFY(!m_corona->containments().at(0)->isUiReady()); 0125 0126 QSignalSpy spy(m_corona, SIGNAL(startupCompleted())); 0127 QVERIFY(spy.wait(1000)); 0128 0129 QVERIFY(m_corona->isStartupCompleted()); 0130 QVERIFY(m_corona->containments().at(0)->isUiReady()); 0131 } 0132 0133 void CoronaTest::addRemoveApplets() 0134 { 0135 m_corona->containments().at(0)->createApplet(QStringLiteral("invalid")); 0136 QCOMPARE(m_corona->containments().at(0)->applets().count(), 3); 0137 0138 // remove action present 0139 QVERIFY(m_corona->containments().at(0)->applets().at(0)->internalAction(QStringLiteral("remove"))); 0140 // kill an applet 0141 m_corona->containments().at(0)->applets().at(0)->destroy(); 0142 0143 QSignalSpy spy(m_corona->containments().at(0)->applets().at(0), SIGNAL(destroyed())); 0144 QVERIFY(spy.wait(1000)); 0145 QCOMPARE(m_corona->containments().at(0)->applets().count(), 2); 0146 } 0147 0148 // this test has to be the last, since systemimmutability 0149 // can't be programmatically unlocked 0150 void CoronaTest::immutability() 0151 { 0152 // immutability 0153 QCOMPARE(m_corona->immutability(), Plasma::Types::Mutable); 0154 m_corona->setImmutability(Plasma::Types::UserImmutable); 0155 QCOMPARE(m_corona->immutability(), Plasma::Types::UserImmutable); 0156 0157 auto containments = m_corona->containments(); 0158 for (Plasma::Containment *cont : std::as_const(containments)) { 0159 QCOMPARE(cont->immutability(), Plasma::Types::UserImmutable); 0160 const auto lstApplets = cont->applets(); 0161 for (Plasma::Applet *app : lstApplets) { 0162 QCOMPARE(app->immutability(), Plasma::Types::UserImmutable); 0163 } 0164 } 0165 0166 m_corona->setImmutability(Plasma::Types::Mutable); 0167 QCOMPARE(m_corona->immutability(), Plasma::Types::Mutable); 0168 0169 containments = m_corona->containments(); 0170 for (Plasma::Containment *cont : std::as_const(containments)) { 0171 QCOMPARE(cont->immutability(), Plasma::Types::Mutable); 0172 const auto lstApplets = cont->applets(); 0173 for (Plasma::Applet *app : lstApplets) { 0174 QCOMPARE(app->immutability(), Plasma::Types::Mutable); 0175 } 0176 } 0177 0178 m_corona->setImmutability(Plasma::Types::SystemImmutable); 0179 QCOMPARE(m_corona->immutability(), Plasma::Types::SystemImmutable); 0180 0181 containments = m_corona->containments(); 0182 for (Plasma::Containment *cont : std::as_const(containments)) { 0183 QCOMPARE(cont->immutability(), Plasma::Types::SystemImmutable); 0184 const auto lstApplets = cont->applets(); 0185 for (Plasma::Applet *app : lstApplets) { 0186 QCOMPARE(app->immutability(), Plasma::Types::SystemImmutable); 0187 } 0188 } 0189 0190 // can't unlock systemimmutable 0191 m_corona->setImmutability(Plasma::Types::Mutable); 0192 QCOMPARE(m_corona->immutability(), Plasma::Types::SystemImmutable); 0193 0194 containments = m_corona->containments(); 0195 for (Plasma::Containment *cont : std::as_const(containments)) { 0196 QCOMPARE(cont->immutability(), Plasma::Types::SystemImmutable); 0197 const auto lstApplets = cont->applets(); 0198 for (Plasma::Applet *app : lstApplets) { 0199 QCOMPARE(app->immutability(), Plasma::Types::SystemImmutable); 0200 } 0201 } 0202 } 0203 0204 QTEST_MAIN(CoronaTest) 0205 0206 #include "moc_coronatest.cpp"