From 6c3c17daa6ffbfbbed348d1701ca11d2b7ede7ae Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Sat, 31 Aug 2024 14:31:28 +0200 Subject: [PATCH] tests: Make test context able to create a session manager And create an empty one when asked for it. This session data is not saved on disk, except for the purpose of creating an empty file FD. Part-of: --- src/core/meta-session-manager.h | 2 ++ src/tests/meta-context-test.c | 45 +++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/src/core/meta-session-manager.h b/src/core/meta-session-manager.h index 8c908de76..16c31bf0b 100644 --- a/src/core/meta-session-manager.h +++ b/src/core/meta-session-manager.h @@ -22,6 +22,7 @@ #include #include "core/meta-session-state.h" +#include "core/util-private.h" #include "meta/window.h" #define META_TYPE_SESSION_MANAGER (meta_session_manager_get_type ()) @@ -33,6 +34,7 @@ G_DECLARE_FINAL_TYPE (MetaSessionManager, MetaSessionManager * meta_session_manager_new (const gchar *name, GError **error); +META_EXPORT_TEST MetaSessionManager * meta_session_manager_new_for_fd (const gchar *name, int fd, GError **error); diff --git a/src/tests/meta-context-test.c b/src/tests/meta-context-test.c index 54459f6ad..510f83fe7 100644 --- a/src/tests/meta-context-test.c +++ b/src/tests/meta-context-test.c @@ -24,6 +24,7 @@ #include #define G_SETTINGS_ENABLE_BACKEND #include +#include #include "core/meta-context-private.h" #include "meta/meta-x11-display.h" @@ -51,6 +52,7 @@ typedef struct _MetaContextTestPrivate { MetaContextTestType type; MetaContextTestFlag flags; + MetaSessionManager *session_manager; } MetaContextTestPrivate; struct _MetaContextTestClass @@ -76,6 +78,18 @@ ensure_gsettings_memory_backend (void) G_TYPE_FROM_INSTANCE (default_backend)); } +static void +meta_context_test_finalize (GObject *object) +{ + MetaContextTest *context_test = META_CONTEXT_TEST (object); + MetaContextTestPrivate *priv = + meta_context_test_get_instance_private (context_test); + + g_clear_object (&priv->session_manager); + + G_OBJECT_CLASS (meta_context_test_parent_class)->finalize (object); +} + static gboolean meta_context_test_configure (MetaContext *context, int *argc, @@ -219,6 +233,33 @@ meta_context_test_notify_ready (MetaContext *context) { } +static MetaSessionManager * +meta_context_test_get_session_manager (MetaContext *context) +{ + MetaContextTest *context_test = META_CONTEXT_TEST (context); + MetaContextTestPrivate *priv = + meta_context_test_get_instance_private (context_test); + + if (!priv->session_manager) + { + g_autoptr (GError) error = NULL; + g_autofree char *template = NULL; + int fd; + + template = g_build_filename (g_get_tmp_dir (), + "session.gvdb.XXXXXX", + NULL); + + fd = g_mkstemp (template); + unlink (template); + priv->session_manager = + meta_session_manager_new_for_fd (NULL, fd, &error); + g_assert_no_error (error); + } + + return priv->session_manager; +} + #ifdef HAVE_X11 static gboolean meta_context_test_is_x11_sync (MetaContext *context) @@ -343,8 +384,11 @@ meta_create_test_context (MetaContextTestType type, static void meta_context_test_class_init (MetaContextTestClass *klass) { + GObjectClass *object_class = G_OBJECT_CLASS (klass); MetaContextClass *context_class = META_CONTEXT_CLASS (klass); + object_class->finalize = meta_context_test_finalize; + context_class->configure = meta_context_test_configure; context_class->get_compositor_type = meta_context_test_get_compositor_type; context_class->get_x11_display_policy = @@ -356,6 +400,7 @@ meta_context_test_class_init (MetaContextTestClass *klass) #ifdef HAVE_X11 context_class->is_x11_sync = meta_context_test_is_x11_sync; #endif + context_class->get_session_manager = meta_context_test_get_session_manager; signals[BEFORE_TESTS] = g_signal_new ("before-tests",