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