1{ 2 runCommandLocal, 3 lib, 4 git, 5 clang-tools, 6 makeHardcodeGsettingsPatch, 7}: 8 9let 10 mkTest = 11 { 12 name, 13 expected, 14 src, 15 patches ? [ ], 16 args, 17 }: 18 19 let 20 patch = makeHardcodeGsettingsPatch ( 21 args 22 // { 23 inherit src patches; 24 } 25 ); 26 in 27 runCommandLocal "makeHardcodeGsettingsPatch-tests-${name}" 28 29 { 30 nativeBuildInputs = [ 31 git 32 clang-tools 33 ]; 34 } 35 36 '' 37 cp -r --no-preserve=all "${src}" src 38 cp -r --no-preserve=all "${expected}" src-expected 39 40 pushd src 41 for patch in ${lib.escapeShellArgs (builtins.map (p: "${p}") patches)}; do 42 patch < "$patch" 43 done 44 patch < "${patch}" 45 popd 46 47 find src -name '*.c' -print0 | while read -d $'\0' sourceFile; do 48 sourceFile=''${sourceFile#src/} 49 clang-format -style='{BasedOnStyle: InheritParentConfig, ColumnLimit: 240}' -i "src/$sourceFile" "src-expected/$sourceFile" 50 git diff --no-index "src/$sourceFile" "src-expected/$sourceFile" | cat 51 done 52 touch "$out" 53 ''; 54in 55{ 56 basic = mkTest { 57 name = "basic"; 58 src = ./fixtures/example-project; 59 args = { 60 schemaIdToVariableMapping = { 61 "org.gnome.evolution-data-server.addressbook" = "EDS"; 62 "org.gnome.evolution.calendar" = "EVO"; 63 "org.gnome.seahorse.nautilus.window" = "SEANAUT"; 64 }; 65 }; 66 expected = ./fixtures/example-project-patched; 67 }; 68 69 patches = mkTest { 70 name = "patches"; 71 src = ./fixtures/example-project-wrapped-settings-constructor; 72 patches = [ 73 # Avoid using wrapper function, which the generator cannot handle. 74 ./fixtures/example-project-wrapped-settings-constructor-resolve.patch 75 ]; 76 args = { 77 schemaIdToVariableMapping = { 78 "org.gnome.evolution-data-server.addressbook" = "EDS"; 79 }; 80 }; 81 expected = ./fixtures/example-project-wrapped-settings-constructor-patched; 82 }; 83 84 existsFn = mkTest { 85 name = "exists-fn"; 86 src = ./fixtures/example-project; 87 args = { 88 schemaIdToVariableMapping = { 89 "org.gnome.evolution-data-server.addressbook" = "EDS"; 90 "org.gnome.evolution.calendar" = "EVO"; 91 "org.gnome.seahorse.nautilus.window" = "SEANAUT"; 92 }; 93 schemaExistsFunction = "e_ews_common_utils_gsettings_schema_exists"; 94 }; 95 expected = ./fixtures/example-project-patched-with-exists-fn; 96 }; 97 98}