From 03e3ab625ec4327f9fd313ccc5b7683dc8f5f971 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Schwarzkopf=20Bal=C3=A1zs?= Date: Thu, 20 Aug 2020 17:56:31 +0200 Subject: [PATCH] fix(std/node): misnamed assert exports (denoland/deno#7123) --- node/assert.ts | 13 +++++++-- node/assert_test.ts | 65 +++++++++++++++++++++++++++++++++++++++++ testing/asserts.ts | 41 ++++++++++++++++++++++++++ testing/asserts_test.ts | 32 +++++++++++++++++++- 4 files changed, 147 insertions(+), 4 deletions(-) create mode 100644 node/assert_test.ts diff --git a/node/assert.ts b/node/assert.ts index 97721211f3e43..3d738cbbf3010 100644 --- a/node/assert.ts +++ b/node/assert.ts @@ -2,14 +2,21 @@ import { assertEquals, assertNotEquals, assertStrictEquals, + assertNotStrictEquals, assertMatch, assertThrows, } from "../testing/asserts.ts"; -export { assert, fail } from "../testing/asserts.ts"; +export { + assert as default, + assert as ok, + assert, + fail, +} from "../testing/asserts.ts"; -export const equal = assertEquals; -export const notEqual = assertNotEquals; +export const deepStrictEqual = assertEquals; +export const notDeepStrictEqual = assertNotEquals; export const strictEqual = assertStrictEquals; +export const notStrictEqual = assertNotStrictEquals; export const match = assertMatch; export const throws = assertThrows; diff --git a/node/assert_test.ts b/node/assert_test.ts new file mode 100644 index 0000000000000..8df13187bbd55 --- /dev/null +++ b/node/assert_test.ts @@ -0,0 +1,65 @@ +import { + assert as denoAssert, + assertEquals, + assertNotEquals, + assertStrictEquals, + assertNotStrictEquals, + assertMatch, + assertThrows, + fail as denoFail, +} from "../testing/asserts.ts"; + +import assert from "./assert.ts"; + +import { + ok, + assert as assert_, + deepStrictEqual, + notDeepStrictEqual, + strictEqual, + notStrictEqual, + match, + throws, + fail, +} from "./assert.ts"; + +Deno.test("API should be exposed", () => { + assertStrictEquals( + assert_, + assert, + "`assert()` should be the default export", + ); + assertStrictEquals(assert_, denoAssert, "`assert()` should be exposed"); + assertStrictEquals(assert_, ok, "`assert()` should be an alias of `ok()`"); + assertStrictEquals( + assertEquals, + deepStrictEqual, + "`assertEquals()` should be exposed as `deepStrictEqual()`", + ); + assertStrictEquals( + assertNotEquals, + notDeepStrictEqual, + "`assertNotEquals()` should be exposed as `notDeepStrictEqual()`", + ); + assertStrictEquals( + assertStrictEquals, + strictEqual, + "`assertStrictEquals()` should be exposed as `strictEqual()`", + ); + assertStrictEquals( + assertNotStrictEquals, + notStrictEqual, + "`assertNotStrictEquals()` should be exposed as `notStrictEqual()`", + ); + assertStrictEquals( + assertMatch, + match, + "`assertMatch()` should be exposed as `match()`", + ); + assertStrictEquals( + assertThrows, + throws, + "`assertThrows()` should be exposed as `throws()`", + ); + assertStrictEquals(fail, denoFail, "`fail()` should be exposed"); +}); diff --git a/testing/asserts.ts b/testing/asserts.ts index 4b9241e55cfb2..fe8b90f63243f 100644 --- a/testing/asserts.ts +++ b/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( actual: T, expected: T, msg?: string, +): void; +export function assertStrictEquals( + actual: unknown, + expected: unknown, + msg?: string, ): void { if (actual === expected) { return; @@ -285,6 +295,37 @@ export function assertStrictEquals( throw new AssertionError(message); } +/** + * 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( + 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/testing/asserts_test.ts b/testing/asserts_test.ts index 7ea73b5c0493f..65645b06bcea0 100644 --- a/testing/asserts_test.ts +++ b/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("hello", "hello"); assertNotEquals(1, 2); assertArrayContains([true, false], [true]); const value = { x: 1 }; assertStrictEquals(value, value); + assertNotStrictEquals(value, { x: 1 }); }, });