summaryrefslogtreecommitdiff
path: root/js/console_test.ts
diff options
context:
space:
mode:
authorKevin (Kun) "Kassimo" Qian <kevinkassimo@gmail.com>2019-02-25 16:11:54 -0800
committerRyan Dahl <ry@tinyclouds.org>2019-02-25 19:11:54 -0500
commitc66d043ac6318da99c2aa6f4a6a11db3a33f1c99 (patch)
tree868f0e173a9bd0420d8033f4567c177be60fc041 /js/console_test.ts
parentce5d5c51331b49f2dd381737a8340433746276af (diff)
Fix console.table display of Map and move tests to unit test (#1839)
Diffstat (limited to 'js/console_test.ts')
-rw-r--r--js/console_test.ts279
1 files changed, 278 insertions, 1 deletions
diff --git a/js/console_test.ts b/js/console_test.ts
index d61c87307..85ec16de8 100644
--- a/js/console_test.ts
+++ b/js/console_test.ts
@@ -4,7 +4,15 @@ import { test, assertEqual, assert } from "./test_util.ts";
// Some of these APIs aren't exposed in the types and so we have to cast to any
// in order to "trick" TypeScript.
// tslint:disable-next-line:no-any
-const { Console, libdeno, stringifyArgs, inspect, write, stdout } = Deno as any;
+const {
+ Console,
+ libdeno,
+ stringifyArgs,
+ inspect,
+ readAll,
+ write,
+ stdout
+} = Deno as any;
const console = new Console(libdeno.print);
@@ -310,3 +318,272 @@ test(function consoleDetachedLog() {
consoleGroupEnd();
consoleClear();
});
+
+class StringBuffer {
+ chunks: string[] = [];
+ add(x: string) {
+ this.chunks.push(x);
+ }
+ toString() {
+ return this.chunks.join("");
+ }
+}
+
+type ConsoleExamineFunc = (
+ csl: any, // tslint:disable-line:no-any
+ out: StringBuffer,
+ err?: StringBuffer,
+ both?: StringBuffer
+) => void;
+
+function mockConsole(f: ConsoleExamineFunc) {
+ const out = new StringBuffer();
+ const err = new StringBuffer();
+ const both = new StringBuffer();
+ const csl = new Console(
+ (x: string, isErr: boolean, printsNewLine: boolean) => {
+ const content = x + (printsNewLine ? "\n" : "");
+ const buf = isErr ? err : out;
+ buf.add(content);
+ both.add(content);
+ }
+ );
+ f(csl, out, err, both);
+}
+
+// console.group test
+test(function consoleGroup() {
+ mockConsole((console, out) => {
+ console.group("1");
+ console.log("2");
+ console.group("3");
+ console.log("4");
+ console.groupEnd();
+ console.groupEnd();
+
+ console.groupCollapsed("5");
+ console.log("6");
+ console.group("7");
+ console.log("8");
+ console.groupEnd();
+ console.groupEnd();
+ console.log("9");
+ console.log("10");
+
+ assertEqual(
+ out.toString(),
+ `1
+ 2
+ 3
+ 4
+5678
+9
+10
+`
+ );
+ });
+});
+
+// console.group with console.warn test
+test(function consoleGroupWarn() {
+ mockConsole((console, _out, _err, both) => {
+ console.warn("1");
+ console.group();
+ console.warn("2");
+ console.group();
+ console.warn("3");
+ console.groupEnd();
+ console.warn("4");
+ console.groupEnd();
+ console.warn("5");
+
+ console.groupCollapsed();
+ console.warn("6");
+ console.group();
+ console.warn("7");
+ console.groupEnd();
+ console.warn("8");
+ console.groupEnd();
+
+ console.warn("9");
+ console.warn("10");
+ assertEqual(
+ both.toString(),
+ `1
+ 2
+ 3
+ 4
+5
+678
+9
+10
+`
+ );
+ });
+});
+
+// console.table test
+test(function consoleTable() {
+ mockConsole((console, out) => {
+ console.table({ a: "test", b: 1 });
+ assertEqual(
+ out.toString(),
+ `┌─────────┬────────┐
+│ (index) │ Values │
+├─────────┼────────┤
+│ a │ "test" │
+│ b │ 1 │
+└─────────┴────────┘
+`
+ );
+ });
+ mockConsole((console, out) => {
+ console.table({ a: { b: 10 }, b: { b: 20, c: 30 } }, ["c"]);
+ assertEqual(
+ out.toString(),
+ `┌─────────┬────┐
+│ (index) │ c │
+├─────────┼────┤
+│ a │ │
+│ b │ 30 │
+└─────────┴────┘
+`
+ );
+ });
+ mockConsole((console, out) => {
+ console.table([1, 2, [3, [4]], [5, 6], [[7], [8]]]);
+ assertEqual(
+ out.toString(),
+ `┌─────────┬───────┬───────┬────────┐
+│ (index) │ 0 │ 1 │ Values │
+├─────────┼───────┼───────┼────────┤
+│ 0 │ │ │ 1 │
+│ 1 │ │ │ 2 │
+│ 2 │ 3 │ [ 4 ] │ │
+│ 3 │ 5 │ 6 │ │
+│ 4 │ [ 7 ] │ [ 8 ] │ │
+└─────────┴───────┴───────┴────────┘
+`
+ );
+ });
+ mockConsole((console, out) => {
+ console.table(new Set([1, 2, 3, "test"]));
+ assertEqual(
+ out.toString(),
+ `┌───────────────────┬────────┐
+│ (iteration index) │ Values │
+├───────────────────┼────────┤
+│ 0 │ 1 │
+│ 1 │ 2 │
+│ 2 │ 3 │
+│ 3 │ "test" │
+└───────────────────┴────────┘
+`
+ );
+ });
+ mockConsole((console, out) => {
+ console.table(new Map([[1, "one"], [2, "two"]]));
+ assertEqual(
+ out.toString(),
+ `┌───────────────────┬─────┬────────┐
+│ (iteration index) │ Key │ Values │
+├───────────────────┼─────┼────────┤
+│ 0 │ 1 │ "one" │
+│ 1 │ 2 │ "two" │
+└───────────────────┴─────┴────────┘
+`
+ );
+ });
+ mockConsole((console, out) => {
+ console.table({
+ a: true,
+ b: { c: { d: 10 }, e: [1, 2, [5, 6]] },
+ f: "test",
+ g: new Set([1, 2, 3, "test"]),
+ h: new Map([[1, "one"]])
+ });
+ assertEqual(
+ out.toString(),
+ `┌─────────┬───────────┬───────────────────┬────────┐
+│ (index) │ c │ e │ Values │
+├─────────┼───────────┼───────────────────┼────────┤
+│ a │ │ │ true │
+│ b │ { d: 10 } │ [ 1, 2, [Array] ] │ │
+│ f │ │ │ "test" │
+│ g │ │ │ │
+│ h │ │ │ │
+└─────────┴───────────┴───────────────────┴────────┘
+`
+ );
+ });
+ mockConsole((console, out) => {
+ console.table([
+ 1,
+ "test",
+ false,
+ { a: 10 },
+ ["test", { b: 20, c: "test" }]
+ ]);
+ assertEqual(
+ out.toString(),
+ `┌─────────┬────────┬──────────────────────┬────┬────────┐
+│ (index) │ 0 │ 1 │ a │ Values │
+├─────────┼────────┼──────────────────────┼────┼────────┤
+│ 0 │ │ │ │ 1 │
+│ 1 │ │ │ │ "test" │
+│ 2 │ │ │ │ false │
+│ 3 │ │ │ 10 │ │
+│ 4 │ "test" │ { b: 20, c: "test" } │ │ │
+└─────────┴────────┴──────────────────────┴────┴────────┘
+`
+ );
+ });
+ mockConsole((console, out) => {
+ console.table([]);
+ assertEqual(
+ out.toString(),
+ `┌─────────┐
+│ (index) │
+├─────────┤
+└─────────┘
+`
+ );
+ });
+ mockConsole((console, out) => {
+ console.table({});
+ assertEqual(
+ out.toString(),
+ `┌─────────┐
+│ (index) │
+├─────────┤
+└─────────┘
+`
+ );
+ });
+ mockConsole((console, out) => {
+ console.table(new Set());
+ assertEqual(
+ out.toString(),
+ `┌───────────────────┐
+│ (iteration index) │
+├───────────────────┤
+└───────────────────┘
+`
+ );
+ });
+ mockConsole((console, out) => {
+ console.table(new Map());
+ assertEqual(
+ out.toString(),
+ `┌───────────────────┐
+│ (iteration index) │
+├───────────────────┤
+└───────────────────┘
+`
+ );
+ });
+ mockConsole((console, out) => {
+ console.table("test");
+ assertEqual(out.toString(), "test\n");
+ });
+});