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