1# shellcheck shell=bash
2
3set -eu
4
5# NOTE: If neither expectedArray nor expectedMap are declared, the test is meaningless.
6# This precondition is checked in the Nix expression through an assert.
7
8preScript() {
9 if isDeclaredArray valuesArray; then
10 # shellcheck disable=SC2154
11 nixLog "using valuesArray: $(declare -p valuesArray)"
12 fi
13
14 if isDeclaredMap valuesMap; then
15 # shellcheck disable=SC2154
16 nixLog "using valuesMap: $(declare -p valuesMap)"
17 fi
18
19 if isDeclaredArray expectedArray; then
20 # shellcheck disable=SC2154
21 nixLog "using expectedArray: $(declare -p expectedArray)"
22 declare -ag actualArray=()
23 fi
24
25 if isDeclaredMap expectedMap; then
26 # shellcheck disable=SC2154
27 nixLog "using expectedMap: $(declare -p expectedMap)"
28 declare -Ag actualMap=()
29 fi
30
31 return 0
32}
33
34scriptPhase() {
35 runHook preScript
36
37 runHook script
38
39 runHook postScript
40}
41
42postScript() {
43 if isDeclaredArray expectedArray; then
44 nixLog "using actualArray: $(declare -p actualArray)"
45 nixLog "comparing actualArray against expectedArray"
46 assertEqualArray expectedArray actualArray
47 nixLog "actualArray matches expectedArray"
48 fi
49
50 if isDeclaredMap expectedMap; then
51 nixLog "using actualMap: $(declare -p actualMap)"
52 nixLog "comparing actualMap against expectedMap"
53 assertEqualMap expectedMap actualMap
54 nixLog "actualMap matches expectedMap"
55 fi
56
57 return 0
58}
59
60runHook scriptPhase
61touch "${out:?}"