KWin
Loading...
Searching...
No Matches
test_virtualkeyboard_dbus.cpp
Go to the documentation of this file.
1/*
2 KWin - the KDE window manager
3 This file is part of the KDE project.
4
5 SPDX-FileCopyrightText: 2017 Martin Flöser <mgraesslin@kde.org>
6
7 SPDX-License-Identifier: GPL-2.0-or-later
8*/
9
10#include "kwin_wayland_test.h"
11
12#include "main.h"
14#include "wayland_server.h"
15
16#include <QDBusConnection>
17#include <QDBusMessage>
18#include <QDBusPendingReply>
19#include <QSignalSpy>
20#include <QTest>
21
22#include <virtualkeyboardinterface.h>
23
25using namespace KWin;
26using namespace KWin::Test;
27
28static const QString s_socketName = QStringLiteral("wayland_test_kwin_virtualkeyboarddbus-0");
29
30class VirtualKeyboardDBusTest : public QObject
31{
32 Q_OBJECT
33private Q_SLOTS:
34 void initTestCase();
35 void testEnabled();
36 void testRequestEnabled_data();
37 void testRequestEnabled();
38 void init();
39 void cleanup();
40};
41
42void VirtualKeyboardDBusTest::initTestCase()
43{
44 QDBusConnection::sessionBus().registerService(QStringLiteral("org.kde.kwin.testvirtualkeyboard"));
45 QSignalSpy applicationStartedSpy(kwinApp(), &Application::started);
46 QVERIFY(waylandServer()->init(s_socketName));
48 QRect(0, 0, 1280, 1024),
49 QRect(1280, 0, 1280, 1024),
50 });
51
52 static_cast<WaylandTestApplication *>(kwinApp())->setInputMethodServerToStart("internal");
53 kwinApp()->start();
54 QVERIFY(applicationStartedSpy.wait());
55
56 QVERIFY(setupWaylandConnection(AdditionalWaylandInterface::Seat | AdditionalWaylandInterface::InputMethodV1 | AdditionalWaylandInterface::TextInputManagerV2 | AdditionalWaylandInterface::TextInputManagerV3));
57}
58
59void VirtualKeyboardDBusTest::init()
60{
61 kwinApp()->inputMethod()->setEnabled(false);
62}
63
64void VirtualKeyboardDBusTest::cleanup()
65{
67}
68
69void VirtualKeyboardDBusTest::testEnabled()
70{
71 VirtualKeyboardDBus dbus(KWin::kwinApp()->inputMethod());
72 OrgKdeKwinVirtualKeyboardInterface iface(QStringLiteral("org.kde.kwin.testvirtualkeyboard"), QStringLiteral("/VirtualKeyboard"), QDBusConnection::sessionBus());
73 QSignalSpy helperChangedSpy(&iface, &OrgKdeKwinVirtualKeyboardInterface::enabledChanged);
74
75 QCOMPARE(dbus.isEnabled(), false);
76 QCOMPARE(dbus.property("enabled").toBool(), false);
77 QSignalSpy enabledChangedSpy(&dbus, &VirtualKeyboardDBus::enabledChanged);
78
79 QVERIFY(iface.isValid());
80 QCOMPARE(iface.enabled(), false);
81
82 dbus.setEnabled(true);
83 QCOMPARE(enabledChangedSpy.count(), 1);
84 QVERIFY(helperChangedSpy.wait());
85 QCOMPARE(helperChangedSpy.count(), 1);
86 QCOMPARE(dbus.isEnabled(), true);
87 QCOMPARE(dbus.property("enabled").toBool(), true);
88 QCOMPARE(iface.enabled(), true);
89
90 // setting again to enabled should not change anything
91 dbus.setEnabled(true);
92 QCOMPARE(enabledChangedSpy.count(), 1);
93
94 // back to false
95 dbus.setEnabled(false);
96 QCOMPARE(enabledChangedSpy.count(), 2);
97 QVERIFY(helperChangedSpy.wait());
98 QCOMPARE(helperChangedSpy.count(), 2);
99 QCOMPARE(dbus.isEnabled(), false);
100 QCOMPARE(dbus.property("enabled").toBool(), false);
101 QCOMPARE(iface.enabled(), false);
102}
103
104void VirtualKeyboardDBusTest::testRequestEnabled_data()
105{
106 QTest::addColumn<QString>("method");
107 QTest::addColumn<bool>("expectedResult");
108
109 QTest::newRow("enable") << QStringLiteral("setEnabled") << true;
110 QTest::newRow("disable") << QStringLiteral("setEnabled") << false;
111}
112
113void VirtualKeyboardDBusTest::testRequestEnabled()
114{
115 QFETCH(QString, method);
116 QFETCH(bool, expectedResult);
117
118 VirtualKeyboardDBus dbus(KWin::kwinApp()->inputMethod());
119 OrgKdeKwinVirtualKeyboardInterface iface(QStringLiteral("org.kde.kwin.testvirtualkeyboard"), QStringLiteral("/VirtualKeyboard"), QDBusConnection::sessionBus());
120
121 iface.setEnabled(expectedResult);
122 QTRY_COMPARE(iface.enabled(), expectedResult);
123}
124
126#include "test_virtualkeyboard_dbus.moc"
Q_SCRIPTABLE void enabledChanged()
#define WAYLANDTEST_MAIN(TestObject)
void destroyWaylandConnection()
void setOutputConfig(const QList< QRect > &geometries)
bool setupWaylandConnection(AdditionalWaylandInterfaces flags=AdditionalWaylandInterfaces())
MockInputMethod * inputMethod()
WaylandServer * waylandServer()