diff options
Diffstat (limited to 'std/testing')
-rw-r--r-- | std/testing/asserts.ts | 41 | ||||
-rw-r--r-- | std/testing/asserts_test.ts | 32 |
2 files changed, 72 insertions, 1 deletions
diff --git a/std/testing/asserts.ts b/std/testing/asserts.ts index 4b9241e55..fe8b90f63 100644 --- a/std/testing/asserts.ts +++ b/std/testing/asserts.ts @@ -242,10 +242,20 @@ export function assertNotEquals( * assertStrictEquals(1, 2) * ``` */ +export function assertStrictEquals( + actual: unknown, + expected: unknown, + msg?: string, +): void; export function assertStrictEquals<T>( actual: T, expected: T, msg?: string, +): void; +export function assertStrictEquals( + actual: unknown, + expected: unknown, + msg?: string, ): void { if (actual === expected) { return; @@ -286,6 +296,37 @@ export function assertStrictEquals<T>( } /** + * Make an assertion that `actual` and `expected` are not strictly equal. + * If the values are strictly equal then throw. + * ```ts + * assertNotStrictEquals(1, 1) + * ``` + */ +export function assertNotStrictEquals( + actual: unknown, + expected: unknown, + msg?: string, +): void; +export function assertNotStrictEquals<T>( + actual: T, + expected: T, + msg?: string, +): void; +export function assertNotStrictEquals( + actual: unknown, + expected: unknown, + msg?: string, +): void { + if (actual !== expected) { + return; + } + + throw new AssertionError( + msg ?? `Expected "actual" to be strictly unequal to: ${_format(actual)}\n`, + ); +} + +/** * Make an assertion that actual contains expected. If not * then thrown. */ diff --git a/std/testing/asserts_test.ts b/std/testing/asserts_test.ts index 7ea73b5c0..65645b06b 100644 --- a/std/testing/asserts_test.ts +++ b/std/testing/asserts_test.ts @@ -8,6 +8,7 @@ import { assertMatch, assertEquals, assertStrictEquals, + assertNotStrictEquals, assertThrows, assertThrowsAsync, AssertionError, @@ -463,13 +464,42 @@ Deno.test({ }); Deno.test({ - name: "assert* functions with specified type paratemeter", + name: "strictly unequal pass case", + fn(): void { + assertNotStrictEquals(true, false); + assertNotStrictEquals(10, 11); + assertNotStrictEquals("abc", "xyz"); + assertNotStrictEquals(1, "1"); + + const xs = [1, false, "foo"]; + const ys = [1, true, "bar"]; + assertNotStrictEquals(xs, ys); + + const x = { a: 1 }; + const y = { a: 2 }; + assertNotStrictEquals(x, y); + }, +}); + +Deno.test({ + name: "strictly unequal fail case", + fn(): void { + assertThrows( + () => assertNotStrictEquals(1, 1), + AssertionError, + ); + }, +}); + +Deno.test({ + name: "assert* functions with specified type parameter", fn(): void { assertEquals<string>("hello", "hello"); assertNotEquals<number>(1, 2); assertArrayContains<boolean>([true, false], [true]); const value = { x: 1 }; assertStrictEquals<typeof value>(value, value); + assertNotStrictEquals<object>(value, { x: 1 }); }, }); |