diff --git a/src/tests/TestUtils.cpp b/src/tests/TestUtils.cpp index 1cb5c9f4a..30aae8410 100644 --- a/src/tests/TestUtils.cpp +++ b/src/tests/TestUtils.cpp @@ -24,6 +24,7 @@ #undef QT_NO_DEBUG #endif // ifdef QT_NO_DEBUG +#include #include #include "../app/App.hpp" @@ -32,6 +33,19 @@ // ============================================================================= +void TestUtils::executeKeySequence (QQuickWindow *window, QKeySequence sequence) { + for (int i = 0; i < sequence.count(); ++i) { + int key = sequence[i]; + QTest::keyClick( + window, + Qt::Key(key & ~Qt::KeyboardModifierMask), + Qt::KeyboardModifiers(key & Qt::KeyboardModifierMask) + ); + } +} + +// ----------------------------------------------------------------------------- + static void printItemTree (const QQuickItem *item, QString &output, int spaces) { output.append(QString().leftJustified(spaces, ' ')); output.append(item->metaObject()->className()); @@ -66,7 +80,7 @@ QQuickItem *TestUtils::getMainLoaderFromMainWindow () { // ----------------------------------------------------------------------------- -QQuickItem *TestUtils::getVirtualWindow (const QQuickWindow *window) { +QQuickItem *TestUtils::getVirtualWindowContent (const QQuickWindow *window) { Q_CHECK_PTR(window); QList items = window->contentItem()->childItems(); @@ -82,16 +96,9 @@ QQuickItem *TestUtils::getVirtualWindow (const QQuickWindow *window) { QQuickItem *virtualWindow = items.at(1); Q_ASSERT(!strncmp(virtualWindow->metaObject()->className(), name, sizeof name - 1)); - return virtualWindow; -} - -// ----------------------------------------------------------------------------- - -QQuickItem *TestUtils::getVirtualWindowContainer (const QQuickItem *virtualWindow) { - Q_CHECK_PTR(virtualWindow); - - QList items = virtualWindow->childItems(); + items = virtualWindow->childItems(); Q_ASSERT(items.size() == 2); - return items.at(1); + items = items.at(1)->childItems(); + return items.empty() ? nullptr : items.at(0); } diff --git a/src/tests/TestUtils.hpp b/src/tests/TestUtils.hpp index 3a3d6eb0c..a6372a86a 100644 --- a/src/tests/TestUtils.hpp +++ b/src/tests/TestUtils.hpp @@ -25,10 +25,20 @@ // ============================================================================= +#define CHECK_VIRTUAL_WINDOW_CONTENT_INFO(WINDOW, TYPE, NAME) \ + do { \ + QQuickItem *virtualWindowContent = TestUtils::getVirtualWindowContent(WINDOW); \ + QVERIFY(virtualWindowContent); \ + QVERIFY(!strncmp(virtualWindowContent->metaObject()->className(), TYPE, sizeof TYPE - 1)); \ + QCOMPARE(virtualWindowContent->objectName(), QStringLiteral(NAME)); \ + } while (0) + namespace TestUtils { + void executeKeySequence (QQuickWindow *window, QKeySequence sequence); + void printItemTree (const QQuickItem *item); QQuickItem *getMainLoaderFromMainWindow (); - QQuickItem *getVirtualWindow (const QQuickWindow *window); - QQuickItem *getVirtualWindowContainer (const QQuickItem *virtualWindow); + + QQuickItem *getVirtualWindowContent (const QQuickWindow *window); } diff --git a/src/tests/main-view/MainViewTest.cpp b/src/tests/main-view/MainViewTest.cpp index 3afba733d..be81e03d0 100644 --- a/src/tests/main-view/MainViewTest.cpp +++ b/src/tests/main-view/MainViewTest.cpp @@ -29,6 +29,22 @@ // ============================================================================= +void MainViewTest::showAboutPopup () { + QQuickWindow *mainWindow = App::getInstance()->getMainWindow(); + + // Open popup. + TestUtils::executeKeySequence(mainWindow, QKeySequence::HelpContents); + QTest::qWait(1000); + + CHECK_VIRTUAL_WINDOW_CONTENT_INFO(mainWindow, "DialogPlus_QMLTYPE_", "__about"); + + // Close popup. + QTest::mouseClick(mainWindow, Qt::LeftButton, Qt::KeyboardModifiers(), QPoint(476, 392)); + QTest::qWait(1000); + + QVERIFY(!TestUtils::getVirtualWindowContent(mainWindow)); +} + void MainViewTest::showManageAccountsPopup () { QQuickWindow *mainWindow = App::getInstance()->getMainWindow(); @@ -36,17 +52,11 @@ void MainViewTest::showManageAccountsPopup () { QTest::mouseClick(mainWindow, Qt::LeftButton, Qt::KeyboardModifiers(), QPoint(100, 35)); QTest::qWait(1000); - const char name[] = "DialogPlus_QMLTYPE_"; - QQuickItem *virtualWindow = TestUtils::getVirtualWindow(mainWindow); - QQuickItem *virtualWindowContent = TestUtils::getVirtualWindowContainer(virtualWindow)->childItems().at(0); - - QVERIFY(virtualWindowContent); - QVERIFY(!strncmp(virtualWindowContent->metaObject()->className(), name, sizeof name - 1)); - QCOMPARE(virtualWindowContent->objectName(), QStringLiteral("__manageAccounts")); + CHECK_VIRTUAL_WINDOW_CONTENT_INFO(mainWindow, "DialogPlus_QMLTYPE_", "__manageAccounts"); // Close popup. QTest::mouseClick(mainWindow, Qt::LeftButton, Qt::KeyboardModifiers(), QPoint(476, 392)); QTest::qWait(1000); - QVERIFY(TestUtils::getVirtualWindowContainer(virtualWindow)->childItems().empty()); + QVERIFY(!TestUtils::getVirtualWindowContent(mainWindow)); } diff --git a/src/tests/main-view/MainViewTest.hpp b/src/tests/main-view/MainViewTest.hpp index e1dd11a36..6d42e7983 100644 --- a/src/tests/main-view/MainViewTest.hpp +++ b/src/tests/main-view/MainViewTest.hpp @@ -32,5 +32,6 @@ public: ~MainViewTest () = default; private slots: + void showAboutPopup (); void showManageAccountsPopup (); }; diff --git a/ui/views/App/Main/Dialogs/About.qml b/ui/views/App/Main/Dialogs/About.qml index e9f40b5d9..2deffe785 100644 --- a/ui/views/App/Main/Dialogs/About.qml +++ b/ui/views/App/Main/Dialogs/About.qml @@ -19,6 +19,7 @@ DialogPlus { ] centeredButtons: true + objectName: '__about' height: AboutStyle.height width: AboutStyle.width