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"