diff --git a/autotests/libinput/key_event_test.cpp b/autotests/libinput/key_event_test.cpp index a5577d0af..4f22008d1 100644 --- a/autotests/libinput/key_event_test.cpp +++ b/autotests/libinput/key_event_test.cpp @@ -1,113 +1,116 @@ /******************************************************************** KWin - the KDE window manager This file is part of the KDE project. Copyright (C) 2016 Martin Gräßlin This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . *********************************************************************/ #include "mock_libinput.h" #include "../../libinput/device.h" #include "../../libinput/events.h" #include #include Q_DECLARE_METATYPE(libinput_key_state) using namespace KWin::LibInput; class TestLibinputKeyEvent : public QObject { Q_OBJECT private Q_SLOTS: void init(); void cleanup(); void testCreate(); void testEvent_data(); void testEvent(); private: libinput_device *m_nativeDevice = nullptr; Device *m_device = nullptr; }; void TestLibinputKeyEvent::init() { m_nativeDevice = new libinput_device; m_nativeDevice->keyboard = true; m_device = new Device(m_nativeDevice); } void TestLibinputKeyEvent::cleanup() { delete m_device; m_device = nullptr; delete m_nativeDevice; m_nativeDevice = nullptr; } void TestLibinputKeyEvent::testCreate() { // this test verifies the initialisation of a KeyEvent and the parent Event class libinput_event_keyboard *keyEvent = new libinput_event_keyboard; keyEvent->device = m_nativeDevice; QScopedPointer event(Event::create(keyEvent)); // API of event QCOMPARE(event->type(), LIBINPUT_EVENT_KEYBOARD_KEY); QCOMPARE(event->device(), m_device); QCOMPARE(event->nativeDevice(), m_nativeDevice); QCOMPARE((libinput_event*)(*event.data()), keyEvent); // verify it's a key event QVERIFY(dynamic_cast(event.data())); QCOMPARE((libinput_event_keyboard*)(*dynamic_cast(event.data())), keyEvent); + + // verify that a nullptr passed to Event::create returns a nullptr + QVERIFY(!Event::create(nullptr)); } void TestLibinputKeyEvent::testEvent_data() { QTest::addColumn("keyState"); QTest::addColumn("expectedKeyState"); QTest::addColumn("key"); QTest::addColumn("time"); QTest::newRow("pressed") << LIBINPUT_KEY_STATE_PRESSED << KWin::InputRedirection::KeyboardKeyPressed << quint32(KEY_A) << 100u; QTest::newRow("released") << LIBINPUT_KEY_STATE_RELEASED << KWin::InputRedirection::KeyboardKeyReleased << quint32(KEY_B) << 200u; } void TestLibinputKeyEvent::testEvent() { // this test verifies the key press/release libinput_event_keyboard *keyEvent = new libinput_event_keyboard; keyEvent->device = m_nativeDevice; QFETCH(libinput_key_state, keyState); keyEvent->state = keyState; QFETCH(quint32, key); keyEvent->key = key; QFETCH(quint32, time); keyEvent->time = time; QScopedPointer event(Event::create(keyEvent)); auto ke = dynamic_cast(event.data()); QVERIFY(ke); QTEST(ke->state(), "expectedKeyState"); QCOMPARE(ke->key(), key); QCOMPARE(ke->time(), time); } QTEST_GUILESS_MAIN(TestLibinputKeyEvent) #include "key_event_test.moc"