diff options
Diffstat (limited to 'std/testing/asserts_test.ts')
-rw-r--r-- | std/testing/asserts_test.ts | 253 |
1 files changed, 253 insertions, 0 deletions
diff --git a/std/testing/asserts_test.ts b/std/testing/asserts_test.ts new file mode 100644 index 000000000..b480fe7c9 --- /dev/null +++ b/std/testing/asserts_test.ts @@ -0,0 +1,253 @@ +// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. + +import { + assert, + assertNotEquals, + assertStrContains, + assertArrayContains, + assertMatch, + assertEquals, + assertThrows, + AssertionError, + equal, + fail, + unimplemented, + unreachable +} from "./asserts.ts"; +import { test } from "./mod.ts"; +import { red, green, white, gray, bold } from "../fmt/colors.ts"; + +test(function testingEqual(): void { + assert(equal("world", "world")); + assert(!equal("hello", "world")); + assert(equal(5, 5)); + assert(!equal(5, 6)); + assert(equal(NaN, NaN)); + assert(equal({ hello: "world" }, { hello: "world" })); + assert(!equal({ world: "hello" }, { hello: "world" })); + assert( + equal( + { hello: "world", hi: { there: "everyone" } }, + { hello: "world", hi: { there: "everyone" } } + ) + ); + assert( + !equal( + { hello: "world", hi: { there: "everyone" } }, + { hello: "world", hi: { there: "everyone else" } } + ) + ); + assert(equal(/deno/, /deno/)); + assert(!equal(/deno/, /node/)); + assert(equal(new Date(2019, 0, 3), new Date(2019, 0, 3))); + assert(!equal(new Date(2019, 0, 3), new Date(2019, 1, 3))); + assert(equal(new Set([1]), new Set([1]))); + assert(!equal(new Set([1]), new Set([2]))); + assert(equal(new Set([1, 2, 3]), new Set([3, 2, 1]))); + assert(!equal(new Set([1, 2]), new Set([3, 2, 1]))); + assert(!equal(new Set([1, 2, 3]), new Set([4, 5, 6]))); + assert(equal(new Set("denosaurus"), new Set("denosaurussss"))); +}); + +test(function testingNotEquals(): void { + const a = { foo: "bar" }; + const b = { bar: "foo" }; + assertNotEquals(a, b); + assertNotEquals("Denosaurus", "Tyrannosaurus"); + let didThrow; + try { + assertNotEquals("Raptor", "Raptor"); + didThrow = false; + } catch (e) { + assert(e instanceof AssertionError); + didThrow = true; + } + assertEquals(didThrow, true); +}); + +test(function testingAssertStringContains(): void { + assertStrContains("Denosaurus", "saur"); + assertStrContains("Denosaurus", "Deno"); + assertStrContains("Denosaurus", "rus"); + let didThrow; + try { + assertStrContains("Denosaurus", "Raptor"); + didThrow = false; + } catch (e) { + assert(e instanceof AssertionError); + didThrow = true; + } + assertEquals(didThrow, true); +}); + +test(function testingArrayContains(): void { + const fixture = ["deno", "iz", "luv"]; + const fixtureObject = [{ deno: "luv" }, { deno: "Js" }]; + assertArrayContains(fixture, ["deno"]); + assertArrayContains(fixtureObject, [{ deno: "luv" }]); + let didThrow; + try { + assertArrayContains(fixtureObject, [{ deno: "node" }]); + didThrow = false; + } catch (e) { + assert(e instanceof AssertionError); + didThrow = true; + } + assertEquals(didThrow, true); +}); + +test(function testingAssertStringContainsThrow(): void { + let didThrow = false; + try { + assertStrContains("Denosaurus from Jurassic", "Raptor"); + } catch (e) { + assert( + e.message === + `actual: "Denosaurus from Jurassic" expected to contains: "Raptor"` + ); + assert(e instanceof AssertionError); + didThrow = true; + } + assert(didThrow); +}); + +test(function testingAssertStringMatching(): void { + assertMatch("foobar@deno.com", RegExp(/[a-zA-Z]+@[a-zA-Z]+.com/)); +}); + +test(function testingAssertStringMatchingThrows(): void { + let didThrow = false; + try { + assertMatch("Denosaurus from Jurassic", RegExp(/Raptor/)); + } catch (e) { + assert( + e.message === + `actual: "Denosaurus from Jurassic" expected to match: "/Raptor/"` + ); + assert(e instanceof AssertionError); + didThrow = true; + } + assert(didThrow); +}); + +test(function testingAssertsUnimplemented(): void { + let didThrow = false; + try { + unimplemented(); + } catch (e) { + assert(e.message === "unimplemented"); + assert(e instanceof AssertionError); + didThrow = true; + } + assert(didThrow); +}); + +test(function testingAssertsUnreachable(): void { + let didThrow = false; + try { + unreachable(); + } catch (e) { + assert(e.message === "unreachable"); + assert(e instanceof AssertionError); + didThrow = true; + } + assert(didThrow); +}); + +test(function testingAssertFail(): void { + assertThrows(fail, AssertionError, "Failed assertion."); + assertThrows( + (): void => { + fail("foo"); + }, + AssertionError, + "Failed assertion: foo" + ); +}); + +const createHeader = (): string[] => [ + "", + "", + ` ${gray(bold("[Diff]"))} ${red(bold("Left"))} / ${green(bold("Right"))}`, + "", + "" +]; + +const added: (s: string) => string = (s: string): string => green(bold(s)); +const removed: (s: string) => string = (s: string): string => red(bold(s)); + +test({ + name: "pass case", + fn(): void { + assertEquals({ a: 10 }, { a: 10 }); + assertEquals(true, true); + assertEquals(10, 10); + assertEquals("abc", "abc"); + assertEquals({ a: 10, b: { c: "1" } }, { a: 10, b: { c: "1" } }); + } +}); + +test({ + name: "failed with number", + fn(): void { + assertThrows( + (): void => assertEquals(1, 2), + AssertionError, + [...createHeader(), removed(`- 1`), added(`+ 2`), ""].join("\n") + ); + } +}); + +test({ + name: "failed with number vs string", + fn(): void { + assertThrows( + (): void => assertEquals(1, "1"), + AssertionError, + [...createHeader(), removed(`- 1`), added(`+ "1"`)].join("\n") + ); + } +}); + +test({ + name: "failed with array", + fn(): void { + assertThrows( + (): void => assertEquals([1, "2", 3], ["1", "2", 3]), + AssertionError, + [ + ...createHeader(), + white(" Array ["), + removed(`- 1,`), + added(`+ "1",`), + white(' "2",'), + white(" 3,"), + white(" ]"), + "" + ].join("\n") + ); + } +}); + +test({ + name: "failed with object", + fn(): void { + assertThrows( + (): void => assertEquals({ a: 1, b: "2", c: 3 }, { a: 1, b: 2, c: [3] }), + AssertionError, + [ + ...createHeader(), + white(" Object {"), + white(` "a": 1,`), + added(`+ "b": 2,`), + added(`+ "c": Array [`), + added(`+ 3,`), + added(`+ ],`), + removed(`- "b": "2",`), + removed(`- "c": 3,`), + white(" }"), + "" + ].join("\n") + ); + } +}); |