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}