diff options
Diffstat (limited to 'js')
-rw-r--r-- | js/console.ts | 69 | ||||
-rw-r--r-- | js/console_test.ts | 32 |
2 files changed, 99 insertions, 2 deletions
diff --git a/js/console.ts b/js/console.ts index 311ca83b7..94ba43731 100644 --- a/js/console.ts +++ b/js/console.ts @@ -351,6 +351,9 @@ export function stringifyArgs( type PrintFunc = (x: string, isErr?: boolean) => void; +const countMap = new Map<string, number>(); +const timerMap = new Map<string, number>(); + export class Console { // @internal constructor(private printFunc: PrintFunc) {} @@ -387,7 +390,7 @@ export class Console { * ref: https://console.spec.whatwg.org/#assert */ // tslint:disable-next-line:no-any - assert = (condition?: boolean, ...args: any[]): void => { + assert = (condition = false, ...args: any[]): void => { if (condition) { return; } @@ -406,4 +409,68 @@ export class Console { this.error(`Assertion failed:`, ...args); }; + + count = (label = "default"): void => { + label = String(label); + + if (countMap.has(label)) { + const current = countMap.get(label) || 0; + countMap.set(label, current + 1); + } else { + countMap.set(label, 1); + } + + this.info(`${label}: ${countMap.get(label)}`); + }; + + countReset = (label = "default"): void => { + label = String(label); + + if (countMap.has(label)) { + countMap.set(label, 0); + } else { + this.warn(`Count for '${label}' does not exist`); + } + }; + + time = (label = "default"): void => { + label = String(label); + + if (timerMap.has(label)) { + this.warn(`Timer '${label}' already exists`); + return; + } + + timerMap.set(label, Date.now()); + }; + + // tslint:disable-next-line:no-any + timeLog = (label = "default", ...args: any[]): void => { + label = String(label); + + if (!timerMap.has(label)) { + this.warn(`Timer '${label}' does not exists`); + return; + } + + const startTime = timerMap.get(label) as number; + const duration = Date.now() - startTime; + + this.info(`${label}: ${duration}ms`, ...args); + }; + + timeEnd = (label = "default"): void => { + label = String(label); + + if (!timerMap.has(label)) { + this.warn(`Timer '${label}' does not exists`); + return; + } + + const startTime = timerMap.get(label) as number; + timerMap.delete(label); + const duration = Date.now() - startTime; + + this.info(`${label}: ${duration}ms`); + }; } diff --git a/js/console_test.ts b/js/console_test.ts index 3e6bd6905..2946d3648 100644 --- a/js/console_test.ts +++ b/js/console_test.ts @@ -2,6 +2,10 @@ import { test, assert, assertEqual } from "./test_util.ts"; import { stringifyArgs } from "./console.ts"; +import { Console } from "./console.ts"; +import { libdeno } from "./libdeno"; +const console = new Console(libdeno.print); + // tslint:disable-next-line:no-any function stringify(...args: any[]): string { return stringifyArgs(args); @@ -114,7 +118,7 @@ test(function consoleTestStringifyCircular() { assertEqual( stringify(console), // tslint:disable-next-line:max-line-length - "Console { printFunc: [Function], log: [Function], debug: [Function], info: [Function], dir: [Function], warn: [Function], error: [Function], assert: [Function] }" + "Console { printFunc: [Function], log: [Function], debug: [Function], info: [Function], dir: [Function], warn: [Function], error: [Function], assert: [Function], count: [Function], countReset: [Function], time: [Function], timeLog: [Function], timeEnd: [Function] }" ); }); @@ -136,6 +140,22 @@ test(function consoleTestStringifyWithDepth() { ); }); +test(function consoleTestCallToStringOnLabel() { + const methods = ["count", "countReset", "time", "timeLog", "timeEnd"]; + + for (const method of methods) { + let hasCalled = false; + + console[method]({ + toString() { + hasCalled = true; + } + }); + + assertEqual(hasCalled, true); + } +}); + test(function consoleTestError() { class MyError extends Error { constructor(errStr: string) { @@ -159,6 +179,11 @@ test(function consoleDetachedLog() { const warn = console.warn; const error = console.error; const consoleAssert = console.assert; + const consoleCount = console.count; + const consoleCountReset = console.countReset; + const consoleTime = console.time; + const consoleTimeLog = console.timeLog; + const consoleTimeEnd = console.timeEnd; log("Hello world"); dir("Hello world"); debug("Hello world"); @@ -166,4 +191,9 @@ test(function consoleDetachedLog() { warn("Hello world"); error("Hello world"); consoleAssert(true); + consoleCount("Hello world"); + consoleCountReset("Hello world"); + consoleTime("Hello world"); + consoleTimeLog("Hello world"); + consoleTimeEnd("Hello world"); }); |