[mutter/gnome-40] tests: Move Wayland test driver helper protocol to its own file
- From: Jonas Ådahl <jadahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter/gnome-40] tests: Move Wayland test driver helper protocol to its own file
- Date: Sat, 31 Jul 2021 17:20:42 +0000 (UTC)
commit 118ab8e88c3711b7e7428cdf74e5113b66ef9218
Author: Jonas Ådahl <jadahl gmail com>
Date: Sat Apr 10 16:32:02 2021 +0100
tests: Move Wayland test driver helper protocol to its own file
While at it, make it a GObject so one can add signals to it.
Fixes: https://gitlab.gnome.org/GNOME/mutter/-/issues/1716
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1795>
(cherry picked from commit 151c80d2ef4d31b1a642ed94fcf8d2ab0a0ac584)
src/tests/meson.build | 2 +
src/tests/meta-wayland-test-driver.c | 128 +++++++++++++++++++++++++++++++++++
src/tests/meta-wayland-test-driver.h | 30 ++++++++
src/tests/wayland-unit-tests.c | 65 ++----------------
4 files changed, 164 insertions(+), 61 deletions(-)
---
diff --git a/src/tests/meson.build b/src/tests/meson.build
index 20c4725419..2a2e357822 100644
--- a/src/tests/meson.build
+++ b/src/tests/meson.build
@@ -84,6 +84,8 @@ unit_tests = executable('mutter-test-unit-tests',
'meta-gpu-test.h',
'meta-monitor-manager-test.c',
'meta-monitor-manager-test.h',
+ 'meta-wayland-test-driver.c',
+ 'meta-wayland-test-driver.h',
'monitor-config-migration-unit-tests.c',
'monitor-config-migration-unit-tests.h',
'monitor-store-unit-tests.c',
diff --git a/src/tests/meta-wayland-test-driver.c b/src/tests/meta-wayland-test-driver.c
new file mode 100644
index 0000000000..9913e779fa
--- /dev/null
+++ b/src/tests/meta-wayland-test-driver.c
@@ -0,0 +1,128 @@
+/*
+ * 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/meta-wayland-test-driver.h"
+
+#include <wayland-server.h>
+
+#include "wayland/meta-wayland-actor-surface.h"
+#include "wayland/meta-wayland-private.h"
+
+#include "test-driver-server-protocol.h"
+
+struct _MetaWaylandTestDriver
+{
+ GObject parent;
+
+ struct wl_global *test_driver;
+};
+
+G_DEFINE_TYPE (MetaWaylandTestDriver, meta_wayland_test_driver,
+ G_TYPE_OBJECT)
+
+static void
+on_actor_destroyed (ClutterActor *actor,
+ struct wl_resource *callback)
+{
+ wl_callback_send_done (callback, 0);
+ wl_resource_destroy (callback);
+}
+
+static void
+sync_actor_destroy (struct wl_client *client,
+ struct wl_resource *resource,
+ uint32_t id,
+ struct wl_resource *surface_resource)
+{
+ MetaWaylandSurface *surface = wl_resource_get_user_data (surface_resource);
+ MetaWaylandActorSurface *actor_surface;
+ MetaSurfaceActor *actor;
+ struct wl_resource *callback;
+
+ g_assert_nonnull (surface);
+
+ actor_surface = (MetaWaylandActorSurface *) surface->role;
+ g_assert_nonnull (actor_surface);
+
+ actor = meta_wayland_actor_surface_get_actor (actor_surface);
+ g_assert_nonnull (actor);
+
+ callback = wl_resource_create (client, &wl_callback_interface, 1, id);
+
+ g_signal_connect (actor, "destroy", G_CALLBACK (on_actor_destroyed),
+ callback);
+}
+
+static const struct test_driver_interface meta_test_driver_interface = {
+ sync_actor_destroy,
+};
+
+static void
+bind_test_driver (struct wl_client *client,
+ void *user_data,
+ uint32_t version,
+ uint32_t id)
+{
+ MetaWaylandTestDriver *test_driver = user_data;
+ struct wl_resource *resource;
+
+ resource = wl_resource_create (client, &test_driver_interface,
+ version, id);
+ wl_resource_set_implementation (resource, &meta_test_driver_interface,
+ test_driver, NULL);
+}
+
+static void
+meta_wayland_test_driver_finalize (GObject *object)
+{
+ MetaWaylandTestDriver *test_driver = META_WAYLAND_TEST_DRIVER (object);
+
+ g_clear_pointer (&test_driver->test_driver, wl_global_destroy);
+
+ G_OBJECT_CLASS (meta_wayland_test_driver_parent_class)->finalize (object);
+}
+
+static void
+meta_wayland_test_driver_class_init (MetaWaylandTestDriverClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->finalize = meta_wayland_test_driver_finalize;
+}
+
+static void
+meta_wayland_test_driver_init (MetaWaylandTestDriver *test_driver)
+{
+}
+
+MetaWaylandTestDriver *
+meta_wayland_test_driver_new (MetaWaylandCompositor *compositor)
+{
+ MetaWaylandTestDriver *test_driver;
+
+ test_driver = g_object_new (META_TYPE_WAYLAND_TEST_DRIVER, NULL);
+ test_driver->test_driver = wl_global_create (compositor->wayland_display,
+ &test_driver_interface,
+ 1,
+ test_driver, bind_test_driver);
+ if (!test_driver->test_driver)
+ g_error ("Failed to register a global wl-subcompositor object");
+
+ return test_driver;
+}
diff --git a/src/tests/meta-wayland-test-driver.h b/src/tests/meta-wayland-test-driver.h
new file mode 100644
index 0000000000..ccbfe1312d
--- /dev/null
+++ b/src/tests/meta-wayland-test-driver.h
@@ -0,0 +1,30 @@
+/*
+ * 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/>.
+ */
+
+#ifndef META_WAYLAND_TEST_DRIVER_H
+#define META_WAYLAND_TEST_DRIVER_H
+
+#include "wayland/meta-wayland.h"
+
+#define META_TYPE_WAYLAND_TEST_DRIVER (meta_wayland_test_driver_get_type ())
+G_DECLARE_FINAL_TYPE (MetaWaylandTestDriver, meta_wayland_test_driver,
+ META, WAYLAND_TEST_DRIVER,
+ GObject)
+
+MetaWaylandTestDriver * meta_wayland_test_driver_new (MetaWaylandCompositor *compositor);
+
+#endif /* META_WAYLAND_TEST_DRIVER_H */
diff --git a/src/tests/wayland-unit-tests.c b/src/tests/wayland-unit-tests.c
index 507c9dba4d..f8e6508d98 100644
--- a/src/tests/wayland-unit-tests.c
+++ b/src/tests/wayland-unit-tests.c
@@ -20,14 +20,10 @@
#include "tests/wayland-unit-tests.h"
#include <gio/gio.h>
-#include <wayland-server.h>
+#include "tests/meta-wayland-test-driver.h"
#include "wayland/meta-wayland.h"
-#include "wayland/meta-wayland-actor-surface.h"
#include "wayland/meta-wayland-surface.h"
-#include "wayland/meta-wayland-private.h"
-
-#include "test-driver-server-protocol.h"
typedef struct _WaylandTestClient
{
@@ -36,6 +32,8 @@ typedef struct _WaylandTestClient
GMainLoop *main_loop;
} WaylandTestClient;
+static MetaWaylandTestDriver *test_driver;
+
static char *
get_test_client_path (const char *test_client_name)
{
@@ -155,57 +153,6 @@ subsurface_invalid_xdg_shell_actions (void)
g_test_assert_expected_messages ();
}
-static void
-on_actor_destroyed (ClutterActor *actor,
- struct wl_resource *callback)
-{
- wl_callback_send_done (callback, 0);
- wl_resource_destroy (callback);
-}
-
-static void
-sync_actor_destroy (struct wl_client *client,
- struct wl_resource *resource,
- uint32_t id,
- struct wl_resource *surface_resource)
-{
- MetaWaylandSurface *surface = wl_resource_get_user_data (surface_resource);
- MetaWaylandActorSurface *actor_surface;
- MetaSurfaceActor *actor;
- struct wl_resource *callback;
-
- g_assert_nonnull (surface);
-
- actor_surface = (MetaWaylandActorSurface *) surface->role;
- g_assert_nonnull (actor_surface);
-
- actor = meta_wayland_actor_surface_get_actor (actor_surface);
- g_assert_nonnull (actor);
-
- callback = wl_resource_create (client, &wl_callback_interface, 1, id);
-
- g_signal_connect (actor, "destroy", G_CALLBACK (on_actor_destroyed),
- callback);
-}
-
-static const struct test_driver_interface meta_test_driver_interface = {
- sync_actor_destroy,
-};
-
-static void
-bind_test_driver (struct wl_client *client,
- void *data,
- uint32_t version,
- uint32_t id)
-{
- struct wl_resource *resource;
-
- resource = wl_resource_create (client, &test_driver_interface,
- version, id);
- wl_resource_set_implementation (resource, &meta_test_driver_interface,
- NULL, NULL);
-}
-
void
pre_run_wayland_tests (void)
{
@@ -214,11 +161,7 @@ pre_run_wayland_tests (void)
compositor = meta_wayland_compositor_get_default ();
g_assert_nonnull (compositor);
- if (wl_global_create (compositor->wayland_display,
- &test_driver_interface,
- 1,
- NULL, bind_test_driver) == NULL)
- g_error ("Failed to register a global wl-subcompositor object");
+ test_driver = meta_wayland_test_driver_new (compositor);
}
void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]