|
3 | 3 | ensure,
|
4 | 4 | ensureArray,
|
5 | 5 | ensureFunction,
|
| 6 | + ensureLike, |
6 | 7 | ensureNone,
|
7 | 8 | ensureNull,
|
8 | 9 | ensureNumber,
|
@@ -141,3 +142,125 @@ Deno.test("ensureNone throws error on non null nor undefined", () => {
|
141 | 142 | assertThrows(() => ensureNone({}));
|
142 | 143 | assertThrows(() => ensureNone(function () {}));
|
143 | 144 | });
|
| 145 | + |
| 146 | +Deno.test("ensureLike does it's job on string", () => { |
| 147 | + const ref = ""; |
| 148 | + ensureLike(ref, "Hello"); |
| 149 | + |
| 150 | + assertThrows(() => ensureLike(ref, 0)); |
| 151 | + assertThrows(() => ensureLike(ref, [])); |
| 152 | + assertThrows(() => ensureLike(ref, {})); |
| 153 | + assertThrows(() => ensureLike(ref, function () {})); |
| 154 | + assertThrows(() => ensureLike(ref, undefined)); |
| 155 | + assertThrows(() => ensureLike(ref, null)); |
| 156 | +}); |
| 157 | +Deno.test("ensureLike does it's job on number", () => { |
| 158 | + const ref = 0; |
| 159 | + ensureLike(ref, 0); |
| 160 | + ensureLike(ref, 1); |
| 161 | + ensureLike(ref, 0.1); |
| 162 | + |
| 163 | + assertThrows(() => ensureLike(ref, "a")); |
| 164 | + assertThrows(() => ensureLike(ref, [])); |
| 165 | + assertThrows(() => ensureLike(ref, {})); |
| 166 | + assertThrows(() => ensureLike(ref, function () {})); |
| 167 | + assertThrows(() => ensureLike(ref, undefined)); |
| 168 | + assertThrows(() => ensureLike(ref, null)); |
| 169 | +}); |
| 170 | +Deno.test("ensureLike does it's job on array", () => { |
| 171 | + const ref: unknown[] = []; |
| 172 | + ensureLike(ref, []); |
| 173 | + ensureLike(ref, [0, 1, 2]); |
| 174 | + ensureLike(ref, ["a", "b", "c"]); |
| 175 | + |
| 176 | + assertThrows(() => ensureLike(ref, "a")); |
| 177 | + assertThrows(() => ensureLike(ref, 0)); |
| 178 | + assertThrows(() => ensureLike(ref, {})); |
| 179 | + assertThrows(() => ensureLike(ref, function () {})); |
| 180 | + assertThrows(() => ensureLike(ref, undefined)); |
| 181 | + assertThrows(() => ensureLike(ref, null)); |
| 182 | +}); |
| 183 | +Deno.test("ensureLike does it's job on T array", () => { |
| 184 | + const ref: unknown[] = []; |
| 185 | + ensureLike(ref, [0, 1, 2], isNumber); |
| 186 | + ensureLike(ref, ["a", "b", "c"], isString); |
| 187 | + |
| 188 | + assertThrows(() => ensureLike(ref, [0, 1, 2], isString)); |
| 189 | + assertThrows(() => ensureLike(ref, ["a", "b", "c"], isNumber)); |
| 190 | +}); |
| 191 | +Deno.test("ensureLike does it's job on tuple", () => { |
| 192 | + const ref = ["", 0, ""]; |
| 193 | + ensureLike(ref, ["", 0, ""]); |
| 194 | + ensureLike(ref, ["Hello", 100, "World"]); |
| 195 | + |
| 196 | + assertThrows(() => ensureLike(ref, ["Hello", 100, "World", "foo"])); |
| 197 | + assertThrows(() => ensureLike(ref, [0, 0, 0])); |
| 198 | + assertThrows(() => ensureLike(ref, ["", "", ""])); |
| 199 | + assertThrows(() => ensureLike(ref, [0, "", 0])); |
| 200 | +}); |
| 201 | +Deno.test("ensureLike does it's job on object", () => { |
| 202 | + const ref = {}; |
| 203 | + ensureLike(ref, {}); |
| 204 | + ensureLike(ref, { a: 0 }); |
| 205 | + ensureLike(ref, { a: "a" }); |
| 206 | + |
| 207 | + assertThrows(() => ensureLike(ref, "a")); |
| 208 | + assertThrows(() => ensureLike(ref, 0)); |
| 209 | + assertThrows(() => ensureLike(ref, [])); |
| 210 | + assertThrows(() => ensureLike(ref, function () {})); |
| 211 | + assertThrows(() => ensureLike(ref, undefined)); |
| 212 | + assertThrows(() => ensureLike(ref, null)); |
| 213 | +}); |
| 214 | +Deno.test("ensureLike does it's job on T object", () => { |
| 215 | + const ref = {}; |
| 216 | + ensureLike(ref, { a: 0 }, isNumber); |
| 217 | + ensureLike(ref, { a: "a" }, isString); |
| 218 | + |
| 219 | + assertThrows(() => ensureLike(ref, { a: 0 }, isString)); |
| 220 | + assertThrows(() => ensureLike(ref, { a: "a" }, isNumber)); |
| 221 | +}); |
| 222 | +Deno.test("ensureLike does it's job on struct", () => { |
| 223 | + const ref = { foo: "", bar: 0 }; |
| 224 | + ensureLike(ref, { foo: "", bar: 0 }); |
| 225 | + ensureLike(ref, { foo: "", bar: 0, hoge: "" }); |
| 226 | + |
| 227 | + assertThrows(() => ensureLike(ref, {})); |
| 228 | + assertThrows(() => ensureLike(ref, { foo: "" })); |
| 229 | + assertThrows(() => ensureLike(ref, { bar: 0 })); |
| 230 | +}); |
| 231 | +Deno.test("ensureLike does it's job on function", () => { |
| 232 | + const ref = () => {}; |
| 233 | + ensureLike(ref, ensureFunction); |
| 234 | + ensureLike(ref, function () {}); |
| 235 | + ensureLike(ref, () => {}); |
| 236 | + ensureLike(ref, setTimeout); |
| 237 | + |
| 238 | + assertThrows(() => ensureLike(ref, "a")); |
| 239 | + assertThrows(() => ensureLike(ref, 0)); |
| 240 | + assertThrows(() => ensureLike(ref, [])); |
| 241 | + assertThrows(() => ensureLike(ref, {})); |
| 242 | + assertThrows(() => ensureLike(ref, undefined)); |
| 243 | + assertThrows(() => ensureLike(ref, null)); |
| 244 | +}); |
| 245 | +Deno.test("ensureLike does it's job on null", () => { |
| 246 | + const ref = null; |
| 247 | + ensureLike(ref, null); |
| 248 | + |
| 249 | + assertThrows(() => ensureLike(ref, "a")); |
| 250 | + assertThrows(() => ensureLike(ref, 0)); |
| 251 | + assertThrows(() => ensureLike(ref, [])); |
| 252 | + assertThrows(() => ensureLike(ref, {})); |
| 253 | + assertThrows(() => ensureLike(ref, function () {})); |
| 254 | + assertThrows(() => ensureLike(ref, undefined)); |
| 255 | +}); |
| 256 | +Deno.test("ensureLike does it's job on undefined", () => { |
| 257 | + const ref = undefined; |
| 258 | + ensureLike(ref, undefined); |
| 259 | + |
| 260 | + assertThrows(() => ensureLike(ref, "a")); |
| 261 | + assertThrows(() => ensureLike(ref, 0)); |
| 262 | + assertThrows(() => ensureLike(ref, [])); |
| 263 | + assertThrows(() => ensureLike(ref, {})); |
| 264 | + assertThrows(() => ensureLike(ref, function () {})); |
| 265 | + assertThrows(() => ensureLike(ref, null)); |
| 266 | +}); |
0 commit comments