Warning, file /plasma/kwin/autotests/integration/test_virtualkeyboard_dbus.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 /* 0002 KWin - the KDE window manager 0003 This file is part of the KDE project. 0004 0005 SPDX-FileCopyrightText: 2017 Martin Flöser <mgraesslin@kde.org> 0006 0007 SPDX-License-Identifier: GPL-2.0-or-later 0008 */ 0009 0010 #include "kwin_wayland_test.h" 0011 0012 #include "core/outputbackend.h" 0013 #include "main.h" 0014 #include "virtualkeyboard_dbus.h" 0015 #include "wayland_server.h" 0016 0017 #include <QDBusConnection> 0018 #include <QDBusMessage> 0019 #include <QDBusPendingReply> 0020 #include <QSignalSpy> 0021 #include <QTest> 0022 0023 #include <virtualkeyboardinterface.h> 0024 0025 using KWin::VirtualKeyboardDBus; 0026 using namespace KWin; 0027 using namespace KWin::Test; 0028 0029 static const QString s_socketName = QStringLiteral("wayland_test_kwin_virtualkeyboarddbus-0"); 0030 0031 class VirtualKeyboardDBusTest : public QObject 0032 { 0033 Q_OBJECT 0034 private Q_SLOTS: 0035 void initTestCase(); 0036 void testEnabled(); 0037 void testRequestEnabled_data(); 0038 void testRequestEnabled(); 0039 void init(); 0040 void cleanup(); 0041 }; 0042 0043 void VirtualKeyboardDBusTest::initTestCase() 0044 { 0045 QDBusConnection::sessionBus().registerService(QStringLiteral("org.kde.kwin.testvirtualkeyboard")); 0046 QSignalSpy applicationStartedSpy(kwinApp(), &Application::started); 0047 QVERIFY(waylandServer()->init(s_socketName)); 0048 QMetaObject::invokeMethod(kwinApp()->outputBackend(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(QVector<QRect>, QVector<QRect>() << QRect(0, 0, 1280, 1024) << QRect(1280, 0, 1280, 1024))); 0049 0050 static_cast<WaylandTestApplication *>(kwinApp())->setInputMethodServerToStart("internal"); 0051 kwinApp()->start(); 0052 QVERIFY(applicationStartedSpy.wait()); 0053 0054 QVERIFY(setupWaylandConnection(AdditionalWaylandInterface::Seat | AdditionalWaylandInterface::InputMethodV1 | AdditionalWaylandInterface::TextInputManagerV2 | AdditionalWaylandInterface::TextInputManagerV3)); 0055 } 0056 0057 void VirtualKeyboardDBusTest::init() 0058 { 0059 kwinApp()->inputMethod()->setEnabled(false); 0060 } 0061 0062 void VirtualKeyboardDBusTest::cleanup() 0063 { 0064 Test::destroyWaylandConnection(); 0065 } 0066 0067 void VirtualKeyboardDBusTest::testEnabled() 0068 { 0069 VirtualKeyboardDBus dbus(KWin::kwinApp()->inputMethod()); 0070 OrgKdeKwinVirtualKeyboardInterface iface(QStringLiteral("org.kde.kwin.testvirtualkeyboard"), QStringLiteral("/VirtualKeyboard"), QDBusConnection::sessionBus()); 0071 QSignalSpy helperChangedSpy(&iface, &OrgKdeKwinVirtualKeyboardInterface::enabledChanged); 0072 0073 QCOMPARE(dbus.isEnabled(), false); 0074 QCOMPARE(dbus.property("enabled").toBool(), false); 0075 QSignalSpy enabledChangedSpy(&dbus, &VirtualKeyboardDBus::enabledChanged); 0076 0077 QVERIFY(iface.isValid()); 0078 QCOMPARE(iface.enabled(), false); 0079 0080 dbus.setEnabled(true); 0081 QCOMPARE(enabledChangedSpy.count(), 1); 0082 QVERIFY(helperChangedSpy.wait()); 0083 QCOMPARE(helperChangedSpy.count(), 1); 0084 QCOMPARE(dbus.isEnabled(), true); 0085 QCOMPARE(dbus.property("enabled").toBool(), true); 0086 QCOMPARE(iface.enabled(), true); 0087 0088 // setting again to enabled should not change anything 0089 dbus.setEnabled(true); 0090 QCOMPARE(enabledChangedSpy.count(), 1); 0091 0092 // back to false 0093 dbus.setEnabled(false); 0094 QCOMPARE(enabledChangedSpy.count(), 2); 0095 QVERIFY(helperChangedSpy.wait()); 0096 QCOMPARE(helperChangedSpy.count(), 2); 0097 QCOMPARE(dbus.isEnabled(), false); 0098 QCOMPARE(dbus.property("enabled").toBool(), false); 0099 QCOMPARE(iface.enabled(), false); 0100 } 0101 0102 void VirtualKeyboardDBusTest::testRequestEnabled_data() 0103 { 0104 QTest::addColumn<QString>("method"); 0105 QTest::addColumn<bool>("expectedResult"); 0106 0107 QTest::newRow("enable") << QStringLiteral("setEnabled") << true; 0108 QTest::newRow("disable") << QStringLiteral("setEnabled") << false; 0109 } 0110 0111 void VirtualKeyboardDBusTest::testRequestEnabled() 0112 { 0113 QFETCH(QString, method); 0114 QFETCH(bool, expectedResult); 0115 0116 VirtualKeyboardDBus dbus(KWin::kwinApp()->inputMethod()); 0117 OrgKdeKwinVirtualKeyboardInterface iface(QStringLiteral("org.kde.kwin.testvirtualkeyboard"), QStringLiteral("/VirtualKeyboard"), QDBusConnection::sessionBus()); 0118 0119 iface.setEnabled(expectedResult); 0120 QTRY_COMPARE(iface.enabled(), expectedResult); 0121 } 0122 0123 WAYLANDTEST_MAIN(VirtualKeyboardDBusTest) 0124 #include "test_virtualkeyboard_dbus.moc"