KWin
Loading...
Searching...
No Matches
gesture_event_test.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: 2016 Martin Gräßlin <mgraesslin@kde.org>
6
7 SPDX-License-Identifier: GPL-2.0-or-later
8*/
9#include "mock_libinput.h"
10
13
14#include <QTest>
15
16#include <linux/input.h>
17
18Q_DECLARE_METATYPE(libinput_event_type)
19
20using namespace KWin::LibInput;
21using namespace std::literals;
22
23class TestLibinputGestureEvent : public QObject
24{
25 Q_OBJECT
26private Q_SLOTS:
27 void init();
28 void cleanup();
29
30 void testType_data();
31 void testType();
32
33 void testStart_data();
34 void testStart();
35
36 void testSwipeUpdate();
37 void testPinchUpdate();
38
39 void testEnd_data();
40 void testEnd();
41
42private:
43 libinput_device *m_nativeDevice = nullptr;
44 Device *m_device = nullptr;
45};
46
47void TestLibinputGestureEvent::init()
48{
49 m_nativeDevice = new libinput_device;
50 m_nativeDevice->pointer = true;
51 m_nativeDevice->gestureSupported = true;
52 m_nativeDevice->deviceSize = QSizeF(12.5, 13.8);
53 m_device = new Device(m_nativeDevice);
54}
55
56void TestLibinputGestureEvent::cleanup()
57{
58 delete m_device;
59 m_device = nullptr;
60
61 delete m_nativeDevice;
62 m_nativeDevice = nullptr;
63}
64
65void TestLibinputGestureEvent::testType_data()
66{
67 QTest::addColumn<libinput_event_type>("type");
68
69 QTest::newRow("pinch-start") << LIBINPUT_EVENT_GESTURE_PINCH_BEGIN;
70 QTest::newRow("pinch-update") << LIBINPUT_EVENT_GESTURE_PINCH_UPDATE;
71 QTest::newRow("pinch-end") << LIBINPUT_EVENT_GESTURE_PINCH_END;
72 QTest::newRow("swipe-start") << LIBINPUT_EVENT_GESTURE_SWIPE_BEGIN;
73 QTest::newRow("swipe-update") << LIBINPUT_EVENT_GESTURE_SWIPE_UPDATE;
74 QTest::newRow("swipe-end") << LIBINPUT_EVENT_GESTURE_SWIPE_END;
75}
76
77void TestLibinputGestureEvent::testType()
78{
79 // this test verifies the initialization of a PointerEvent and the parent Event class
81 QFETCH(libinput_event_type, type);
82 gestureEvent->type = type;
83 gestureEvent->device = m_nativeDevice;
84
85 std::unique_ptr<Event> event(Event::create(gestureEvent));
86 // API of event
87 QCOMPARE(event->type(), type);
88 QCOMPARE(event->device(), m_device);
89 QCOMPARE(event->nativeDevice(), m_nativeDevice);
90 QCOMPARE((libinput_event *)(*event.get()), gestureEvent);
91 // verify it's a pointer event
92 QVERIFY(dynamic_cast<GestureEvent *>(event.get()));
93 QCOMPARE((libinput_event_gesture *)(*dynamic_cast<GestureEvent *>(event.get())), gestureEvent);
94}
95
96void TestLibinputGestureEvent::testStart_data()
97{
98 QTest::addColumn<libinput_event_type>("type");
99
100 QTest::newRow("pinch") << LIBINPUT_EVENT_GESTURE_PINCH_BEGIN;
101 QTest::newRow("swipe") << LIBINPUT_EVENT_GESTURE_SWIPE_BEGIN;
102}
103
104void TestLibinputGestureEvent::testStart()
105{
107 gestureEvent->device = m_nativeDevice;
108 QFETCH(libinput_event_type, type);
109 gestureEvent->type = type;
110 gestureEvent->fingerCount = 3;
111 gestureEvent->time = 100ms;
112
113 std::unique_ptr<Event> event(Event::create(gestureEvent));
114 auto ge = dynamic_cast<GestureEvent *>(event.get());
115 QVERIFY(ge);
116 QCOMPARE(ge->fingerCount(), gestureEvent->fingerCount);
117 QVERIFY(!ge->isCancelled());
118 QCOMPARE(ge->time(), gestureEvent->time);
119 QCOMPARE(ge->delta(), QPointF(0, 0));
120 if (ge->type() == LIBINPUT_EVENT_GESTURE_PINCH_BEGIN) {
121 auto pe = dynamic_cast<PinchGestureEvent *>(event.get());
122 QCOMPARE(pe->scale(), 1.0);
123 QCOMPARE(pe->angleDelta(), 0.0);
124 }
125}
126
127void TestLibinputGestureEvent::testSwipeUpdate()
128{
130 gestureEvent->device = m_nativeDevice;
131 gestureEvent->type = LIBINPUT_EVENT_GESTURE_SWIPE_UPDATE;
132 gestureEvent->fingerCount = 2;
133 gestureEvent->time = 200ms;
134 gestureEvent->delta = QPointF(2, 3);
135
136 std::unique_ptr<Event> event(Event::create(gestureEvent));
137 auto se = dynamic_cast<SwipeGestureEvent *>(event.get());
138 QVERIFY(se);
139 QCOMPARE(se->fingerCount(), gestureEvent->fingerCount);
140 QVERIFY(!se->isCancelled());
141 QCOMPARE(se->time(), gestureEvent->time);
142 QCOMPARE(se->delta(), QPointF(2, 3));
143}
144
145void TestLibinputGestureEvent::testPinchUpdate()
146{
148 gestureEvent->device = m_nativeDevice;
149 gestureEvent->type = LIBINPUT_EVENT_GESTURE_PINCH_UPDATE;
150 gestureEvent->fingerCount = 4;
151 gestureEvent->time = 600ms;
152 gestureEvent->delta = QPointF(5, 4);
153 gestureEvent->scale = 2;
154 gestureEvent->angleDelta = -30;
155
156 std::unique_ptr<Event> event(Event::create(gestureEvent));
157 auto pe = dynamic_cast<PinchGestureEvent *>(event.get());
158 QVERIFY(pe);
159 QCOMPARE(pe->fingerCount(), gestureEvent->fingerCount);
160 QVERIFY(!pe->isCancelled());
161 QCOMPARE(pe->time(), gestureEvent->time);
162 QCOMPARE(pe->delta(), QPointF(5, 4));
163 QCOMPARE(pe->scale(), gestureEvent->scale);
164 QCOMPARE(pe->angleDelta(), gestureEvent->angleDelta);
165}
166
167void TestLibinputGestureEvent::testEnd_data()
168{
169 QTest::addColumn<libinput_event_type>("type");
170 QTest::addColumn<bool>("cancelled");
171
172 QTest::newRow("pinch/not cancelled") << LIBINPUT_EVENT_GESTURE_PINCH_END << false;
173 QTest::newRow("pinch/cancelled") << LIBINPUT_EVENT_GESTURE_PINCH_END << true;
174 QTest::newRow("swipe/not cancelled") << LIBINPUT_EVENT_GESTURE_SWIPE_END << false;
175 QTest::newRow("swipe/cancelled") << LIBINPUT_EVENT_GESTURE_SWIPE_END << true;
176}
177
178void TestLibinputGestureEvent::testEnd()
179{
181 gestureEvent->device = m_nativeDevice;
182 QFETCH(libinput_event_type, type);
183 gestureEvent->type = type;
184 gestureEvent->fingerCount = 4;
185 QFETCH(bool, cancelled);
186 gestureEvent->cancelled = cancelled;
187 gestureEvent->time = 300ms;
188 gestureEvent->scale = 3;
189
190 std::unique_ptr<Event> event(Event::create(gestureEvent));
191 auto ge = dynamic_cast<GestureEvent *>(event.get());
192 QVERIFY(ge);
193 QCOMPARE(ge->fingerCount(), gestureEvent->fingerCount);
194 QCOMPARE(ge->isCancelled(), cancelled);
195 QCOMPARE(ge->time(), gestureEvent->time);
196 QCOMPARE(ge->delta(), QPointF(0, 0));
197 if (ge->type() == LIBINPUT_EVENT_GESTURE_PINCH_END) {
198 auto pe = dynamic_cast<PinchGestureEvent *>(event.get());
199 QCOMPARE(pe->scale(), gestureEvent->scale);
200 QCOMPARE(pe->angleDelta(), 0.0);
201 }
202}
203
204QTEST_GUILESS_MAIN(TestLibinputGestureEvent)
205#include "gesture_event_test.moc"
static std::unique_ptr< Event > create(libinput_event *event)
Definition events.cpp:19
Q_DECLARE_METATYPE(KWin::SwitchEvent::State)
Session::Type type
Definition session.cpp:17
libinput_device * device
std::chrono::microseconds time
libinput_event_type type