about summary refs log tree commit diff
path: root/pkgs/test
diff options
context:
space:
mode:
authorJan Tojnar <jtojnar@gmail.com>2022-12-25 01:30:47 +0100
committerJan Tojnar <jtojnar@gmail.com>2022-12-25 01:30:47 +0100
commit72c37eddec230b691dee4a6c7aed17028a617ad8 (patch)
treecaf36a6707f07dff9fce175e4fc0f6dd8260a24c /pkgs/test
parent4b4777638c424fa29224330d078b065503806aad (diff)
parent3fc0495cdc63449e1699db7b377962fb4ae55190 (diff)
Merge branch 'staging-next' into staging
Diffstat (limited to 'pkgs/test')
-rw-r--r--pkgs/test/default.nix2
-rw-r--r--pkgs/test/make-hardcode-gsettings-patch/default.nix58
-rw-r--r--pkgs/test/make-hardcode-gsettings-patch/fixtures/example-project-patched/main.c85
-rw-r--r--pkgs/test/make-hardcode-gsettings-patch/fixtures/example-project/main.c49
4 files changed, 194 insertions, 0 deletions
diff --git a/pkgs/test/default.nix b/pkgs/test/default.nix
index 9cf5487372d04..818001018b3ae 100644
--- a/pkgs/test/default.nix
+++ b/pkgs/test/default.nix
@@ -84,6 +84,8 @@ with pkgs;
 
   coq = callPackage ./coq {};
 
