diff options
Diffstat (limited to 'tests/auto/client/datadevicev1')
-rw-r--r-- | tests/auto/client/datadevicev1/.prev_CMakeLists.txt | 32 | ||||
-rw-r--r-- | tests/auto/client/datadevicev1/CMakeLists.txt | 28 | ||||
-rw-r--r-- | tests/auto/client/datadevicev1/datadevicev1.pro | 4 | ||||
-rw-r--r-- | tests/auto/client/datadevicev1/tst_datadevicev1.cpp | 131 |
4 files changed, 99 insertions, 96 deletions
diff --git a/tests/auto/client/datadevicev1/.prev_CMakeLists.txt b/tests/auto/client/datadevicev1/.prev_CMakeLists.txt deleted file mode 100644 index 6a1060b38..000000000 --- a/tests/auto/client/datadevicev1/.prev_CMakeLists.txt +++ /dev/null @@ -1,32 +0,0 @@ -# Generated from datadevicev1.pro. - -##################################################################### -## tst_datadevicev1 Test: -##################################################################### - -qt_internal_add_test(tst_datadevicev1 - 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_datadevicev1.cpp - INCLUDE_DIRECTORIES - ../shared - PUBLIC_LIBRARIES - Qt::Gui - Qt::OpenGL - Qt::WaylandClientPrivate - Wayland::Server -) - -qt6_generate_wayland_protocol_server_sources(tst_datadevicev1 - 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/datadevicev1/CMakeLists.txt b/tests/auto/client/datadevicev1/CMakeLists.txt index b2da63977..cfc2f5beb 100644 --- a/tests/auto/client/datadevicev1/CMakeLists.txt +++ b/tests/auto/client/datadevicev1/CMakeLists.txt @@ -1,3 +1,6 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + # Generated from datadevicev1.pro. ##################################################################### @@ -6,28 +9,7 @@ qt_internal_add_test(tst_datadevicev1 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_datadevicev1.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_datadevicev1 - 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/datadevicev1/datadevicev1.pro b/tests/auto/client/datadevicev1/datadevicev1.pro deleted file mode 100644 index b3c687c4d..000000000 --- a/tests/auto/client/datadevicev1/datadevicev1.pro +++ /dev/null @@ -1,4 +0,0 @@ -include (../shared/shared.pri) - -TARGET = tst_datadevicev1 -SOURCES += tst_datadevicev1.cpp diff --git a/tests/auto/client/datadevicev1/tst_datadevicev1.cpp b/tests/auto/client/datadevicev1/tst_datadevicev1.cpp index 91a479e28..50d78130a 100644 --- a/tests/auto/client/datadevicev1/tst_datadevicev1.cpp +++ b/tests/auto/client/datadevicev1/tst_datadevicev1.cpp @@ -1,41 +1,15 @@ -/**************************************************************************** -** -** 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 <QtOpenGL/QOpenGLWindow> #include <QtGui/QRasterWindow> #include <QtGui/QClipboard> #include <QtGui/QDrag> using namespace MockCompositor; -constexpr int dataDeviceVersion = 1; +constexpr int dataDeviceVersion = 3; class DataDeviceCompositor : public DefaultCompositor { public: @@ -57,6 +31,8 @@ private slots: void initTestCase(); void pasteAscii(); void pasteUtf8(); + void pasteMozUrl(); + void pasteSingleUtf8MozUrl(); void destroysPreviousSelection(); void destroysSelectionWithSurface(); void destroysSelectionOnLeave(); @@ -66,9 +42,6 @@ private slots: void tst_datadevicev1::initTestCase() { QCOMPOSITOR_TRY_VERIFY(pointer()); - QCOMPOSITOR_TRY_VERIFY(!pointer()->resourceMap().empty()); - QCOMPOSITOR_TRY_COMPARE(pointer()->resourceMap().first()->version(), 5); - QCOMPOSITOR_TRY_VERIFY(keyboard()); QCOMPOSITOR_TRY_VERIFY(dataDevice()); @@ -92,13 +65,13 @@ void tst_datadevicev1::pasteAscii() exec([&] { auto *client = xdgSurface()->resource()->client(); auto *offer = dataDevice()->sendDataOffer(client, {"text/plain"}); - connect(offer, &DataOffer::receive, [](QString mimeType, int fd) { + connect(offer, &DataOffer::receive, offer, [](QString mimeType, int fd) { QFile file; file.open(fd, QIODevice::WriteOnly, QFile::FileHandleFlag::AutoCloseHandle); QCOMPARE(mimeType, "text/plain"); file.write(QByteArray("normal ascii")); file.close(); - }); + }, Qt::DirectConnection); dataDevice()->sendSelection(offer); auto *surface = xdgSurface()->m_surface; @@ -130,13 +103,13 @@ void tst_datadevicev1::pasteUtf8() exec([&] { auto *client = xdgSurface()->resource()->client(); auto *offer = dataDevice()->sendDataOffer(client, {"text/plain", "text/plain;charset=utf-8"}); - connect(offer, &DataOffer::receive, [](QString mimeType, int fd) { + connect(offer, &DataOffer::receive, offer, [](QString mimeType, int fd) { QFile file; file.open(fd, QIODevice::WriteOnly, QFile::FileHandleFlag::AutoCloseHandle); QCOMPARE(mimeType, "text/plain;charset=utf-8"); file.write(QByteArray("face with tears of joy: 😂")); file.close(); - }); + }, Qt::DirectConnection); dataDevice()->sendSelection(offer); auto *surface = xdgSurface()->m_surface; @@ -152,6 +125,90 @@ void tst_datadevicev1::pasteUtf8() QTRY_COMPARE(window.m_text, "face with tears of joy: 😂"); } +void tst_datadevicev1::pasteMozUrl() +{ + class Window : public QRasterWindow { + public: + void mousePressEvent(QMouseEvent *) override { m_urls = QGuiApplication::clipboard()->mimeData()->urls(); } + QList<QUrl> m_urls; + }; + + Window window; + window.resize(64, 64); + window.show(); + + QCOMPOSITOR_TRY_VERIFY(xdgSurface() && xdgSurface()->m_committedConfigureSerial); + exec([&] { + auto *client = xdgSurface()->resource()->client(); + auto *offer = dataDevice()->sendDataOffer(client, {"text/x-moz-url"}); + connect(offer, &DataOffer::receive, offer, [](QString mimeType, int fd) { + QFile file; + file.open(fd, QIODevice::WriteOnly, QFile::FileHandleFlag::AutoCloseHandle); + QCOMPARE(mimeType, "text/x-moz-url"); + const QString content("https://www.qt.io/\nQt\nhttps://www.example.com/\nExample Website"); + // Need UTF-16. + file.write(reinterpret_cast<const char *>(content.data()), content.size() * 2); + file.close(); + }, Qt::DirectConnection); + dataDevice()->sendSelection(offer); + + auto *surface = xdgSurface()->m_surface; + keyboard()->sendEnter(surface); // Need to set keyboard focus according to protocol + + pointer()->sendEnter(surface, {32, 32}); + pointer()->sendFrame(client); + pointer()->sendButton(client, BTN_LEFT, 1); + pointer()->sendFrame(client); + pointer()->sendButton(client, BTN_LEFT, 0); + pointer()->sendFrame(client); + }); + + QTRY_COMPARE(window.m_urls.count(), 2); + QCOMPARE(window.m_urls.at(0), QUrl("https://www.qt.io/")); + QCOMPARE(window.m_urls.at(1), QUrl("https://www.example.com/")); +} + +void tst_datadevicev1::pasteSingleUtf8MozUrl() +{ + class Window : public QRasterWindow { + public: + void mousePressEvent(QMouseEvent *) override { m_urls = QGuiApplication::clipboard()->mimeData()->urls(); } + QList<QUrl> m_urls; + }; + + Window window; + window.resize(64, 64); + window.show(); + + QCOMPOSITOR_TRY_VERIFY(xdgSurface() && xdgSurface()->m_committedConfigureSerial); + exec([&] { + auto *client = xdgSurface()->resource()->client(); + auto *offer = dataDevice()->sendDataOffer(client, {"text/x-moz-url"}); + connect(offer, &DataOffer::receive, offer, [](QString mimeType, int fd) { + QFile file; + file.open(fd, QIODevice::WriteOnly, QFile::FileHandleFlag::AutoCloseHandle); + QCOMPARE(mimeType, "text/x-moz-url"); + const QString content("https://www.qt.io/"); + file.write(content.toUtf8()); + file.close(); + }, Qt::DirectConnection); + dataDevice()->sendSelection(offer); + + auto *surface = xdgSurface()->m_surface; + keyboard()->sendEnter(surface); // Need to set keyboard focus according to protocol + + pointer()->sendEnter(surface, {32, 32}); + pointer()->sendFrame(client); + pointer()->sendButton(client, BTN_LEFT, 1); + pointer()->sendFrame(client); + pointer()->sendButton(client, BTN_LEFT, 0); + pointer()->sendFrame(client); + }); + + QTRY_COMPARE(window.m_urls.count(), 1); + QCOMPARE(window.m_urls.at(0), QUrl("https://www.qt.io/")); +} + void tst_datadevicev1::destroysPreviousSelection() { QRasterWindow window; @@ -241,7 +298,7 @@ void tst_datadevicev1::destroysSelectionOnLeave() keyboard()->sendLeave(surface); }); - QTRY_COMPARE(dataChangedSpy.count(), 1); + QTRY_COMPARE(dataChangedSpy.size(), 1); QVERIFY(!QGuiApplication::clipboard()->mimeData(QClipboard::Clipboard)->hasText()); } |