diff options
Diffstat (limited to 'tests/auto/wasm/tst_qwasmwindowstack.cpp')
-rw-r--r-- | tests/auto/wasm/tst_qwasmwindowstack.cpp | 714 |
1 files changed, 0 insertions, 714 deletions
diff --git a/tests/auto/wasm/tst_qwasmwindowstack.cpp b/tests/auto/wasm/tst_qwasmwindowstack.cpp deleted file mode 100644 index 1ae07d5b39..0000000000 --- a/tests/auto/wasm/tst_qwasmwindowstack.cpp +++ /dev/null @@ -1,714 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 - -#include "../../../src/plugins/platforms/wasm/qwasmwindowstack.h" -#include <QtGui/QWindow> -#include <QTest> -#include <emscripten/val.h> - -class QWasmWindow -{ -}; - -namespace { -std::vector<QWasmWindow *> getWindowsFrontToBack(const QWasmWindowStack *stack) -{ - return std::vector<QWasmWindow *>(stack->begin(), stack->end()); -} -} - -class tst_QWasmWindowStack : public QObject -{ - Q_OBJECT - -public: - tst_QWasmWindowStack() - : m_mockCallback(std::bind(&tst_QWasmWindowStack::onTopWindowChanged, this)) - { - } - -private slots: - void init(); - - void insertion(); - void raising(); - void raisingWithAlwaysOnBottom(); - void raisingWithAlwaysOnTop(); - void lowering(); - void loweringWithAlwaysOnBottom(); - void loweringWithAlwaysOnTop(); - void removing(); - void removingWithAlwaysOnBottom(); - void removingWithAlwaysOnTop(); - void positionPreferenceChanges(); - void clearing(); - -private: - void onTopWindowChanged() - { - ++m_topLevelChangedCallCount; - if (m_onTopLevelChangedAction) - m_onTopLevelChangedAction(); - } - - void verifyWindowOrderChanged(int expected = 1) - { - QCOMPARE(expected, m_topLevelChangedCallCount); - clearCallbackCounter(); - } - - void clearCallbackCounter() { m_topLevelChangedCallCount = 0; } - - QWasmWindowStack::WindowOrderChangedCallbackType m_mockCallback; - QWasmWindowStack::WindowOrderChangedCallbackType m_onTopLevelChangedAction; - int m_topLevelChangedCallCount = 0; - - QWasmWindow m_root; - QWasmWindow m_window1; - QWasmWindow m_window2; - QWasmWindow m_window3; - QWasmWindow m_window4; - QWasmWindow m_window5; -}; - -void tst_QWasmWindowStack::init() -{ - m_onTopLevelChangedAction = QWasmWindowStack::WindowOrderChangedCallbackType(); - clearCallbackCounter(); -} - -void tst_QWasmWindowStack::insertion() -{ - QWasmWindowStack stack(m_mockCallback); - - m_onTopLevelChangedAction = [this, &stack]() { QVERIFY(stack.topWindow() == &m_root); }; - stack.pushWindow(&m_root, QWasmWindowStack::PositionPreference::Regular); - verifyWindowOrderChanged(); - - m_onTopLevelChangedAction = [this, &stack]() { QVERIFY(stack.topWindow() == &m_window1); }; - stack.pushWindow(&m_window1, QWasmWindowStack::PositionPreference::Regular); - verifyWindowOrderChanged(); - - m_onTopLevelChangedAction = [this, &stack]() { QVERIFY(stack.topWindow() == &m_window2); }; - stack.pushWindow(&m_window2, QWasmWindowStack::PositionPreference::Regular); - verifyWindowOrderChanged(); -} - -void tst_QWasmWindowStack::raising() -{ - QWasmWindowStack stack(m_mockCallback); - - stack.pushWindow(&m_root, QWasmWindowStack::PositionPreference::StayOnBottom); - stack.pushWindow(&m_window1, QWasmWindowStack::PositionPreference::Regular); - stack.pushWindow(&m_window2, QWasmWindowStack::PositionPreference::Regular); - stack.pushWindow(&m_window3, QWasmWindowStack::PositionPreference::Regular); - stack.pushWindow(&m_window4, QWasmWindowStack::PositionPreference::Regular); - stack.pushWindow(&m_window5, QWasmWindowStack::PositionPreference::Regular); - - clearCallbackCounter(); - - QCOMPARE(&m_window5, stack.topWindow()); - - m_onTopLevelChangedAction = [this, &stack]() { QVERIFY(stack.topWindow() == &m_window1); }; - stack.raise(&m_window1); - verifyWindowOrderChanged(); - QCOMPARE(&m_window1, stack.topWindow()); - - stack.raise(&m_window1); - verifyWindowOrderChanged(0); - QCOMPARE(&m_window1, stack.topWindow()); - - m_onTopLevelChangedAction = [this, &stack]() { QVERIFY(stack.topWindow() == &m_window3); }; - stack.raise(&m_window3); - verifyWindowOrderChanged(); - QCOMPARE(&m_window3, stack.topWindow()); -} - -void tst_QWasmWindowStack::raisingWithAlwaysOnBottom() -{ - QWasmWindowStack stack(m_mockCallback); - - QWasmWindow alwaysOnBottomWindow1; - QWasmWindow alwaysOnBottomWindow2; - QWasmWindow alwaysOnBottomWindow3; - - stack.pushWindow(&alwaysOnBottomWindow1, QWasmWindowStack::PositionPreference::StayOnBottom); - stack.pushWindow(&alwaysOnBottomWindow2, QWasmWindowStack::PositionPreference::StayOnBottom); - stack.pushWindow(&alwaysOnBottomWindow3, QWasmWindowStack::PositionPreference::StayOnBottom); - stack.pushWindow(&m_window1, QWasmWindowStack::PositionPreference::Regular); - stack.pushWindow(&m_window2, QWasmWindowStack::PositionPreference::Regular); - stack.pushWindow(&m_window3, QWasmWindowStack::PositionPreference::Regular); - // Window order: 3 2 1 | B3 B2 B1 - - clearCallbackCounter(); - - std::vector<QWasmWindow *> expectedWindowOrder = { &m_window3, - &m_window2, - &m_window1, - &alwaysOnBottomWindow3, - &alwaysOnBottomWindow2, - &alwaysOnBottomWindow1 }; - QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(), - getWindowsFrontToBack(&stack).begin())); - QCOMPARE(&m_window3, stack.topWindow()); - - // Window order: 1 3 2 | B3 B2 B1 - stack.raise(&m_window1); - - expectedWindowOrder = { &m_window1, - &m_window3, - &m_window2, - &alwaysOnBottomWindow3, - &alwaysOnBottomWindow2, - &alwaysOnBottomWindow1 }; - QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(), - getWindowsFrontToBack(&stack).begin())); - verifyWindowOrderChanged(); - QCOMPARE(&m_window1, stack.topWindow()); - - // Window order: 1 3 2 | B1 B3 B2 - stack.raise(&alwaysOnBottomWindow1); - - expectedWindowOrder = { &m_window1, - &m_window3, - &m_window2, - &alwaysOnBottomWindow1, - &alwaysOnBottomWindow3, - &alwaysOnBottomWindow2 }; - QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(), - getWindowsFrontToBack(&stack).begin())); - verifyWindowOrderChanged(); - QCOMPARE(&m_window1, stack.topWindow()); - - // Window order: 1 3 2 | B3 B1 B2 - stack.raise(&alwaysOnBottomWindow3); - - expectedWindowOrder = { &m_window1, - &m_window3, - &m_window2, - &alwaysOnBottomWindow3, - &alwaysOnBottomWindow1, - &alwaysOnBottomWindow2 }; - QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(), - getWindowsFrontToBack(&stack).begin())); - verifyWindowOrderChanged(); - QCOMPARE(&m_window1, stack.topWindow()); -} - -void tst_QWasmWindowStack::raisingWithAlwaysOnTop() -{ - QWasmWindowStack stack(m_mockCallback); - - QWasmWindow alwaysOnTopWindow1; - QWasmWindow alwaysOnTopWindow2; - QWasmWindow alwaysOnTopWindow3; - - stack.pushWindow(&m_root, QWasmWindowStack::PositionPreference::StayOnBottom); - stack.pushWindow(&m_window1, QWasmWindowStack::PositionPreference::Regular); - stack.pushWindow(&alwaysOnTopWindow1, QWasmWindowStack::PositionPreference::StayOnTop); - stack.pushWindow(&m_window3, QWasmWindowStack::PositionPreference::Regular); - stack.pushWindow(&alwaysOnTopWindow2, QWasmWindowStack::PositionPreference::StayOnTop); - stack.pushWindow(&m_window5, QWasmWindowStack::PositionPreference::Regular); - stack.pushWindow(&alwaysOnTopWindow3, QWasmWindowStack::PositionPreference::StayOnTop); - // Window order: T3 T2 T1 | 5 3 1 | R - - clearCallbackCounter(); - - std::vector<QWasmWindow *> expectedWindowOrder = { &alwaysOnTopWindow3, - &alwaysOnTopWindow2, - &alwaysOnTopWindow1, - &m_window5, - &m_window3, - &m_window1, - &m_root }; - QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(), - getWindowsFrontToBack(&stack).begin())); - - // Window order: T3 T2 T1 | 1 5 3 | R - stack.raise(&m_window1); - - expectedWindowOrder = { &alwaysOnTopWindow3, - &alwaysOnTopWindow2, - &alwaysOnTopWindow1, - &m_window1, - &m_window5, - &m_window3, - &m_root }; - QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(), - getWindowsFrontToBack(&stack).begin())); - verifyWindowOrderChanged(); - QCOMPARE(&alwaysOnTopWindow3, stack.topWindow()); - - // Window order: T3 T2 T1 3 1 5 R - stack.raise(&m_window3); - - expectedWindowOrder = { &alwaysOnTopWindow3, - &alwaysOnTopWindow2, - &alwaysOnTopWindow1, - &m_window3, - &m_window1, - &m_window5, - &m_root }; - QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(), - getWindowsFrontToBack(&stack).begin())); - verifyWindowOrderChanged(); - QCOMPARE(&alwaysOnTopWindow3, stack.topWindow()); - - // Window order: T1 T3 T2 3 1 5 R - stack.raise(&alwaysOnTopWindow1); - - expectedWindowOrder = { &alwaysOnTopWindow1, - &alwaysOnTopWindow3, - &alwaysOnTopWindow2, - &m_window3, - &m_window1, - &m_window5, - &m_root }; - QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(), - getWindowsFrontToBack(&stack).begin())); - verifyWindowOrderChanged(); - QCOMPARE(&alwaysOnTopWindow1, stack.topWindow()); -} - -void tst_QWasmWindowStack::lowering() -{ - QWasmWindowStack stack(m_mockCallback); - - stack.pushWindow(&m_root, QWasmWindowStack::PositionPreference::StayOnBottom); - stack.pushWindow(&m_window1, QWasmWindowStack::PositionPreference::Regular); - stack.pushWindow(&m_window2, QWasmWindowStack::PositionPreference::Regular); - stack.pushWindow(&m_window3, QWasmWindowStack::PositionPreference::Regular); - stack.pushWindow(&m_window4, QWasmWindowStack::PositionPreference::Regular); - stack.pushWindow(&m_window5, QWasmWindowStack::PositionPreference::Regular); - // Window order: 5 4 3 2 1 | R - - clearCallbackCounter(); - - QCOMPARE(&m_window5, stack.topWindow()); - - m_onTopLevelChangedAction = [this, &stack]() { QVERIFY(stack.topWindow() == &m_window4); }; - stack.lower(&m_window5); - - // Window order: 4 3 2 1 5 R - verifyWindowOrderChanged(); - QCOMPARE(&m_window4, stack.topWindow()); - - stack.lower(&m_window3); - // Window order: 4 2 1 5 3 R - verifyWindowOrderChanged(); - std::vector<QWasmWindow *> expectedWindowOrder = { &m_window4, &m_window2, &m_window1, - &m_window5, &m_window3, &m_root }; - - QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(), - getWindowsFrontToBack(&stack).begin())); -} - -void tst_QWasmWindowStack::loweringWithAlwaysOnBottom() -{ - QWasmWindowStack stack(m_mockCallback); - - QWasmWindow alwaysOnBottomWindow1; - QWasmWindow alwaysOnBottomWindow2; - QWasmWindow alwaysOnBottomWindow3; - - stack.pushWindow(&alwaysOnBottomWindow1, QWasmWindowStack::PositionPreference::StayOnBottom); - stack.pushWindow(&alwaysOnBottomWindow2, QWasmWindowStack::PositionPreference::StayOnBottom); - stack.pushWindow(&alwaysOnBottomWindow3, QWasmWindowStack::PositionPreference::StayOnBottom); - stack.pushWindow(&m_window1, QWasmWindowStack::PositionPreference::Regular); - stack.pushWindow(&m_window2, QWasmWindowStack::PositionPreference::Regular); - stack.pushWindow(&m_window3, QWasmWindowStack::PositionPreference::Regular); - // Window order: 3 2 1 | B3 B2 B1 - - clearCallbackCounter(); - - std::vector<QWasmWindow *> expectedWindowOrder = { &m_window3, - &m_window2, - &m_window1, - &alwaysOnBottomWindow3, - &alwaysOnBottomWindow2, - &alwaysOnBottomWindow1 }; - QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(), - getWindowsFrontToBack(&stack).begin())); - QCOMPARE(&m_window3, stack.topWindow()); - - // Window order: 2 1 3 | B3 B2 B1 - stack.lower(&m_window3); - - expectedWindowOrder = { &m_window2, - &m_window1, - &m_window3, - &alwaysOnBottomWindow3, - &alwaysOnBottomWindow2, - &alwaysOnBottomWindow1 }; - QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(), - getWindowsFrontToBack(&stack).begin())); - verifyWindowOrderChanged(); - QCOMPARE(&m_window2, stack.topWindow()); - - // Window order: 2 1 3 | B2 B1 B3 - stack.lower(&alwaysOnBottomWindow3); - - expectedWindowOrder = { &m_window2, - &m_window1, - &m_window3, - &alwaysOnBottomWindow2, - &alwaysOnBottomWindow1, - &alwaysOnBottomWindow3 }; - QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(), - getWindowsFrontToBack(&stack).begin())); - verifyWindowOrderChanged(); - QCOMPARE(&m_window2, stack.topWindow()); - - // Window order: 2 1 3 | B2 B3 B1 - stack.lower(&alwaysOnBottomWindow1); - - expectedWindowOrder = { &m_window2, - &m_window1, - &m_window3, - &alwaysOnBottomWindow2, - &alwaysOnBottomWindow3, - &alwaysOnBottomWindow1 }; - QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(), - getWindowsFrontToBack(&stack).begin())); - verifyWindowOrderChanged(); - QCOMPARE(&m_window2, stack.topWindow()); -} - -void tst_QWasmWindowStack::loweringWithAlwaysOnTop() -{ - QWasmWindowStack stack(m_mockCallback); - - QWasmWindow alwaysOnTopWindow1; - QWasmWindow alwaysOnTopWindow2; - - stack.pushWindow(&m_root, QWasmWindowStack::PositionPreference::StayOnBottom); - stack.pushWindow(&m_window1, QWasmWindowStack::PositionPreference::Regular); - stack.pushWindow(&alwaysOnTopWindow1, QWasmWindowStack::PositionPreference::StayOnTop); - stack.pushWindow(&m_window3, QWasmWindowStack::PositionPreference::Regular); - stack.pushWindow(&alwaysOnTopWindow2, QWasmWindowStack::PositionPreference::StayOnTop); - stack.pushWindow(&m_window5, QWasmWindowStack::PositionPreference::Regular); - // Window order: T2 T1 5 3 1 R - - clearCallbackCounter(); - - std::vector<QWasmWindow *> expectedWindowOrder = { &alwaysOnTopWindow2, &alwaysOnTopWindow1, - &m_window5, &m_window3, - &m_window1, &m_root }; - QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(), - getWindowsFrontToBack(&stack).begin())); - - // Window order: T1 T2 5 3 1 R - stack.lower(&alwaysOnTopWindow2); - - expectedWindowOrder = { &alwaysOnTopWindow1, &alwaysOnTopWindow2, &m_window5, - &m_window3, &m_window1, &m_root }; - QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(), - getWindowsFrontToBack(&stack).begin())); - verifyWindowOrderChanged(); - QCOMPARE(&alwaysOnTopWindow1, stack.topWindow()); - - // Window order: T2 T1 5 3 1 R - stack.lower(&alwaysOnTopWindow1); - - expectedWindowOrder = { &alwaysOnTopWindow2, &alwaysOnTopWindow1, &m_window5, - &m_window3, &m_window1, &m_root }; - QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(), - getWindowsFrontToBack(&stack).begin())); - verifyWindowOrderChanged(); - QCOMPARE(&alwaysOnTopWindow2, stack.topWindow()); - - // Window order: T2 T1 3 1 5 R - stack.lower(&m_window5); - - expectedWindowOrder = { &alwaysOnTopWindow2, &alwaysOnTopWindow1, &m_window3, - &m_window1, &m_window5, &m_root }; - QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(), - getWindowsFrontToBack(&stack).begin())); - verifyWindowOrderChanged(); - QCOMPARE(&alwaysOnTopWindow2, stack.topWindow()); - - // Window order: T2 T1 3 5 1 R - stack.lower(&m_window1); - - expectedWindowOrder = { &alwaysOnTopWindow2, &alwaysOnTopWindow1, &m_window3, - &m_window5, &m_window1, &m_root }; - QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(), - getWindowsFrontToBack(&stack).begin())); - verifyWindowOrderChanged(); - QCOMPARE(&alwaysOnTopWindow2, stack.topWindow()); -} - -void tst_QWasmWindowStack::removing() -{ - QWasmWindowStack stack(m_mockCallback); - - stack.pushWindow(&m_root, QWasmWindowStack::PositionPreference::StayOnBottom); - stack.pushWindow(&m_window1, QWasmWindowStack::PositionPreference::Regular); - stack.pushWindow(&m_window2, QWasmWindowStack::PositionPreference::Regular); - stack.pushWindow(&m_window3, QWasmWindowStack::PositionPreference::Regular); - stack.pushWindow(&m_window4, QWasmWindowStack::PositionPreference::Regular); - stack.pushWindow(&m_window5, QWasmWindowStack::PositionPreference::Regular); - // Window order: 5 4 3 2 1 R - - clearCallbackCounter(); - - QCOMPARE(&m_window5, stack.topWindow()); - - m_onTopLevelChangedAction = [this, &stack]() { QVERIFY(stack.topWindow() == &m_window4); }; - stack.removeWindow(&m_window5); - // Window order: 4 3 2 1 R - verifyWindowOrderChanged(); - QCOMPARE(&m_window4, stack.topWindow()); - - stack.removeWindow(&m_window2); - // Window order: 4 3 1 R - verifyWindowOrderChanged(); - std::vector<QWasmWindow *> expectedWindowOrder = { &m_window4, &m_window3, &m_window1, - &m_root }; - QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(), - getWindowsFrontToBack(&stack).begin())); -} - -void tst_QWasmWindowStack::positionPreferenceChanges() -{ - QWasmWindowStack stack(m_mockCallback); - - QWasmWindow window6; - QWasmWindow window7; - QWasmWindow window8; - QWasmWindow window9; - - stack.pushWindow(&m_window1, QWasmWindowStack::PositionPreference::StayOnBottom); - stack.pushWindow(&m_window2, QWasmWindowStack::PositionPreference::StayOnBottom); - stack.pushWindow(&m_window3, QWasmWindowStack::PositionPreference::StayOnBottom); - stack.pushWindow(&m_window4, QWasmWindowStack::PositionPreference::Regular); - stack.pushWindow(&m_window5, QWasmWindowStack::PositionPreference::Regular); - stack.pushWindow(&window6, QWasmWindowStack::PositionPreference::Regular); - stack.pushWindow(&window7, QWasmWindowStack::PositionPreference::StayOnTop); - stack.pushWindow(&window8, QWasmWindowStack::PositionPreference::StayOnTop); - stack.pushWindow(&window9, QWasmWindowStack::PositionPreference::StayOnTop); - - // Window order: 9 8 7 | 6 5 4 | 3 2 1 - - clearCallbackCounter(); - - std::vector<QWasmWindow *> expectedWindowOrder = { &window9, &window8, &window7, - &window6, &m_window5, &m_window4, - &m_window3, &m_window2, &m_window1 }; - QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(), - getWindowsFrontToBack(&stack).begin())); - - // Window order: 9 8 7 1 | 6 5 4 | 3 2 - stack.windowPositionPreferenceChanged(&m_window1, - QWasmWindowStack::PositionPreference::StayOnTop); - - expectedWindowOrder = { - &window9, &window8, &window7, &m_window1, &window6, - &m_window5, &m_window4, &m_window3, &m_window2, - }; - QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(), - getWindowsFrontToBack(&stack).begin())); - - // Window order: 9 8 7 1 5 | 6 4 | 3 2 - stack.windowPositionPreferenceChanged(&m_window5, - QWasmWindowStack::PositionPreference::StayOnTop); - - expectedWindowOrder = { - &window9, &window8, &window7, &m_window1, &m_window5, - &window6, &m_window4, &m_window3, &m_window2, - }; - QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(), - getWindowsFrontToBack(&stack).begin())); - - // Window order: 9 7 1 5 | 8 6 4 | 3 2 - stack.windowPositionPreferenceChanged(&window8, QWasmWindowStack::PositionPreference::Regular); - - expectedWindowOrder = { - &window9, &window7, &m_window1, &m_window5, &window8, - &window6, &m_window4, &m_window3, &m_window2, - }; - QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(), - getWindowsFrontToBack(&stack).begin())); - - // Window order: 9 7 1 5 | 8 6 4 2 | 3 - stack.windowPositionPreferenceChanged(&m_window2, - QWasmWindowStack::PositionPreference::Regular); - - expectedWindowOrder = { - &window9, &window7, &m_window1, &m_window5, &window8, - &window6, &m_window4, &m_window2, &m_window3, - }; - QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(), - getWindowsFrontToBack(&stack).begin())); - - // Window order: 7 1 5 | 8 6 4 2 | 9 3 - stack.windowPositionPreferenceChanged(&window9, - QWasmWindowStack::PositionPreference::StayOnBottom); - - expectedWindowOrder = { - &window7, &m_window1, &m_window5, &window8, &window6, - &m_window4, &m_window2, &window9, &m_window3, - }; - QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(), - getWindowsFrontToBack(&stack).begin())); - - // Window order: 7 1 5 | 6 4 2 | 8 9 3 - stack.windowPositionPreferenceChanged(&window8, - QWasmWindowStack::PositionPreference::StayOnBottom); - - expectedWindowOrder = { - &window7, &m_window1, &m_window5, &window6, &m_window4, - &m_window2, &window8, &window9, &m_window3, - }; - QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(), - getWindowsFrontToBack(&stack).begin())); -} - -void tst_QWasmWindowStack::removingWithAlwaysOnBottom() -{ - QWasmWindowStack stack(m_mockCallback); - - QWasmWindow alwaysOnBottomWindow1; - QWasmWindow alwaysOnBottomWindow2; - QWasmWindow alwaysOnBottomWindow3; - - stack.pushWindow(&alwaysOnBottomWindow1, QWasmWindowStack::PositionPreference::StayOnBottom); - stack.pushWindow(&alwaysOnBottomWindow2, QWasmWindowStack::PositionPreference::StayOnBottom); - stack.pushWindow(&alwaysOnBottomWindow3, QWasmWindowStack::PositionPreference::StayOnBottom); - stack.pushWindow(&m_window1, QWasmWindowStack::PositionPreference::Regular); - stack.pushWindow(&m_window2, QWasmWindowStack::PositionPreference::Regular); - stack.pushWindow(&m_window3, QWasmWindowStack::PositionPreference::Regular); - // Window order: 3 2 1 | B3 B2 B1 - - clearCallbackCounter(); - - std::vector<QWasmWindow *> expectedWindowOrder = { &m_window3, - &m_window2, - &m_window1, - &alwaysOnBottomWindow3, - &alwaysOnBottomWindow2, - &alwaysOnBottomWindow1 }; - QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(), - getWindowsFrontToBack(&stack).begin())); - QCOMPARE(&m_window3, stack.topWindow()); - - // Window order: 3 1 | B3 B2 B1 - stack.removeWindow(&m_window2); - - expectedWindowOrder = { &m_window3, &m_window1, &alwaysOnBottomWindow3, &alwaysOnBottomWindow2, - &alwaysOnBottomWindow1 }; - QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(), - getWindowsFrontToBack(&stack).begin())); - verifyWindowOrderChanged(); - QCOMPARE(&m_window3, stack.topWindow()); - - // Window order: 1 3 2 | B1 B3 B2 - stack.removeWindow(&alwaysOnBottomWindow2); - - expectedWindowOrder = { &m_window3, &m_window1, &alwaysOnBottomWindow3, - &alwaysOnBottomWindow1 }; - QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(), - getWindowsFrontToBack(&stack).begin())); - verifyWindowOrderChanged(); - QCOMPARE(&m_window3, stack.topWindow()); - - // Window order: 1 3 2 | B3 B1 B2 - stack.removeWindow(&alwaysOnBottomWindow1); - - expectedWindowOrder = { &m_window3, &m_window1, &alwaysOnBottomWindow3 }; - QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(), - getWindowsFrontToBack(&stack).begin())); - verifyWindowOrderChanged(); - QCOMPARE(&m_window3, stack.topWindow()); -} - -void tst_QWasmWindowStack::removingWithAlwaysOnTop() -{ - QWasmWindowStack stack(m_mockCallback); - - QWasmWindow alwaysOnTopWindow1; - QWasmWindow alwaysOnTopWindow2; - - stack.pushWindow(&m_root, QWasmWindowStack::PositionPreference::StayOnBottom); - stack.pushWindow(&m_window1, QWasmWindowStack::PositionPreference::Regular); - stack.pushWindow(&alwaysOnTopWindow1, QWasmWindowStack::PositionPreference::StayOnTop); - stack.pushWindow(&m_window3, QWasmWindowStack::PositionPreference::Regular); - stack.pushWindow(&alwaysOnTopWindow2, QWasmWindowStack::PositionPreference::StayOnTop); - stack.pushWindow(&m_window5, QWasmWindowStack::PositionPreference::Regular); - // Window order: T2 T1 5 3 1 R - - clearCallbackCounter(); - - std::vector<QWasmWindow *> expectedWindowOrder = { &alwaysOnTopWindow2, &alwaysOnTopWindow1, - &m_window5, &m_window3, - &m_window1, &m_root }; - QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(), - getWindowsFrontToBack(&stack).begin())); - - // Window order: T2 T1 5 1 R - stack.removeWindow(&m_window3); - verifyWindowOrderChanged(); - - expectedWindowOrder = { &alwaysOnTopWindow2, &alwaysOnTopWindow1, &m_window5, &m_window1, - &m_root }; - QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(), - getWindowsFrontToBack(&stack).begin())); - - // Window order: T2 5 1 R - stack.removeWindow(&alwaysOnTopWindow1); - verifyWindowOrderChanged(); - - expectedWindowOrder = { &alwaysOnTopWindow2, &m_window5, &m_window1, &m_root }; - QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(), - getWindowsFrontToBack(&stack).begin())); - - // Window order: T2 1 R - stack.removeWindow(&m_window5); - verifyWindowOrderChanged(); - - expectedWindowOrder = { &alwaysOnTopWindow2, &m_window1, &m_root }; - QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(), - getWindowsFrontToBack(&stack).begin())); - - // Window order: T2 R - stack.removeWindow(&m_window1); - verifyWindowOrderChanged(); - - expectedWindowOrder = { &alwaysOnTopWindow2, &m_root }; - QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(), - getWindowsFrontToBack(&stack).begin())); - - // Window order: R - stack.removeWindow(&alwaysOnTopWindow2); - verifyWindowOrderChanged(); - QCOMPARE(&m_root, stack.topWindow()); -} - -void tst_QWasmWindowStack::clearing() -{ - QWasmWindowStack stack(m_mockCallback); - - stack.pushWindow(&m_root, QWasmWindowStack::PositionPreference::StayOnBottom); - stack.pushWindow(&m_window1, QWasmWindowStack::PositionPreference::Regular); - // Window order: 1 R - - clearCallbackCounter(); - - QCOMPARE(&m_window1, stack.topWindow()); - - m_onTopLevelChangedAction = [this, &stack]() { QVERIFY(stack.topWindow() == &m_root); }; - stack.removeWindow(&m_window1); - // Window order: R - verifyWindowOrderChanged(); - QCOMPARE(&m_root, stack.topWindow()); - - m_onTopLevelChangedAction = [&stack]() { QVERIFY(stack.topWindow() == nullptr); }; - stack.removeWindow(&m_root); - // Window order: <empty> - verifyWindowOrderChanged(); - QCOMPARE(nullptr, stack.topWindow()); - QCOMPARE(0u, stack.size()); -} - -QTEST_MAIN(tst_QWasmWindowStack) -#include "tst_qwasmwindowstack.moc" |