From 2fb5a5fb9f8a5594ee9449767ad1e4bc51deab3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Fl=C3=B6ser?= Date: Sat, 30 Sep 2017 16:35:52 +0200 Subject: [PATCH] [autotests] Support Wayland Only in addition to XWayland The integrationTest function takes a new optional argument whether the test supports a Wayland Only mode. If that's the case the test is compiled twice, once (as always) as "foo" with XWayland support and once as "foo_waylandonly" without XWayland support. This way we can ensure that our code always supports both modes. The tests found multiple issues. At the moment fast running tests are sporadically crashing on tear down. This needs further investigation. --- autotests/integration/CMakeLists.txt | 55 ++++++++++++--------- autotests/integration/kwin_wayland_test.cpp | 13 ++++- autotests/integration/kwin_wayland_test.h | 12 +++-- 3 files changed, 50 insertions(+), 30 deletions(-) diff --git a/autotests/integration/CMakeLists.txt b/autotests/integration/CMakeLists.txt index 294043bd0e..d8fe8ae600 100644 --- a/autotests/integration/CMakeLists.txt +++ b/autotests/integration/CMakeLists.txt @@ -6,46 +6,53 @@ add_library(KWinIntegrationTestFramework STATIC kwin_wayland_test.cpp test_helpe target_link_libraries(KWinIntegrationTestFramework kwin Qt5::Test) function(integrationTest) + set(optionArgs WAYLAND_ONLY) set(oneValueArgs NAME) set(multiValueArgs SRCS LIBS) - cmake_parse_arguments(ARGS "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + cmake_parse_arguments(ARGS "${optionArgs}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) add_executable(${ARGS_NAME} ${ARGS_SRCS}) target_link_libraries(${ARGS_NAME} KWinIntegrationTestFramework kwin Qt5::Test ${ARGS_LIBS}) add_test(NAME kwin-${ARGS_NAME} COMMAND dbus-run-session ${CMAKE_CURRENT_BINARY_DIR}/${ARGS_NAME}) + if (${ARGS_WAYLAND_ONLY}) + add_executable(${ARGS_NAME}_waylandonly ${ARGS_SRCS}) + set_target_properties(${ARGS_NAME}_waylandonly PROPERTIES COMPILE_DEFINITIONS "NO_XWAYLAND") + target_link_libraries(${ARGS_NAME}_waylandonly KWinIntegrationTestFramework kwin Qt5::Test ${ARGS_LIBS}) + add_test(NAME kwin-${ARGS_NAME}-waylandonly COMMAND dbus-run-session ${CMAKE_CURRENT_BINARY_DIR}/${ARGS_NAME}_waylandonly) + endif() endfunction() -integrationTest(NAME testStart SRCS start_test.cpp) -integrationTest(NAME testTransientNoInput SRCS transient_no_input_test.cpp) +integrationTest(WAYLAND_ONLY NAME testStart SRCS start_test.cpp) +integrationTest(WAYLAND_ONLY NAME testTransientNoInput SRCS transient_no_input_test.cpp) integrationTest(NAME testDontCrashGlxgears SRCS dont_crash_glxgears.cpp) integrationTest(NAME testLockScreen SRCS lockscreen.cpp) -integrationTest(NAME testDecorationInput SRCS decoration_input_test.cpp) -integrationTest(NAME testInternalWindow SRCS internal_window.cpp) -integrationTest(NAME testTouchInput SRCS touch_input_test.cpp) -integrationTest(NAME testInputStackingOrder SRCS input_stacking_order.cpp) +integrationTest(WAYLAND_ONLY NAME testDecorationInput SRCS decoration_input_test.cpp) +integrationTest(WAYLAND_ONLY NAME testInternalWindow SRCS internal_window.cpp) +integrationTest(WAYLAND_ONLY NAME testTouchInput SRCS touch_input_test.cpp) +integrationTest(WAYLAND_ONLY NAME testInputStackingOrder SRCS input_stacking_order.cpp) integrationTest(NAME testPointerInput SRCS pointer_input.cpp) integrationTest(NAME testPlatformCursor SRCS platformcursor.cpp) -integrationTest(NAME testDontCrashCancelAnimation SRCS dont_crash_cancel_animation.cpp) -integrationTest(NAME testTransientPlacmenet SRCS transient_placement.cpp) +integrationTest(WAYLAND_ONLY NAME testDontCrashCancelAnimation SRCS dont_crash_cancel_animation.cpp) +integrationTest(WAYLAND_ONLY NAME testTransientPlacmenet SRCS transient_placement.cpp) integrationTest(NAME testDebugConsole SRCS debug_console_test.cpp) integrationTest(NAME testDontCrashEmptyDeco SRCS dont_crash_empty_deco.cpp) -integrationTest(NAME testPlasmaSurface SRCS plasma_surface_test.cpp) -integrationTest(NAME testMaximized SRCS maximize_test.cpp) -integrationTest(NAME testShellClient SRCS shell_client_test.cpp) -integrationTest(NAME testDontCrashNoBorder SRCS dont_crash_no_border.cpp) +integrationTest(WAYLAND_ONLY NAME testPlasmaSurface SRCS plasma_surface_test.cpp) +integrationTest(WAYLAND_ONLY NAME testMaximized SRCS maximize_test.cpp) +integrationTest(WAYLAND_ONLY NAME testShellClient SRCS shell_client_test.cpp) +integrationTest(WAYLAND_ONLY NAME testDontCrashNoBorder SRCS dont_crash_no_border.cpp) integrationTest(NAME testXClipboardSync SRCS xclipboardsync_test.cpp) -integrationTest(NAME testSceneOpenGL SRCS scene_opengl_test.cpp generic_scene_opengl_test.cpp) -integrationTest(NAME testSceneOpenGLES SRCS scene_opengl_es_test.cpp generic_scene_opengl_test.cpp) -integrationTest(NAME testNoXdgRuntimeDir SRCS no_xdg_runtime_dir_test.cpp) -integrationTest(NAME testScreenChanges SRCS screen_changes_test.cpp) +integrationTest(WAYLAND_ONLY NAME testSceneOpenGL SRCS scene_opengl_test.cpp generic_scene_opengl_test.cpp) +integrationTest(WAYLAND_ONLY NAME testSceneOpenGLES SRCS scene_opengl_es_test.cpp generic_scene_opengl_test.cpp) +integrationTest(WAYLAND_ONLY NAME testNoXdgRuntimeDir SRCS no_xdg_runtime_dir_test.cpp) +integrationTest(WAYLAND_ONLY NAME testScreenChanges SRCS screen_changes_test.cpp) integrationTest(NAME testModiferOnlyShortcut SRCS modifier_only_shortcut_test.cpp) -integrationTest(NAME testTabBox SRCS tabbox_test.cpp) -integrationTest(NAME testWindowSelection SRCS window_selection_test.cpp) -integrationTest(NAME testPointerConstraints SRCS pointer_constraints_test.cpp) -integrationTest(NAME testKeyboardLayout SRCS keyboard_layout_test.cpp) -integrationTest(NAME testKeymapCreationFailure SRCS keymap_creation_failure_test.cpp) -integrationTest(NAME testShowingDesktop SRCS showing_desktop_test.cpp) +integrationTest(WAYLAND_ONLY NAME testTabBox SRCS tabbox_test.cpp) +integrationTest(WAYLAND_ONLY NAME testWindowSelection SRCS window_selection_test.cpp) +integrationTest(WAYLAND_ONLY NAME testPointerConstraints SRCS pointer_constraints_test.cpp) +integrationTest(WAYLAND_ONLY NAME testKeyboardLayout SRCS keyboard_layout_test.cpp) +integrationTest(WAYLAND_ONLY NAME testKeymapCreationFailure SRCS keymap_creation_failure_test.cpp) +integrationTest(WAYLAND_ONLY NAME testShowingDesktop SRCS showing_desktop_test.cpp) integrationTest(NAME testDontCrashUseractionsMenu SRCS dont_crash_useractions_menu.cpp) -integrationTest(NAME testKWinBindings SRCS kwinbindings_test.cpp) +integrationTest(WAYLAND_ONLY NAME testKWinBindings SRCS kwinbindings_test.cpp) if (XCB_ICCCM_FOUND) integrationTest(NAME testMoveResize SRCS move_resize_window_test.cpp LIBS XCB::ICCCM) diff --git a/autotests/integration/kwin_wayland_test.cpp b/autotests/integration/kwin_wayland_test.cpp index d2aa6d05db..1af5c065f8 100644 --- a/autotests/integration/kwin_wayland_test.cpp +++ b/autotests/integration/kwin_wayland_test.cpp @@ -44,8 +44,8 @@ namespace KWin static void readDisplay(int pipe); -WaylandTestApplication::WaylandTestApplication(int &argc, char **argv) - : Application(OperationModeXwayland, argc, argv) +WaylandTestApplication::WaylandTestApplication(OperationMode mode, int &argc, char **argv) + : Application(mode, argc, argv) { QStandardPaths::setTestModeEnabled(true); #ifdef KWIN_BUILD_ACTIVITIES @@ -117,6 +117,15 @@ void WaylandTestApplication::continueStartupWithScreens() disconnect(kwinApp()->platform(), &Platform::screensQueried, this, &WaylandTestApplication::continueStartupWithScreens); createScreens(); + if (operationMode() == OperationModeWaylandOnly) { + createCompositor(); + connect(Compositor::self(), &Compositor::sceneCreated, this, + [this] { + createWorkspace(); + } + ); + return; + } createCompositor(); connect(Compositor::self(), &Compositor::sceneCreated, this, &WaylandTestApplication::startXwaylandServer); } diff --git a/autotests/integration/kwin_wayland_test.h b/autotests/integration/kwin_wayland_test.h index 4051b91312..2a27962eb6 100644 --- a/autotests/integration/kwin_wayland_test.h +++ b/autotests/integration/kwin_wayland_test.h @@ -54,7 +54,7 @@ class WaylandTestApplication : public Application { Q_OBJECT public: - WaylandTestApplication(int &argc, char **argv); + WaylandTestApplication(OperationMode mode, int &argc, char **argv); virtual ~WaylandTestApplication(); protected: @@ -171,19 +171,23 @@ bool unlockScreen(); Q_DECLARE_OPERATORS_FOR_FLAGS(KWin::Test::AdditionalWaylandInterfaces) Q_DECLARE_METATYPE(KWin::Test::ShellSurfaceType) -#define WAYLANDTEST_MAIN_HELPER(TestObject, DPI) \ +#define WAYLANDTEST_MAIN_HELPER(TestObject, DPI, OperationMode) \ int main(int argc, char *argv[]) \ { \ setenv("QT_QPA_PLATFORM", "wayland-org.kde.kwin.qpa", true); \ setenv("QT_QPA_PLATFORM_PLUGIN_PATH", KWINQPAPATH, true); \ setenv("KWIN_FORCE_OWN_QPA", "1", true); \ DPI; \ - KWin::WaylandTestApplication app(argc, argv); \ + KWin::WaylandTestApplication app(OperationMode, argc, argv); \ app.setAttribute(Qt::AA_Use96Dpi, true); \ TestObject tc; \ return QTest::qExec(&tc, argc, argv); \ } -#define WAYLANDTEST_MAIN(TestObject) WAYLANDTEST_MAIN_HELPER(TestObject, QCoreApplication::setAttribute(Qt::AA_DisableHighDpiScaling) ) +#ifdef NO_XWAYLAND +#define WAYLANDTEST_MAIN(TestObject) WAYLANDTEST_MAIN_HELPER(TestObject, QCoreApplication::setAttribute(Qt::AA_DisableHighDpiScaling), KWin::Application::OperationModeWaylandOnly) +#else +#define WAYLANDTEST_MAIN(TestObject) WAYLANDTEST_MAIN_HELPER(TestObject, QCoreApplication::setAttribute(Qt::AA_DisableHighDpiScaling), KWin::Application::OperationModeXwayland) +#endif #endif