From 04255e45654bd49f1974a79baeafb33d228f6f71 Mon Sep 17 00:00:00 2001 From: Ryan Hope Date: Tue, 12 Jul 2022 21:38:54 +0000 Subject: [PATCH 1/3] Add missing extension point register for for GMemorySettingsBackend Using GMemorySettingsBackend before any other GSettingsBackend would cause the following error: "Tried to implement non-registered extension point gsettings-backend". This is due to a missing call to _g_io_modules_ensure_extension_points_registered() in the GMemorySettingsBackend type definition which registers the gsettings-backend extension point. --- gio/gmemorysettingsbackend.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gio/gmemorysettingsbackend.c b/gio/gmemorysettingsbackend.c index c0e4c807a2..0ebc604ae0 100644 --- a/gio/gmemorysettingsbackend.c +++ b/gio/gmemorysettingsbackend.c @@ -23,7 +23,7 @@ #include "gsimplepermission.h" #include "gsettingsbackendinternal.h" -#include "giomodule.h" +#include "giomodule-priv.h" #define G_TYPE_MEMORY_SETTINGS_BACKEND (g_memory_settings_backend_get_type()) @@ -41,6 +41,7 @@ typedef struct G_DEFINE_TYPE_WITH_CODE (GMemorySettingsBackend, g_memory_settings_backend, G_TYPE_SETTINGS_BACKEND, + _g_io_modules_ensure_extension_points_registered (); g_io_extension_point_implement (G_SETTINGS_BACKEND_EXTENSION_POINT_NAME, g_define_type_id, "memory", 10)) -- GitLab From 924da751c2d3ed4636223343ebaa7364b97f8f93 Mon Sep 17 00:00:00 2001 From: Ryan Hope Date: Wed, 13 Jul 2022 10:58:51 +0100 Subject: [PATCH 2/3] gio: Ensure extension points are registered when creating Settings backends Add missing call to _g_io_modules_ensure_extension_points_registered() to GRegistryBackend, GNullSettingsBackend, and GNextstepSettingsBackend --- gio/gnextstepsettingsbackend.m | 3 ++- gio/gnullsettingsbackend.c | 3 ++- gio/gregistrysettingsbackend.c | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/gio/gnextstepsettingsbackend.m b/gio/gnextstepsettingsbackend.m index 9e1862b83d..5ecaec8592 100644 --- a/gio/gnextstepsettingsbackend.m +++ b/gio/gnextstepsettingsbackend.m @@ -23,7 +23,7 @@ #include "gsettingsbackendinternal.h" #include "gsimplepermission.h" -#include "giomodule.h" +#include "giomodule-priv.h" #import @@ -46,6 +46,7 @@ struct _GNextstepSettingsBackend G_DEFINE_TYPE_WITH_CODE (GNextstepSettingsBackend, g_nextstep_settings_backend, G_TYPE_SETTINGS_BACKEND, + _g_io_modules_ensure_extension_points_registered (); g_io_extension_point_implement (G_SETTINGS_BACKEND_EXTENSION_POINT_NAME, g_define_type_id, "nextstep", 90)); diff --git a/gio/gnullsettingsbackend.c b/gio/gnullsettingsbackend.c index 9aaacd86e5..cf12c1614d 100644 --- a/gio/gnullsettingsbackend.c +++ b/gio/gnullsettingsbackend.c @@ -22,7 +22,7 @@ #include "config.h" #include "gsettingsbackendinternal.h" -#include "giomodule.h" +#include "giomodule-priv.h" #include "gsimplepermission.h" @@ -38,6 +38,7 @@ typedef GSettingsBackend GNullSettingsBackend; G_DEFINE_TYPE_WITH_CODE (GNullSettingsBackend, g_null_settings_backend, G_TYPE_SETTINGS_BACKEND, + _g_io_modules_ensure_extension_points_registered (); g_io_extension_point_implement (G_SETTINGS_BACKEND_EXTENSION_POINT_NAME, g_define_type_id, "null", 10)) diff --git a/gio/gregistrysettingsbackend.c b/gio/gregistrysettingsbackend.c index aecccd3f7e..6250398770 100644 --- a/gio/gregistrysettingsbackend.c +++ b/gio/gregistrysettingsbackend.c @@ -93,7 +93,7 @@ #include "gregistrysettingsbackend.h" #include "gsettingsbackend.h" -#include "giomodule.h" +#include "giomodule-priv.h" #include @@ -179,6 +179,7 @@ typedef struct { G_DEFINE_TYPE_WITH_CODE (GRegistryBackend, g_registry_backend, G_TYPE_SETTINGS_BACKEND, + _g_io_modules_ensure_extension_points_registered (); g_io_extension_point_implement (G_SETTINGS_BACKEND_EXTENSION_POINT_NAME, g_define_type_id, "registry", 90)) -- GitLab From 7c4e6032c6e383db94d917e9af6836d938114241 Mon Sep 17 00:00:00 2001 From: Ryan Hope Date: Thu, 14 Jul 2022 23:07:38 +0100 Subject: [PATCH 3/3] Add tests for GMemorySettingsBackend and GNullSettingsBackend --- gio/tests/memory-settings-backend.c | 57 +++++++++++++++++++++++++++++ gio/tests/meson.build | 2 + gio/tests/null-settings-backend.c | 54 +++++++++++++++++++++++++++ 3 files changed, 113 insertions(+) create mode 100644 gio/tests/memory-settings-backend.c create mode 100644 gio/tests/null-settings-backend.c diff --git a/gio/tests/memory-settings-backend.c b/gio/tests/memory-settings-backend.c new file mode 100644 index 0000000000..80e9919bfd --- /dev/null +++ b/gio/tests/memory-settings-backend.c @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2022 Ryan Hope + * + * SPDX-License-Identifier: LGPL-2.1-or-later + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see . + * + * Authors: Ryan Hope + */ + +#include +#include +#define G_SETTINGS_ENABLE_BACKEND +#include + +/* Test that the "gsettings-backend" extension point has been registered. + * Must be run first and separetly from other GSettingsBackend, + * as they will register the extension point making the test useless. + */ +static void +test_extension_point_registered (void) +{ + GSettingsBackend *backend; + GIOExtensionPoint *extension_point; + + backend = g_memory_settings_backend_new (); + g_assert_true (G_IS_SETTINGS_BACKEND (backend)); + + extension_point = g_io_extension_point_lookup (G_SETTINGS_BACKEND_EXTENSION_POINT_NAME); + g_assert_nonnull (extension_point); + + g_object_unref (backend); +} + +int +main (int argc, char *argv[]) +{ + setlocale (LC_ALL, ""); + + g_test_init (&argc, &argv, NULL); + + /* Must be run first */ + g_test_add_func ("/memory-settings-backend/extension-point-registered", test_extension_point_registered); + + return g_test_run (); +} diff --git a/gio/tests/meson.build b/gio/tests/meson.build index 1cb5e30ee2..c3cc6c75ce 100644 --- a/gio/tests/meson.build +++ b/gio/tests/meson.build @@ -90,10 +90,12 @@ gio_tests = { 'memory-input-stream' : {}, 'memory-monitor' : {}, 'memory-output-stream' : {}, + 'memory-settings-backend' : {}, 'mount-operation' : {}, 'network-address' : {'extra_sources': ['mock-resolver.c']}, 'network-monitor' : {}, 'network-monitor-race' : {}, + 'null-settings-backend' : {}, 'permission' : {}, 'pollable' : {'dependencies' : [libutil_dep]}, 'power-profile-monitor' : {}, diff --git a/gio/tests/null-settings-backend.c b/gio/tests/null-settings-backend.c new file mode 100644 index 0000000000..34dee56d2c --- /dev/null +++ b/gio/tests/null-settings-backend.c @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2022 Ryan Hope + * + * SPDX-License-Identifier: LGPL-2.1-or-later + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see . + * + * Authors: Ryan Hope + */ + +#include +#define G_SETTINGS_ENABLE_BACKEND +#include + +/* Test that the "gsettings-backend" extension point has been registered. + * Must be run first and separetly from other GSettingsBackend, + * as they will register the extension point making the test useless. + */ +static void +test_extension_point_registered (void) +{ + GSettingsBackend *backend; + GIOExtensionPoint *extension_point; + + backend = g_null_settings_backend_new (); + g_assert_true (G_IS_SETTINGS_BACKEND (backend)); + extension_point = g_io_extension_point_lookup (G_SETTINGS_BACKEND_EXTENSION_POINT_NAME); + + g_assert_nonnull (extension_point); + + g_object_unref (backend); +} + +int +main (int argc, char *argv[]) +{ + g_test_init (&argc, &argv, NULL); + + /* Must be run first */ + g_test_add_func ("/null-settings-backend/extension-point-registered", test_extension_point_registered); + + return g_test_run (); +} -- GitLab