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}