diff options
Diffstat (limited to 'tests/auto/client/surface')
-rw-r--r-- | tests/auto/client/surface/.prev_CMakeLists.txt | 32 | ||||
-rw-r--r-- | tests/auto/client/surface/CMakeLists.txt | 28 | ||||
-rw-r--r-- | tests/auto/client/surface/surface.pro | 5 | ||||
-rw-r--r-- | tests/auto/client/surface/tst_surface.cpp | 102 |
4 files changed, 64 insertions, 103 deletions
diff --git a/tests/auto/client/surface/.prev_CMakeLists.txt b/tests/auto/client/surface/.prev_CMakeLists.txt deleted file mode 100644 index ed900c8d1..000000000 --- a/tests/auto/client/surface/.prev_CMakeLists.txt +++ /dev/null @@ -1,32 +0,0 @@ -# Generated from surface.pro. - -##################################################################### -## tst_surface Test: -##################################################################### - -qt_internal_add_test(tst_surface - SOURCES - ../shared/corecompositor.cpp ../shared/corecompositor.h - ../shared/coreprotocol.cpp ../shared/coreprotocol.h - ../shared/datadevice.cpp ../shared/datadevice.h - ../shared/mockcompositor.cpp ../shared/mockcompositor.h - ../shared/textinput.cpp ../shared/textinput.h - ../shared/xdgoutputv1.cpp ../shared/xdgoutputv1.h - ../shared/xdgshell.cpp ../shared/xdgshell.h - tst_surface.cpp - INCLUDE_DIRECTORIES - ../shared - PUBLIC_LIBRARIES - Qt::Gui - Qt::OpenGL - Qt::WaylandClientPrivate - Wayland::Server -) - -qt6_generate_wayland_protocol_server_sources(tst_surface - FILES - ${CMAKE_CURRENT_SOURCE_DIR}/../shared/../../../../src/3rdparty/protocol/text-input-unstable-v2.xml - ${CMAKE_CURRENT_SOURCE_DIR}/../shared/../../../../src/3rdparty/protocol/wayland.xml - ${CMAKE_CURRENT_SOURCE_DIR}/../shared/../../../../src/3rdparty/protocol/xdg-output-unstable-v1.xml - ${CMAKE_CURRENT_SOURCE_DIR}/../shared/../../../../src/3rdparty/protocol/xdg-shell.xml -) diff --git a/tests/auto/client/surface/CMakeLists.txt b/tests/auto/client/surface/CMakeLists.txt index 0674f7de7..b175a5331 100644 --- a/tests/auto/client/surface/CMakeLists.txt +++ b/tests/auto/client/surface/CMakeLists.txt @@ -1,3 +1,6 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + # Generated from surface.pro. ##################################################################### @@ -6,28 +9,7 @@ qt_internal_add_test(tst_surface SOURCES - ../shared/corecompositor.cpp ../shared/corecompositor.h - ../shared/coreprotocol.cpp ../shared/coreprotocol.h - ../shared/datadevice.cpp ../shared/datadevice.h - ../shared/mockcompositor.cpp ../shared/mockcompositor.h - ../shared/textinput.cpp ../shared/textinput.h - ../shared/xdgoutputv1.cpp ../shared/xdgoutputv1.h - ../shared/xdgshell.cpp ../shared/xdgshell.h tst_surface.cpp - INCLUDE_DIRECTORIES - ../shared - PUBLIC_LIBRARIES - Qt::Gui - Qt::OpenGL - Qt::WaylandClientPrivate - Wayland::Server - Threads::Threads # special case -) - -qt6_generate_wayland_protocol_server_sources(tst_surface - FILES - ${CMAKE_CURRENT_SOURCE_DIR}/../shared/../../../../src/3rdparty/protocol/text-input-unstable-v2.xml - ${CMAKE_CURRENT_SOURCE_DIR}/../shared/../../../../src/3rdparty/protocol/wayland.xml - ${CMAKE_CURRENT_SOURCE_DIR}/../shared/../../../../src/3rdparty/protocol/xdg-output-unstable-v1.xml - ${CMAKE_CURRENT_SOURCE_DIR}/../shared/../../../../src/3rdparty/protocol/xdg-shell.xml + LIBRARIES + SharedClientTest ) diff --git a/tests/auto/client/surface/surface.pro b/tests/auto/client/surface/surface.pro deleted file mode 100644 index 36882aa2d..000000000 --- a/tests/auto/client/surface/surface.pro +++ /dev/null @@ -1,5 +0,0 @@ -include (../shared/shared.pri) - -TARGET = tst_surface -SOURCES += tst_surface.cpp - diff --git a/tests/auto/client/surface/tst_surface.cpp b/tests/auto/client/surface/tst_surface.cpp index c7b02e2cc..9fe4188ef 100644 --- a/tests/auto/client/surface/tst_surface.cpp +++ b/tests/auto/client/surface/tst_surface.cpp @@ -1,30 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2018 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include "mockcompositor.h" #include <QtGui/QRasterWindow> @@ -37,6 +12,8 @@ using namespace MockCompositor; class tst_surface : public QObject, private DefaultCompositor { Q_OBJECT +public: + explicit tst_surface(); private slots: void cleanup() { QTRY_VERIFY2(isClean(), qPrintable(dirtyMessage())); } void createDestroySurface(); @@ -51,6 +28,11 @@ private slots: void createSubsurfaceForHiddenParent(); }; +tst_surface::tst_surface() +{ + m_config.autoFrameCallback = false; +} + void tst_surface::createDestroySurface() { QWindow window; @@ -76,11 +58,11 @@ void tst_surface::waitForFrameCallbackRaster() TestWindow window; window.show(); QCOMPOSITOR_TRY_VERIFY(xdgToplevel()); - QSignalSpy bufferSpy(exec([=] { return xdgSurface()->m_surface; }), &Surface::bufferCommitted); - exec([=] { xdgToplevel()->sendCompleteConfigure(); }); + QSignalSpy bufferSpy(exec([&] { return xdgSurface()->m_surface; }), &Surface::bufferCommitted); + exec([&] { xdgToplevel()->sendCompleteConfigure(); }); // We should get the first buffer without waiting for a frame callback - QTRY_COMPARE(bufferSpy.count(), 1); + QTRY_COMPARE(bufferSpy.size(), 1); bufferSpy.removeFirst(); // Make sure we follow frame callbacks for some frames @@ -91,7 +73,7 @@ void tst_surface::waitForFrameCallbackRaster() QVERIFY(!xdgToplevel()->surface()->m_waitingFrameCallbacks.empty()); xdgToplevel()->surface()->sendFrameCallbacks(); }); - QTRY_COMPARE(bufferSpy.count(), 1); + QTRY_COMPARE(bufferSpy.size(), 1); bufferSpy.removeFirst(); } } @@ -117,22 +99,26 @@ void tst_surface::waitForFrameCallbackGl() TestWindow window; window.show(); QCOMPOSITOR_TRY_VERIFY(xdgToplevel()); - QSignalSpy bufferSpy(exec([=] { return xdgSurface()->m_surface; }), &Surface::bufferCommitted); - exec([=] { xdgToplevel()->sendCompleteConfigure(); }); + QSignalSpy bufferSpy(exec([&] { return xdgSurface()->m_surface; }), &Surface::bufferCommitted); + exec([&] { xdgToplevel()->sendCompleteConfigure(); }); // We should get the first buffer without waiting for a frame callback - QTRY_COMPARE(bufferSpy.count(), 1); + QTRY_COMPARE(bufferSpy.size(), 1); bufferSpy.removeFirst(); // Make sure we follow frame callbacks for some frames for (int i = 0; i < 5; ++i) { xdgPingAndWaitForPong(); // Make sure things have happened on the client + if (!qEnvironmentVariableIntValue("QT_WAYLAND_DISABLE_WINDOWDECORATION") && i == 0) { + QCOMPARE(bufferSpy.size(), 1); + bufferSpy.removeFirst(); + } exec([&] { QVERIFY(bufferSpy.empty()); // Make sure no extra buffers have arrived QVERIFY(!xdgToplevel()->surface()->m_waitingFrameCallbacks.empty()); xdgToplevel()->surface()->sendFrameCallbacks(); }); - QTRY_COMPARE(bufferSpy.count(), 1); + QTRY_COMPARE(bufferSpy.size(), 1); bufferSpy.removeFirst(); } } @@ -149,8 +135,8 @@ void tst_surface::negotiateShmFormat() window.resize(64, 48); window.show(); QCOMPOSITOR_TRY_VERIFY(xdgToplevel()); - QSignalSpy bufferSpy(exec([=] { return xdgSurface()->m_surface; }), &Surface::bufferCommitted); - const uint serial = exec([=] { return xdgToplevel()->sendCompleteConfigure(); }); + QSignalSpy bufferSpy(exec([&] { return xdgSurface()->m_surface; }), &Surface::bufferCommitted); + const uint serial = exec([&] { return xdgToplevel()->sendCompleteConfigure(); }); QCOMPOSITOR_TRY_COMPARE(xdgSurface()->m_committedConfigureSerial, serial); exec([&] { Buffer *buffer = xdgToplevel()->surface()->m_committed.buffer; @@ -164,18 +150,44 @@ void tst_surface::negotiateShmFormat() void tst_surface::createSubsurface() { + m_config.autoFrameCallback = true; + auto autoFrameCallback = qScopeGuard([&] { m_config.autoFrameCallback = false; }); + QRasterWindow window; - window.resize(64, 64); - window.show(); - QCOMPOSITOR_TRY_VERIFY(xdgToplevel()); - exec([=] { xdgToplevel()->sendCompleteConfigure(); }); - QCOMPOSITOR_TRY_VERIFY(xdgSurface()->m_committedConfigureSerial); + window.setObjectName("main"); + window.resize(200, 200); QRasterWindow subWindow; + subWindow.setObjectName("subwindow"); subWindow.setParent(&window); subWindow.resize(64, 64); + + window.show(); subWindow.show(); + QCOMPOSITOR_TRY_VERIFY(subSurface()); + QCOMPOSITOR_TRY_VERIFY(xdgToplevel()); + exec([&] { xdgToplevel()->sendCompleteConfigure(); }); + QCOMPOSITOR_TRY_VERIFY(xdgSurface()->m_committedConfigureSerial); + + const Surface *mainSurface = exec([&] {return surface(0);}); + const Surface *childSurface = exec([&] {return surface(1);}); + QSignalSpy mainSurfaceCommitSpy(mainSurface, &Surface::commit); + QSignalSpy childSurfaceCommitSpy(childSurface, &Surface::commit); + + // Move subsurface. The parent should redraw and commit + subWindow.setGeometry(100, 100, 64, 64); + // the toplevel should commit to indicate the subsurface moved + QCOMPOSITOR_TRY_COMPARE(mainSurfaceCommitSpy.size(), 1); + mainSurfaceCommitSpy.clear(); + childSurfaceCommitSpy.clear(); + + // Move and resize the subSurface. The parent should redraw and commit + // The child should also redraw + subWindow.setGeometry(50, 50, 80, 80); + QCOMPOSITOR_TRY_COMPARE(mainSurfaceCommitSpy.size(), 1); + QCOMPOSITOR_TRY_COMPARE(childSurfaceCommitSpy.size(), 1); + } // Used to cause a crash in libwayland (QTBUG-79674) @@ -185,7 +197,7 @@ void tst_surface::createSubsurfaceForHiddenParent() window.resize(64, 64); window.show(); QCOMPOSITOR_TRY_VERIFY(xdgToplevel()); - exec([=] { xdgToplevel()->sendCompleteConfigure(); }); + exec([&] { xdgToplevel()->sendCompleteConfigure(); }); QCOMPOSITOR_TRY_VERIFY(xdgSurface()->m_committedConfigureSerial); window.hide(); @@ -197,6 +209,10 @@ void tst_surface::createSubsurfaceForHiddenParent() // Make sure the client doesn't quit before it has a chance to crash xdgPingAndWaitForPong(); + + // Make sure the subsurface was actually created + const Subsurface *subsurface = exec([&] {return subSurface(0);}); + QVERIFY(subsurface); } QCOMPOSITOR_TEST_MAIN(tst_surface) |