File indexing completed on 2024-04-28 04:59:30
0001 // SPDX-FileCopyrightText: 2023 James Graham <james.h.graham@protonmail.com> 0002 // SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0003 0004 #include <QQmlApplicationEngine> 0005 #include <QTest> 0006 #include <QWindow> 0007 0008 #include <KConfig> 0009 #include <KSharedConfig> 0010 #include <KWindowConfig> 0011 0012 #include "windowcontroller.h" 0013 0014 class WindowControllerTest : public QObject 0015 { 0016 Q_OBJECT 0017 0018 private Q_SLOTS: 0019 void nullWindow(); 0020 void geometry(); 0021 void showAndRaise(); 0022 void toggle(); 0023 0024 void cleanup(); 0025 }; 0026 0027 // Basically don't crash when no window is set. 0028 void WindowControllerTest::nullWindow() 0029 { 0030 auto &instance = WindowController::instance(); 0031 QCOMPARE(instance.window(), nullptr); 0032 0033 instance.restoreGeometry(); 0034 instance.saveGeometry(); 0035 instance.showAndRaiseWindow({}); 0036 instance.toggleWindow(); 0037 } 0038 0039 void WindowControllerTest::geometry() 0040 { 0041 auto &instance = WindowController::instance(); 0042 0043 QWindow window; 0044 window.setGeometry(0, 0, 200, 200); 0045 instance.setWindow(&window); 0046 QCOMPARE(instance.window(), &window); 0047 0048 instance.saveGeometry(); 0049 const auto stateConfig = KSharedConfig::openStateConfig(); 0050 KConfigGroup windowGroup = stateConfig->group(QStringLiteral("Window")); 0051 QCOMPARE(KWindowConfig::hasSavedWindowSize(windowGroup), true); 0052 0053 window.setGeometry(0, 0, 400, 400); 0054 QCOMPARE(window.geometry(), QRect(0, 0, 400, 400)); 0055 instance.restoreGeometry(); 0056 QCOMPARE(window.geometry(), QRect(0, 0, 200, 200)); 0057 } 0058 0059 void WindowControllerTest::showAndRaise() 0060 { 0061 auto &instance = WindowController::instance(); 0062 QWindow window; 0063 instance.setWindow(&window); 0064 QCOMPARE(window.isVisible(), false); 0065 0066 instance.showAndRaiseWindow({}); 0067 QCOMPARE(window.isVisible(), true); 0068 } 0069 0070 void WindowControllerTest::cleanup() 0071 { 0072 auto &instance = WindowController::instance(); 0073 instance.setWindow(nullptr); 0074 QCOMPARE(instance.window(), nullptr); 0075 } 0076 0077 void WindowControllerTest::toggle() 0078 { 0079 auto &instance = WindowController::instance(); 0080 QWindow window; 0081 instance.setWindow(&window); 0082 QCOMPARE(window.isVisible(), false); 0083 instance.toggleWindow(); 0084 QCOMPARE(window.isVisible(), true); 0085 instance.toggleWindow(); 0086 QCOMPARE(window.isVisible(), false); 0087 0088 // A window is classed as visible by qt when minimized but to the user this is not visible. 0089 // So in this case we expect to show it even though visibility is technically true. 0090 window.setVisibility(QWindow::Minimized); 0091 QCOMPARE(window.windowState(), Qt::WindowMinimized); 0092 QCOMPARE(window.isVisible(), true); 0093 instance.toggleWindow(); 0094 QCOMPARE(window.windowState(), Qt::WindowNoState); 0095 QCOMPARE(window.isVisible(), true); 0096 instance.toggleWindow(); 0097 QCOMPARE(window.windowState(), Qt::WindowNoState); 0098 QCOMPARE(window.isVisible(), false); 0099 } 0100 0101 QTEST_MAIN(WindowControllerTest) 0102 #include "windowcontrollertest.moc"