1# NOTE: Tests related to sortArray go here. 2{ 3 lib, 4 sortArray, 5 testers, 6}: 7let 8 inherit (lib.attrsets) recurseIntoAttrs; 9 inherit (testers) shellcheck shfmt testEqualArrayOrMap; 10 check = 11 { 12 name, 13 valuesArray, 14 expectedArray, 15 }: 16 (testEqualArrayOrMap { 17 inherit name valuesArray expectedArray; 18 script = '' 19 set -eu 20 nixLog "running sortArray with valuesArray to populate actualArray" 21 sortArray valuesArray actualArray 22 ''; 23 }).overrideAttrs 24 (prevAttrs: { 25 nativeBuildInputs = prevAttrs.nativeBuildInputs or [ ] ++ [ sortArray ]; 26 }); 27 28 checkInPlace = 29 { 30 name, 31 valuesArray, 32 expectedArray, 33 }: 34 (testEqualArrayOrMap { 35 inherit name valuesArray expectedArray; 36 script = '' 37 set -eu 38 nixLog "running sortArray with valuesArray as input and output" 39 sortArray valuesArray valuesArray 40 nixLog "copying valuesArray to actualArray" 41 actualArray=("''${valuesArray[@]}") 42 ''; 43 }).overrideAttrs 44 (prevAttrs: { 45 nativeBuildInputs = prevAttrs.nativeBuildInputs or [ ] ++ [ sortArray ]; 46 }); 47in 48recurseIntoAttrs { 49 shellcheck = shellcheck { 50 name = "sortArray"; 51 src = ./sortArray.bash; 52 }; 53 54 shfmt = shfmt { 55 name = "sortArray"; 56 src = ./sortArray.bash; 57 }; 58 59 empty = check { 60 name = "empty"; 61 valuesArray = [ ]; 62 expectedArray = [ ]; 63 }; 64 65 singleton = check { 66 name = "singleton"; 67 valuesArray = [ "apple" ]; 68 expectedArray = [ "apple" ]; 69 }; 70 71 oneDuplicate = check { 72 name = "oneDuplicate"; 73 valuesArray = [ 74 "apple" 75 "apple" 76 ]; 77 expectedArray = [ 78 "apple" 79 "apple" 80 ]; 81 }; 82 83 oneUnique = check { 84 name = "oneUnique"; 85 valuesArray = [ 86 "bee" 87 "apple" 88 "bee" 89 ]; 90 expectedArray = [ 91 "apple" 92 "bee" 93 "bee" 94 ]; 95 }; 96 97 duplicatesWithSpacesAndLineBreaks = check { 98 name = "duplicatesWithSpacesAndLineBreaks"; 99 valuesArray = [ 100 "dog" 101 "bee" 102 '' 103 line 104 break 105 '' 106 "cat" 107 "zebra" 108 "bee" 109 "cat" 110 "elephant" 111 "dog with spaces" 112 '' 113 line 114 break 115 '' 116 ]; 117 expectedArray = [ 118 "bee" 119 "bee" 120 "cat" 121 "cat" 122 "dog" 123 "dog with spaces" 124 "elephant" 125 # NOTE: lead whitespace is removed, so the following entries start with `l`. 126 '' 127 line 128 break 129 '' 130 '' 131 line 132 break 133 '' 134 "zebra" 135 ]; 136 }; 137 138 duplicatesWithSpacesAndLineBreaksInPlace = checkInPlace { 139 name = "duplicatesWithSpacesAndLineBreaksInPlace"; 140 valuesArray = [ 141 "dog" 142 "bee" 143 '' 144 line 145 break 146 '' 147 "cat" 148 "zebra" 149 "bee" 150 "cat" 151 "elephant" 152 "dog with spaces" 153 '' 154 line 155 break 156 '' 157 ]; 158 expectedArray = [ 159 "bee" 160 "bee" 161 "cat" 162 "cat" 163 "dog" 164 "dog with spaces" 165 "elephant" 166 # NOTE: lead whitespace is removed, so the following entries start with `l`. 167 '' 168 line 169 break 170 '' 171 '' 172 line 173 break 174 '' 175 "zebra" 176 ]; 177 }; 178}