summaryrefslogtreecommitdiff
path: root/pkgs/build-support/setup-hooks/arrayUtilities/getSortedMapKeys/tests.nix
blob: 3808f6e60cecaef4663f17b0520dab5183fd2f37 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# NOTE: Tests related to getSortedMapKeys go here.
{
  getSortedMapKeys,
  lib,
  testers,
}:
let
  inherit (lib.attrsets) recurseIntoAttrs;
  inherit (testers) shellcheck shfmt testEqualArrayOrMap;

  check =
    {
      name,
      valuesMap,
      expectedArray,
    }:
    (testEqualArrayOrMap {
      inherit name valuesMap expectedArray;
      script = ''
        set -eu
        nixLog "running getSortedMapKeys with valuesMap to populate actualArray"
        getSortedMapKeys valuesMap actualArray
      '';
    }).overrideAttrs
      (prevAttrs: {
        nativeBuildInputs = prevAttrs.nativeBuildInputs or [ ] ++ [ getSortedMapKeys ];
      });
in
recurseIntoAttrs {
  shellcheck = shellcheck {
    name = "getSortedMapKeys";
    src = ./getSortedMapKeys.bash;
  };

  shfmt = shfmt {
    name = "getSortedMapKeys";
    src = ./getSortedMapKeys.bash;
  };

  empty = check {
    name = "empty";
    valuesMap = { };
    expectedArray = [ ];
  };

  singleton = check {
    name = "singleton";
    valuesMap = {
      "apple" = "fruit";
    };
    expectedArray = [ "apple" ];
  };

  keysAreSorted = check {
    name = "keysAreSorted";
    valuesMap = {
      "apple" = "fruit";
      "bee" = "insect";
      "carrot" = "vegetable";
    };
    expectedArray = [
      "apple"
      "bee"
      "carrot"
    ];
  };

  # NOTE: While keys can be whitespace, they cannot be null (empty).
  keysCanBeWhitespace = check {
    name = "keysCanBeWhitespace";
    valuesMap = {
      " " = 1;
      "  " = 2;
    };
    expectedArray = [
      " "
      "  "
    ];
  };
}