diff options
Diffstat (limited to 'nixpkgs/pkgs/test/make-hardcode-gsettings-patch')
6 files changed, 256 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/test/make-hardcode-gsettings-patch/default.nix b/nixpkgs/pkgs/test/make-hardcode-gsettings-patch/default.nix new file mode 100644 index 000000000000..e27a6f179208 --- /dev/null +++ b/nixpkgs/pkgs/test/make-hardcode-gsettings-patch/default.nix @@ -0,0 +1,77 @@ +{ runCommandLocal +, lib +, git +, clang-tools +, makeHardcodeGsettingsPatch +}: + +let + mkTest = + { + name, + expected, + src, + patches ? [ ], + schemaIdToVariableMapping, + }: + + let + patch = makeHardcodeGsettingsPatch ({ + inherit src schemaIdToVariableMapping; + inherit patches; + }); + 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 + for patch in ${lib.escapeShellArgs (builtins.map (p: "${p}") patches)}; do + patch < "$patch" + done + 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; + }; + + patches = mkTest { + name = "patches"; + src = ./fixtures/example-project-wrapped-settings-constructor; + patches = [ + # Avoid using wrapper function, which the generator cannot handle. + ./fixtures/example-project-wrapped-settings-constructor-resolve.patch + ]; + schemaIdToVariableMapping = { + "org.gnome.evolution-data-server.addressbook" = "EDS"; + }; + expected = ./fixtures/example-project-wrapped-settings-constructor-patched; + }; +} diff --git a/nixpkgs/pkgs/test/make-hardcode-gsettings-patch/fixtures/example-project-patched/main.c b/nixpkgs/pkgs/test/make-hardcode-gsettings-patch/fixtures/example-project-patched/main.c new file mode 100644 index 000000000000..7822a42b840a --- /dev/null +++ b/nixpkgs/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/nixpkgs/pkgs/test/make-hardcode-gsettings-patch/fixtures/example-project-wrapped-settings-constructor-patched/main.c b/nixpkgs/pkgs/test/make-hardcode-gsettings-patch/fixtures/example-project-wrapped-settings-constructor-patched/main.c new file mode 100644 index 000000000000..b0894614de7c --- /dev/null +++ b/nixpkgs/pkgs/test/make-hardcode-gsettings-patch/fixtures/example-project-wrapped-settings-constructor-patched/main.c @@ -0,0 +1,15 @@ +#include <gio/gio.h> +#include <glib-object.h> + +int main() { + g_autoptr(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); + } + + return 0; +} diff --git a/nixpkgs/pkgs/test/make-hardcode-gsettings-patch/fixtures/example-project-wrapped-settings-constructor-resolve.patch b/nixpkgs/pkgs/test/make-hardcode-gsettings-patch/fixtures/example-project-wrapped-settings-constructor-resolve.patch new file mode 100644 index 000000000000..70b80a9e8627 --- /dev/null +++ b/nixpkgs/pkgs/test/make-hardcode-gsettings-patch/fixtures/example-project-wrapped-settings-constructor-resolve.patch @@ -0,0 +1,17 @@ +--- a/main.c ++++ b/main.c +@@ -1,13 +1,9 @@ + #include <gio/gio.h> + #include <glib-object.h> + +-void my_settings_new(const char *schema_id) { +- return g_settings_new(schema_id); +-} +- + int main() { + g_autoptr (GSettings) settings; +- settings = my_settings_new("org.gnome.evolution-data-server.addressbook"); ++ settings = g_settings_new("org.gnome.evolution-data-server.addressbook"); + + return 0; + } diff --git a/nixpkgs/pkgs/test/make-hardcode-gsettings-patch/fixtures/example-project-wrapped-settings-constructor/main.c b/nixpkgs/pkgs/test/make-hardcode-gsettings-patch/fixtures/example-project-wrapped-settings-constructor/main.c new file mode 100644 index 000000000000..0821097f350b --- /dev/null +++ b/nixpkgs/pkgs/test/make-hardcode-gsettings-patch/fixtures/example-project-wrapped-settings-constructor/main.c @@ -0,0 +1,13 @@ +#include <gio/gio.h> +#include <glib-object.h> + +void my_settings_new(const char *schema_id) { + return g_settings_new(schema_id); +} + +int main() { + g_autoptr (GSettings) settings; + settings = my_settings_new("org.gnome.evolution-data-server.addressbook"); + + return 0; +} diff --git a/nixpkgs/pkgs/test/make-hardcode-gsettings-patch/fixtures/example-project/main.c b/nixpkgs/pkgs/test/make-hardcode-gsettings-patch/fixtures/example-project/main.c new file mode 100644 index 000000000000..afcb3686ec84 --- /dev/null +++ b/nixpkgs/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; +} |