diff --git a/pkgs/test/default.nix b/pkgs/test/default.nix index e72afbb39980..bf0842f26698 100644 --- a/pkgs/test/default.nix +++ b/pkgs/test/default.nix @@ -81,6 +81,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 000000000000..a1339ffb2bc4 --- /dev/null +++ b/pkgs/test/make-hardcode-gsettings-patch/default.nix @@ -0,0 +1,57 @@ +{ 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"; + }; + 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 000000000000..42eeeca58494 --- /dev/null +++ b/pkgs/test/make-hardcode-gsettings-patch/fixtures/example-project-patched/main.c @@ -0,0 +1,46 @@ +#include +#include + +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); + } +} + +int main() { + schema_id_literal(); + schema_id_from_constant(); + schema_id_autoptr(); + + 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 000000000000..d83dc09e124e --- /dev/null +++ b/pkgs/test/make-hardcode-gsettings-patch/fixtures/example-project/main.c @@ -0,0 +1,28 @@ +#include +#include + +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"); +} + +int main() { + schema_id_literal(); + schema_id_from_constant(); + schema_id_autoptr(); + + return 0; +}