+  makeHardcodeGsettingsPatch = callPackage ./make-hardcode-gsettings-patch { };
+
   makeWrapper = callPackage ./make-wrapper { };
   makeBinaryWrapper = callPackage ./make-binary-wrapper {
     makeBinaryWrapper = pkgs.makeBinaryWrapper.override {
diff --git a/pkgs/test/make-hardcode-gsettings-patch/default.nix b/pkgs/test/make-hardcode-gsettings-patch/default.nix
new file mode 100644
index 0000000000000..6c5d2318c6d8c
--- /dev/null
+++ b/pkgs/test/make-hardcode-gsettings-patch/default.nix
@@ -0,0 +1,58 @@
+{ runCommandLocal
+, git
+, clang-tools
+, makeHardcodeGsettingsPatch
+}:
+
+let
+  mkTest =
+    {
+      name,
+      expected,
+      src,
+      schemaIdToVariableMapping,
+    }:
+
+    let
+      patch = makeHardcodeGsettingsPatch {
+        inherit src schemaIdToVariableMapping;
+      };
+    in
+    runCommandLocal
+      "makeHardcodeGsettingsPatch-tests-${name}"
+
+      {
+        nativeBuildInputs = [
+          git
+          clang-tools
+        ];
+      }
+
+      ''
+        cp -r --no-preserve=all "${src}" src
+        cp -r --no-preserve=all "${expected}" src-expected
+
+        pushd src
+        patch < "${patch}"
+        popd
+
+        find src -name '*.c' -print0 | while read -d $'\0' sourceFile; do
+          sourceFile=''${sourceFile#src/}
+          clang-format -style='{BasedOnStyle: InheritParentConfig, ColumnLimit: 240}' -i "src/$sourceFile" "src-expected/$sourceFile"
+          git diff --no-index "src/$sourceFile" "src-expected/$sourceFile" | cat
+        done
+        touch "$out"
+      '';
+in
+{
+  basic = mkTest {
+    name = "basic";
+    src = ./fixtures/example-project;
+    schemaIdToVariableMapping = {
+      "org.gnome.evolution-data-server.addressbook" = "EDS";
+      "org.gnome.evolution.calendar" = "EVO";
+      "org.gnome.seahorse.nautilus.window" = "SEANAUT";
+    };
+    expected = ./fixtures/example-project-patched;
+  };
+}
diff --git a/pkgs/test/make-hardcode-gsettings-patch/fixtures/example-project-patched/main.c b/pkgs/test/make-hardcode-gsettings-patch/fixtures/example-project-patched/main.c
new file mode 100644
index 0000000000000..7822a42b840a7
--- /dev/null
+++ b/pkgs/test/make-hardcode-gsettings-patch/fixtures/example-project-patched/main.c
@@ -0,0 +1,85 @@
+#include <gio/gio.h>
+#include <glib-object.h>
+
+void schema_id_literal() {
+  GSettings *settings;
+  {
+    g_autoptr(GSettingsSchemaSource) schema_source;
+    g_autoptr(GSettingsSchema) schema;
+    schema_source = g_settings_schema_source_new_from_directory("@EDS@", g_settings_schema_source_get_default(), TRUE, NULL);
+    schema = g_settings_schema_source_lookup(schema_source, "org.gnome.evolution-data-server.addressbook", FALSE);
+    settings = g_settings_new_full(schema, NULL, NULL);
+  }
+  g_object_unref(settings);
+}
+
+#define SELF_UID_PATH_ID "org.gnome.evolution-data-server.addressbook"
+int schema_id_from_constant() {
+  GSettings *settings;
+  {
+    g_autoptr(GSettingsSchemaSource) schema_source;
+    g_autoptr(GSettingsSchema) schema;
+    schema_source = g_settings_schema_source_new_from_directory("@EDS@", g_settings_schema_source_get_default(), TRUE, NULL);
+    schema = g_settings_schema_source_lookup(schema_source, SELF_UID_PATH_ID, FALSE);
+    settings = g_settings_new_full(schema, NULL, NULL);
+  }
+  g_object_unref(settings);
+}
+
+void schema_id_autoptr() {
+  g_autoptr(GSettings) settings = NULL;
+  {
+    g_autoptr(GSettingsSchemaSource) schema_source;
+    g_autoptr(GSettingsSchema) schema;
+    schema_source = g_settings_schema_source_new_from_directory("@EVO@", g_settings_schema_source_get_default(), TRUE, NULL);
+    schema = g_settings_schema_source_lookup(schema_source, "org.gnome.evolution.calendar", FALSE);
+    settings = g_settings_new_full(schema, NULL, NULL);
+  }
+}
+
+void schema_id_with_backend() {
+  GSettings *settings;
+  {
+    g_autoptr(GSettingsSchemaSource) schema_source;
+    g_autoptr(GSettingsSchema) schema;
+    schema_source = g_settings_schema_source_new_from_directory("@EDS@", g_settings_schema_source_get_default(), TRUE, NULL);
+    schema = g_settings_schema_source_lookup(schema_source, "org.gnome.evolution-data-server.addressbook", FALSE);
+    settings = g_settings_new_full(schema, g_settings_backend_get_default(), NULL);
+  }
+  g_object_unref(settings);
+}
+
+void schema_id_with_backend_and_path() {
+  GSettings *settings;
+  {
+    g_autoptr(GSettingsSchemaSource) schema_source;
+    g_autoptr(GSettingsSchema) schema;
+    schema_source = g_settings_schema_source_new_from_directory("@SEANAUT@", g_settings_schema_source_get_default(), TRUE, NULL);
+    schema = g_settings_schema_source_lookup(schema_source, "org.gnome.seahorse.nautilus.window", FALSE);
+    settings = g_settings_new_full(schema, g_settings_backend_get_default(), "/org/gnome/seahorse/nautilus/windows/123/");
+  }
+  g_object_unref(settings);
+}
+
+void schema_id_with_path() {
+  GSettings *settings;
+  {
+    g_autoptr(GSettingsSchemaSource) schema_source;
+    g_autoptr(GSettingsSchema) schema;
+    schema_source = g_settings_schema_source_new_from_directory("@SEANAUT@", g_settings_schema_source_get_default(), TRUE, NULL);
+    schema = g_settings_schema_source_lookup(schema_source, "org.gnome.seahorse.nautilus.window", FALSE);
+    settings = g_settings_new_full(schema, NULL, "/org/gnome/seahorse/nautilus/windows/123/");
+  }
+  g_object_unref(settings);
+}
+
+int main() {
+  schema_id_literal();
+  schema_id_from_constant();
+  schema_id_autoptr();
+  schema_id_with_backend();
+  schema_id_with_backend_and_path();
+  schema_id_with_path();
+
+  return 0;
+}
diff --git a/pkgs/test/make-hardcode-gsettings-patch/fixtures/example-project/main.c b/pkgs/test/make-hardcode-gsettings-patch/fixtures/example-project/main.c
new file mode 100644
index 0000000000000..afcb3686ec840
--- /dev/null
+++ b/pkgs/test/make-hardcode-gsettings-patch/fixtures/example-project/main.c
@@ -0,0 +1,49 @@
+#include <gio/gio.h>
+#include <glib-object.h>
+
+void schema_id_literal() {
+  GSettings *settings;
+  settings = g_settings_new("org.gnome.evolution-data-server.addressbook");
+  g_object_unref(settings);
+}
+
+#define SELF_UID_PATH_ID "org.gnome.evolution-data-server.addressbook"
+int schema_id_from_constant() {
+  GSettings *settings;
+  settings = g_settings_new(SELF_UID_PATH_ID);
+  g_object_unref(settings);
+}
+
+void schema_id_autoptr() {
+  g_autoptr(GSettings) settings = NULL;
+  settings = g_settings_new("org.gnome.evolution.calendar");
+}
+
+void schema_id_with_backend() {
+  GSettings *settings;
+  settings = g_settings_new_with_backend("org.gnome.evolution-data-server.addressbook", g_settings_backend_get_default());
+  g_object_unref(settings);
+}
+
+void schema_id_with_backend_and_path() {
+  GSettings *settings;
+  settings = g_settings_new_with_backend_and_path("org.gnome.seahorse.nautilus.window", g_settings_backend_get_default(), "/org/gnome/seahorse/nautilus/windows/123/");
+  g_object_unref(settings);
+}
+
+void schema_id_with_path() {
+  GSettings *settings;
+  settings = g_settings_new_with_path("org.gnome.seahorse.nautilus.window", "/org/gnome/seahorse/nautilus/windows/123/");
+  g_object_unref(settings);
+}
+
+int main() {
+  schema_id_literal();
+  schema_id_from_constant();
+  schema_id_autoptr();
+  schema_id_with_backend();
+  schema_id_with_backend_and_path();
+  schema_id_with_path();
+
+  return 0;
+}