[glib/mcatanzaro/glib-2-56-rhel8: 9/45] Add a test for per-desktop overrides




commit 2a6de1421763f81566a3e67a76994c52a4661d24
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date:   Tue Jun 19 23:39:24 2018 +0300

    Add a test for per-desktop overrides

 gio/glib-compile-schemas.c                   |   1 +
 gio/tests/Makefile.am                        |   2 +
 gio/tests/gsettings.c                        | 106 ++++++++++++++++++++++++++-
 gio/tests/org.gtk.test.gschema.override.orig |   2 +
 gio/tests/org.gtk.test.gschema.xml.orig      |   6 ++
 5 files changed, 116 insertions(+), 1 deletion(-)
---
diff --git a/gio/glib-compile-schemas.c b/gio/glib-compile-schemas.c
index 59fb68ee7..00dd64146 100644
--- a/gio/glib-compile-schemas.c
+++ b/gio/glib-compile-schemas.c
@@ -2139,6 +2139,7 @@ main (int argc, char **argv)
 
     /* These options are only for use in the gschema-compile tests */
     { "schema-file", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_FILENAME_ARRAY, &schema_files, NULL, NULL },
+    { "override-file", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_FILENAME_ARRAY, &override_files, NULL, NULL },
     { NULL }
   };
 
diff --git a/gio/tests/Makefile.am b/gio/tests/Makefile.am
index 49a19bf4a..b41317ad9 100644
--- a/gio/tests/Makefile.am
+++ b/gio/tests/Makefile.am
@@ -367,12 +367,14 @@ test.mo: de.po
 EXTRA_DIST += de.po
 dist_uninstalled_test_data += \
        org.gtk.test.gschema.xml.orig           \
+       org.gtk.test.gschema.override.orig      \
        org.gtk.schemasourcecheck.gschema.xml   \
        testenum.h                              \
        enums.xml.template
 # Generated while running the testcase itself...
 CLEANFILES += \
        org.gtk.test.gschema.xml        \
+       org.gtk.test.gschema.override   \
        org.gtk.test.enums.xml          \
        gsettings.store                 \
        gschemas.compiled               \
diff --git a/gio/tests/gsettings.c b/gio/tests/gsettings.c
index 2be4122fe..acdeead4c 100644
--- a/gio/tests/gsettings.c
+++ b/gio/tests/gsettings.c
@@ -2192,6 +2192,7 @@ G_GNUC_END_IGNORE_DEPRECATIONS
                             "org.gtk.test.range.direct",
                             "org.gtk.test.mapped",
                             "org.gtk.test.descriptions",
+                            "org.gtk.test.per-desktop",
                             NULL));
 }
 
@@ -2583,6 +2584,100 @@ test_default_value (void)
   g_object_unref (settings);
 }
 
