/* KWin - the KDE window manager This file is part of the KDE project. SPDX-FileCopyrightText: 2017 Martin Flöser SPDX-License-Identifier: GPL-2.0-or-later */ #include "kwin_wayland_test.h" #include "abstract_client.h" #include "keyboard_input.h" #include "keyboard_layout.h" #include "platform.h" #include "virtualdesktops.h" #include "wayland_server.h" #include "workspace.h" #include #include #include using namespace KWin; using namespace KWayland::Client; static const QString s_socketName = QStringLiteral("wayland_test_kwin_keymap_creation_failure-0"); class KeymapCreationFailureTest : public QObject { Q_OBJECT private Q_SLOTS: void initTestCase(); void init(); void cleanup(); void testPointerButton(); }; void KeymapCreationFailureTest::initTestCase() { // situation for for BUG 381210 // this will fail to create keymap qputenv("XKB_DEFAULT_RULES", "no"); qputenv("XKB_DEFAULT_MODEL", "no"); qputenv("XKB_DEFAULT_LAYOUT", "no"); qputenv("XKB_DEFAULT_VARIANT", "no"); qputenv("XKB_DEFAULT_OPTIONS", "no"); qRegisterMetaType(); QSignalSpy applicationStartedSpy(kwinApp(), &Application::started); QVERIFY(applicationStartedSpy.isValid()); kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024)); QVERIFY(waylandServer()->init(s_socketName)); kwinApp()->setConfig(KSharedConfig::openConfig(QString(), KConfig::SimpleConfig)); kwinApp()->setKxkbConfig(KSharedConfig::openConfig(QString(), KConfig::SimpleConfig)); KConfigGroup layoutGroup = kwinApp()->kxkbConfig()->group("Layout"); layoutGroup.writeEntry("LayoutList", QStringLiteral("no")); layoutGroup.writeEntry("Model", "no"); layoutGroup.writeEntry("Options", "no"); layoutGroup.sync(); kwinApp()->start(); QVERIFY(applicationStartedSpy.wait()); waylandServer()->initWorkspace(); } void KeymapCreationFailureTest::init() { QVERIFY(Test::setupWaylandConnection()); } void KeymapCreationFailureTest::cleanup() { Test::destroyWaylandConnection(); } void KeymapCreationFailureTest::testPointerButton() { // test case for BUG 381210 // pressing a pointer button results in crash // now create the crashing condition // which is sending in a pointer event kwinApp()->platform()->pointerButtonPressed(BTN_LEFT, 0); kwinApp()->platform()->pointerButtonReleased(BTN_LEFT, 1); } WAYLANDTEST_MAIN(KeymapCreationFailureTest) #include "keymap_creation_failure_test.moc"