1# NOTE: Tests related to getSortedMapKeys go here.
2{
3 getSortedMapKeys,
4 lib,
5 testers,
6}:
7let
8 inherit (lib.attrsets) recurseIntoAttrs;
9 inherit (testers) shellcheck shfmt testEqualArrayOrMap;
10
11 check =
12 {
13 name,
14 valuesMap,
15 expectedArray,
16 }:
17 (testEqualArrayOrMap {
18 inherit name valuesMap expectedArray;
19 script = ''
20 set -eu
21 nixLog "running getSortedMapKeys with valuesMap to populate actualArray"
22 getSortedMapKeys valuesMap actualArray
23 '';
24 }).overrideAttrs
25 (prevAttrs: {
26 nativeBuildInputs = prevAttrs.nativeBuildInputs or [ ] ++ [ getSortedMapKeys ];
27 });
28in
29recurseIntoAttrs {
30 shellcheck = shellcheck {
31 name = "getSortedMapKeys";
32 src = ./getSortedMapKeys.bash;
33 };
34
35 shfmt = shfmt {
36 name = "getSortedMapKeys";
37 src = ./getSortedMapKeys.bash;
38 };
39
40 empty = check {
41 name = "empty";
42 valuesMap = { };
43 expectedArray = [ ];
44 };
45
46 singleton = check {
47 name = "singleton";
48 valuesMap = {
49 "apple" = "fruit";
50 };
51 expectedArray = [ "apple" ];
52 };
53
54 keysAreSorted = check {
55 name = "keysAreSorted";
56 valuesMap = {
57 "apple" = "fruit";
58 "bee" = "insect";
59 "carrot" = "vegetable";
60 };
61 expectedArray = [
62 "apple"
63 "bee"
64 "carrot"
65 ];
66 };
67
68 # NOTE: While keys can be whitespace, they cannot be null (empty).
69 keysCanBeWhitespace = check {
70 name = "keysCanBeWhitespace";
71 valuesMap = {
72 " " = 1;
73 " " = 2;
74 };
75 expectedArray = [
76 " "
77 " "
78 ];
79 };
80}