+static gboolean
+string_map_func (GVariant *value,
+                 gpointer *result,
+                 gpointer  user_data)
+{
+  const gchar *str;
+
+  str = g_variant_get_string (value, NULL);
+  *result = g_variant_new_string (str);
+
+  return TRUE;
+}
+
+/* Test that per-desktop values from org.gtk.test.gschema.override
+ * does not change default value if current desktop is not listed in
+ * $XDG_CURRENT_DESKTOP.
+ */
+static void
+test_per_desktop (void)
+{
+  GSettings *settings;
+  TestObject *obj;
+  gpointer p;
+  gchar *str;
+
+  settings = g_settings_new ("org.gtk.test.per-desktop");
+  obj = test_object_new ();
+
+  if (!g_test_subprocess ())
+    {
+      g_test_trap_subprocess ("/gsettings/per-desktop/subprocess", 0, 0);
+      g_test_trap_assert_passed ();
+    }
+
+  str = g_settings_get_string (settings, "desktop");
+  g_assert_cmpstr (str, ==, "GNOME");
+  g_free (str);
+
+  p = g_settings_get_mapped (settings, "desktop", string_map_func, NULL);
+
+  str = g_variant_dup_string (p, NULL);
+  g_assert_cmpstr (str, ==, "GNOME");
+  g_free (str);
+
+  g_variant_unref (p);
+
+  g_settings_bind (settings, "desktop", obj, "string", G_SETTINGS_BIND_DEFAULT);
+
+  g_object_get (obj, "string", &str, NULL);
+  g_assert_cmpstr (str, ==, "GNOME");
+  g_free (str);
+
+  g_object_unref (settings);
+  g_object_unref (obj);
+}
+
+/* Test that per-desktop values from org.gtk.test.gschema.override
+ * are successfully loaded based on the value of $XDG_CURRENT_DESKTOP.
+ */
+static void
+test_per_desktop_subprocess (void)
+{
+  GSettings *settings;
+  TestObject *obj;
+  gpointer p;
+  gchar *str;
+
+  g_setenv ("XDG_CURRENT_DESKTOP", "GNOME-Classic:GNOME", TRUE);
+
+  settings = g_settings_new ("org.gtk.test.per-desktop");
+  obj = test_object_new ();
+
+  str = g_settings_get_string (settings, "desktop");
+  g_assert_cmpstr (str, ==, "GNOME Classic");
+  g_free (str);
+
+  p = g_settings_get_mapped (settings, "desktop", string_map_func, NULL);
+
+  str = g_variant_dup_string (p, NULL);
+  g_assert_cmpstr (str, ==, "GNOME Classic");
+  g_free (str);
+
+  g_variant_unref (p);
+
+  g_settings_bind (settings, "desktop", obj, "string", G_SETTINGS_BIND_DEFAULT);
+
+  g_object_get (obj, "string", &str, NULL);
+  g_assert_cmpstr (str, ==, "GNOME Classic");
+  g_free (str);
+
+  g_object_unref (settings);
+  g_object_unref (obj);
+}
+
 static void
 test_extended_schema (void)
 {
@@ -2603,6 +2698,7 @@ int
 main (int argc, char *argv[])
 {
   gchar *schema_text;
+  gchar *override_text;
   gchar *enums;
   gint result;
 
@@ -2625,6 +2721,7 @@ main (int argc, char *argv[])
       g_setenv ("XDG_DATA_DIRS", ".", TRUE);
       g_setenv ("XDG_DATA_HOME", ".", TRUE);
       g_setenv ("GSETTINGS_SCHEMA_DIR", ".", TRUE);
+      g_setenv ("XDG_CURRENT_DESKTOP", "", TRUE);
 
       if (!backend_set)
         g_setenv ("GSETTINGS_BACKEND", "memory", TRUE);
@@ -2647,6 +2744,10 @@ main (int argc, char *argv[])
       g_assert (g_file_set_contents ("org.gtk.test.gschema.xml", schema_text, -1, NULL));
       g_free (schema_text);
 
+      g_assert (g_file_get_contents (SRCDIR "/org.gtk.test.gschema.override.orig", &override_text, NULL, 
NULL));
+      g_assert (g_file_set_contents ("org.gtk.test.gschema.override", override_text, -1, NULL));
+      g_free (override_text);
+
 /* Meson build defines this, autotools build does not */
 #ifndef GLIB_COMPILE_SCHEMAS
 #define GLIB_COMPILE_SCHEMAS "../glib-compile-schemas"
@@ -2655,7 +2756,8 @@ main (int argc, char *argv[])
       g_remove ("gschemas.compiled");
       g_assert (g_spawn_command_line_sync (GLIB_COMPILE_SCHEMAS " --targetdir=. "
                                            "--schema-file=org.gtk.test.enums.xml "
-                                           "--schema-file=org.gtk.test.gschema.xml",
+                                           "--schema-file=org.gtk.test.gschema.xml "
+                                           "--override-file=org.gtk.test.gschema.override",
                                            NULL, NULL, &result, NULL));
       g_assert (result == 0);
 
@@ -2736,6 +2838,8 @@ main (int argc, char *argv[])
   g_test_add_func ("/gsettings/read-descriptions", test_read_descriptions);
   g_test_add_func ("/gsettings/test-extended-schema", test_extended_schema);
   g_test_add_func ("/gsettings/default-value", test_default_value);
+  g_test_add_func ("/gsettings/per-desktop", test_per_desktop);
+  g_test_add_func ("/gsettings/per-desktop/subprocess", test_per_desktop_subprocess);
 
   result = g_test_run ();
 
diff --git a/gio/tests/org.gtk.test.gschema.override.orig b/gio/tests/org.gtk.test.gschema.override.orig
new file mode 100644
index 000000000..6694baace
--- /dev/null
+++ b/gio/tests/org.gtk.test.gschema.override.orig
@@ -0,0 +1,2 @@
+[org.gtk.test.per-desktop:GNOME-Classic]
+desktop = "GNOME Classic"
diff --git a/gio/tests/org.gtk.test.gschema.xml.orig b/gio/tests/org.gtk.test.gschema.xml.orig
index c07558335..fbcdce683 100644
--- a/gio/tests/org.gtk.test.gschema.xml.orig
+++ b/gio/tests/org.gtk.test.gschema.xml.orig
@@ -209,4 +209,10 @@
     </key>
   </schema>
 
+  <schema id="org.gtk.test.per-desktop" path="/tests/per-desktop/">
+    <key name="desktop" type="s">
+      <default>"GNOME"</default>
+    </key>
+  </schema>
+
 </schemalist>


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]