summaryrefslogtreecommitdiff
path: root/std/testing/asserts_test.ts
diff options
context:
space:
mode:
Diffstat (limited to 'std/testing/asserts_test.ts')
-rw-r--r--std/testing/asserts_test.ts253
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")
+ );
+ }
+});