File indexing completed on 2024-04-28 05:31:23
0001 /* 0002 * SPDX-FileCopyrightText: 2016 Sebastian Kügler <sebas@kde.org> 0003 * 0004 * SPDX-License-Identifier: LGPL-2.1-or-later 0005 */ 0006 0007 #include <QObject> 0008 #include <QSignalSpy> 0009 #include <QTest> 0010 0011 #include "../src/backendmanager_p.h" 0012 #include "../src/config.h" 0013 #include "../src/configmonitor.h" 0014 #include "../src/getconfigoperation.h" 0015 #include "../src/mode.h" 0016 #include "../src/output.h" 0017 0018 using namespace KScreen; 0019 0020 class TestModeListChange : public QObject 0021 { 0022 Q_OBJECT 0023 0024 private: 0025 KScreen::ConfigPtr getConfig(); 0026 KScreen::ModeList createModeList(); 0027 bool compareModeList(KScreen::ModeList before, KScreen::ModeList &after); 0028 0029 QSize s0 = QSize(1920, 1080); 0030 QSize s1 = QSize(1600, 1200); 0031 QSize s2 = QSize(1280, 1024); 0032 QSize s3 = QSize(800, 600); 0033 QSize snew = QSize(777, 888); 0034 QString idnew = QStringLiteral("666"); 0035 0036 private Q_SLOTS: 0037 void initTestCase(); 0038 void cleanupTestCase(); 0039 0040 void modeListChange(); 0041 }; 0042 0043 ConfigPtr TestModeListChange::getConfig() 0044 { 0045 qputenv("KSCREEN_BACKEND_INPROCESS", "1"); 0046 auto *op = new GetConfigOperation(); 0047 if (!op->exec()) { 0048 qWarning("ConfigOperation error: %s", qPrintable(op->errorString())); 0049 BackendManager::instance()->shutdownBackend(); 0050 return ConfigPtr(); 0051 } 0052 0053 BackendManager::instance()->shutdownBackend(); 0054 0055 return op->config(); 0056 } 0057 0058 KScreen::ModeList TestModeListChange::createModeList() 0059 { 0060 KScreen::ModeList newmodes; 0061 { 0062 QString _id = QString::number(11); 0063 KScreen::ModePtr kscreenMode(new KScreen::Mode); 0064 kscreenMode->setId(_id); 0065 kscreenMode->setName(_id); 0066 kscreenMode->setSize(s0); 0067 kscreenMode->setRefreshRate(60); 0068 newmodes.insert(_id, kscreenMode); 0069 } 0070 { 0071 QString _id = QString::number(22); 0072 KScreen::ModePtr kscreenMode(new KScreen::Mode); 0073 kscreenMode->setId(_id); 0074 kscreenMode->setName(_id); 0075 kscreenMode->setSize(s1); 0076 kscreenMode->setRefreshRate(60); 0077 newmodes.insert(_id, kscreenMode); 0078 } 0079 { 0080 QString _id = QString::number(33); 0081 KScreen::ModePtr kscreenMode(new KScreen::Mode); 0082 kscreenMode->setId(_id); 0083 kscreenMode->setName(_id); 0084 kscreenMode->setSize(s2); 0085 kscreenMode->setRefreshRate(60); 0086 newmodes.insert(_id, kscreenMode); 0087 } 0088 return newmodes; 0089 } 0090 0091 void TestModeListChange::initTestCase() 0092 { 0093 qputenv("KSCREEN_LOGGING", "false"); 0094 qputenv("KSCREEN_BACKEND", "Fake"); 0095 } 0096 0097 void TestModeListChange::cleanupTestCase() 0098 { 0099 BackendManager::instance()->shutdownBackend(); 0100 } 0101 0102 void TestModeListChange::modeListChange() 0103 { 0104 // json file for the fake backend 0105 KScreen::BackendManager::instance()->setBackendArgs({{QStringLiteral("TEST_DATA"), TEST_DATA "singleoutput.json"}}); 0106 0107 const ConfigPtr config = getConfig(); 0108 QVERIFY(!config.isNull()); 0109 0110 auto output = config->outputs().first(); 0111 QVERIFY(!output.isNull()); 0112 auto modelist = output->modes(); 0113 0114 auto mode = modelist.first(); 0115 mode->setId(QStringLiteral("44")); 0116 mode->setSize(QSize(880, 440)); 0117 output->setModes(modelist); 0118 0119 QCOMPARE(output->modes().first()->id(), QStringLiteral("44")); 0120 QCOMPARE(output->modes().first()->size(), QSize(880, 440)); 0121 QVERIFY(!modelist.isEmpty()); 0122 0123 ConfigMonitor::instance()->addConfig(config); 0124 QSignalSpy outputChangedSpy(output.data(), &Output::outputChanged); 0125 QVERIFY(outputChangedSpy.isValid()); 0126 QSignalSpy modesChangedSpy(output.data(), &Output::modesChanged); 0127 QVERIFY(modesChangedSpy.isValid()); 0128 0129 auto before = createModeList(); 0130 output->setModes(before); 0131 QCOMPARE(modesChangedSpy.count(), 1); 0132 output->setModes(before); 0133 QCOMPARE(modesChangedSpy.count(), 1); 0134 output->setModes(before); 0135 QCOMPARE(modesChangedSpy.count(), 1); 0136 QCOMPARE(output->modes().first()->size(), s0); 0137 QCOMPARE(output->modes().first()->id(), QStringLiteral("11")); 0138 0139 auto after = createModeList(); 0140 auto firstmode = after.first(); 0141 QVERIFY(!firstmode.isNull()); 0142 QCOMPARE(firstmode->size(), s0); 0143 QCOMPARE(firstmode->id(), QStringLiteral("11")); 0144 firstmode->setSize(snew); 0145 firstmode->setId(idnew); 0146 output->setModes(after); 0147 QCOMPARE(modesChangedSpy.count(), 2); 0148 0149 QString _id = QString::number(11); 0150 KScreen::ModePtr kscreenMode(new KScreen::Mode); 0151 kscreenMode->setId(_id); 0152 kscreenMode->setName(_id); 0153 kscreenMode->setSize(s0); 0154 kscreenMode->setRefreshRate(60); 0155 before.insert(_id, kscreenMode); 0156 output->setModes(before); 0157 QCOMPARE(modesChangedSpy.count(), 3); 0158 QCOMPARE(outputChangedSpy.count(), modesChangedSpy.count()); 0159 } 0160 0161 QTEST_MAIN(TestModeListChange) 0162 0163 #include "testmodelistchange.moc"