diff options
Diffstat (limited to 'src/tests/wayland-unit-tests.c')
-rw-r--r-- | src/tests/wayland-unit-tests.c | 264 |
1 files changed, 0 insertions, 264 deletions
diff --git a/src/tests/wayland-unit-tests.c b/src/tests/wayland-unit-tests.c deleted file mode 100644 index 98c2d905a..000000000 --- a/src/tests/wayland-unit-tests.c +++ /dev/null @@ -1,264 +0,0 @@ -/* - * Copyright (C) 2019 Red Hat, Inc. - * - * 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 <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include "tests/wayland-unit-tests.h" - -#include <gio/gio.h> - -#include "core/display-private.h" -#include "core/window-private.h" -#include "tests/meta-wayland-test-driver.h" -#include "wayland/meta-wayland.h" -#include "wayland/meta-wayland-surface.h" - -typedef struct _WaylandTestClient -{ - GSubprocess *subprocess; - char *path; - GMainLoop *main_loop; -} WaylandTestClient; - -static MetaWaylandTestDriver *test_driver; - -static char * -get_test_client_path (const char *test_client_name) -{ - return g_test_build_filename (G_TEST_BUILT, - "src", - "tests", - "wayland-test-clients", - test_client_name, - NULL); -} - -static WaylandTestClient * -wayland_test_client_new (const char *test_client_name) -{ - MetaWaylandCompositor *compositor; - const char *wayland_display_name; - g_autofree char *test_client_path = NULL; - g_autoptr (GSubprocessLauncher) launcher = NULL; - GSubprocess *subprocess; - GError *error = NULL; - WaylandTestClient *wayland_test_client; - - compositor = meta_wayland_compositor_get_default (); - wayland_display_name = meta_wayland_get_wayland_display_name (compositor); - test_client_path = get_test_client_path (test_client_name); - - launcher = g_subprocess_launcher_new (G_SUBPROCESS_FLAGS_NONE); - g_subprocess_launcher_setenv (launcher, - "WAYLAND_DISPLAY", wayland_display_name, - TRUE); - - subprocess = g_subprocess_launcher_spawn (launcher, - &error, - test_client_path, - NULL); - if (!subprocess) - { - g_error ("Failed to launch Wayland test client '%s': %s", - test_client_path, error->message); - } - - wayland_test_client = g_new0 (WaylandTestClient, 1); - wayland_test_client->subprocess = subprocess; - wayland_test_client->path = g_strdup (test_client_name); - wayland_test_client->main_loop = g_main_loop_new (NULL, FALSE); - - return wayland_test_client; -} - -static void -wayland_test_client_finished (GObject *source_object, - GAsyncResult *res, - gpointer user_data) -{ - WaylandTestClient *wayland_test_client = user_data; - GError *error = NULL; - - if (!g_subprocess_wait_finish (wayland_test_client->subprocess, - res, - &error)) - { - g_error ("Failed to wait for Wayland test client '%s': %s", - wayland_test_client->path, error->message); - } - - g_main_loop_quit (wayland_test_client->main_loop); -} - -static void -wayland_test_client_finish (WaylandTestClient *wayland_test_client) -{ - g_subprocess_wait_async (wayland_test_client->subprocess, NULL, - wayland_test_client_finished, wayland_test_client); - - g_main_loop_run (wayland_test_client->main_loop); - - g_assert_true (g_subprocess_get_successful (wayland_test_client->subprocess)); - - g_main_loop_unref (wayland_test_client->main_loop); - g_free (wayland_test_client->path); - g_object_unref (wayland_test_client->subprocess); - g_free (wayland_test_client); -} - -static MetaWindow * -find_client_window (const char *title) -{ - MetaDisplay *display = meta_get_display (); - g_autoptr (GSList) windows = NULL; - GSList *l; - - windows = meta_display_list_windows (display, META_LIST_DEFAULT); - for (l = windows; l; l = l->next) - { - MetaWindow *window = l->data; - - if (g_strcmp0 (meta_window_get_title (window), title) == 0) - return window; - } - - return NULL; -} - -static void -subsurface_remap_toplevel (void) -{ - WaylandTestClient *wayland_test_client; - - wayland_test_client = wayland_test_client_new ("subsurface-remap-toplevel"); - wayland_test_client_finish (wayland_test_client); -} - -static void -subsurface_invalid_subsurfaces (void) -{ - WaylandTestClient *wayland_test_client; - - wayland_test_client = wayland_test_client_new ("invalid-subsurfaces"); - g_test_expect_message (G_LOG_DOMAIN, G_LOG_LEVEL_WARNING, - "WL: error in client communication*"); - g_test_expect_message (G_LOG_DOMAIN, G_LOG_LEVEL_WARNING, - "WL: error in client communication*"); - wayland_test_client_finish (wayland_test_client); - g_test_assert_expected_messages (); -} - -static void -subsurface_invalid_xdg_shell_actions (void) -{ - WaylandTestClient *wayland_test_client; - - wayland_test_client = wayland_test_client_new ("invalid-xdg-shell-actions"); - g_test_expect_message (G_LOG_DOMAIN, G_LOG_LEVEL_WARNING, - "Invalid geometry * set on xdg_surface*"); - wayland_test_client_finish (wayland_test_client); - g_test_assert_expected_messages (); -} - -typedef enum _ApplyLimitState -{ - APPLY_LIMIT_STATE_INIT, - APPLY_LIMIT_STATE_RESET, - APPLY_LIMIT_STATE_FINISH, -} ApplyLimitState; - -typedef struct _ApplyLimitData -{ - GMainLoop *loop; - WaylandTestClient *wayland_test_client; - ApplyLimitState state; -} ApplyLimitData; - -static void -on_sync_point (MetaWaylandTestDriver *test_driver, - unsigned int sequence, - struct wl_client *wl_client, - ApplyLimitData *data) -{ - MetaWindow *window; - - if (sequence == 0) - g_assert (data->state == APPLY_LIMIT_STATE_INIT); - else if (sequence == 0) - g_assert (data->state == APPLY_LIMIT_STATE_RESET); - - window = find_client_window ("toplevel-limits-test"); - - if (sequence == 0) - { - g_assert_nonnull (window); - g_assert_cmpint (window->size_hints.max_width, ==, 700); - g_assert_cmpint (window->size_hints.max_height, ==, 500); - g_assert_cmpint (window->size_hints.min_width, ==, 700); - g_assert_cmpint (window->size_hints.min_height, ==, 500); - - data->state = APPLY_LIMIT_STATE_RESET; - } - else if (sequence == 1) - { - g_assert_null (window); - data->state = APPLY_LIMIT_STATE_FINISH; - g_main_loop_quit (data->loop); - } - else - { - g_assert_not_reached (); - } -} - -static void -toplevel_apply_limits (void) -{ - ApplyLimitData data = {}; - - data.loop = g_main_loop_new (NULL, FALSE); - data.wayland_test_client = wayland_test_client_new ("xdg-apply-limits"); - g_signal_connect (test_driver, "sync-point", G_CALLBACK (on_sync_point), &data); - g_main_loop_run (data.loop); - g_assert_cmpint (data.state, ==, APPLY_LIMIT_STATE_FINISH); - wayland_test_client_finish (data.wayland_test_client); - g_test_assert_expected_messages (); -} - -void -pre_run_wayland_tests (void) -{ - MetaWaylandCompositor *compositor; - - compositor = meta_wayland_compositor_get_default (); - g_assert_nonnull (compositor); - - test_driver = meta_wayland_test_driver_new (compositor); -} - -void -init_wayland_tests (void) -{ - g_test_add_func ("/wayland/subsurface/remap-toplevel", - subsurface_remap_toplevel); - g_test_add_func ("/wayland/subsurface/invalid-subsurfaces", - subsurface_invalid_subsurfaces); - g_test_add_func ("/wayland/subsurface/invalid-xdg-shell-actions", - subsurface_invalid_xdg_shell_actions); - g_test_add_func ("/wayland/toplevel/apply-limits", - toplevel_apply_limits); -} |