mirror of
https://github.com/denoland/deno.git
synced 2025-01-05 05:49:20 -05:00
Add console.count and console.time (#1358)
This commit is contained in:
parent
c69d2f554d
commit
04076465cf
2 changed files with 99 additions and 2 deletions
|
@ -351,6 +351,9 @@ export function stringifyArgs(
|
||||||
|
|
||||||
type PrintFunc = (x: string, isErr?: boolean) => void;
|
type PrintFunc = (x: string, isErr?: boolean) => void;
|
||||||
|
|
||||||
|
const countMap = new Map<string, number>();
|
||||||
|
const timerMap = new Map<string, number>();
|
||||||
|
|
||||||
export class Console {
|
export class Console {
|
||||||
// @internal
|
// @internal
|
||||||
constructor(private printFunc: PrintFunc) {}
|
constructor(private printFunc: PrintFunc) {}
|
||||||
|
@ -387,7 +390,7 @@ export class Console {
|
||||||
* ref: https://console.spec.whatwg.org/#assert
|
* ref: https://console.spec.whatwg.org/#assert
|
||||||
*/
|
*/
|
||||||
// tslint:disable-next-line:no-any
|
// tslint:disable-next-line:no-any
|
||||||
assert = (condition?: boolean, ...args: any[]): void => {
|
assert = (condition = false, ...args: any[]): void => {
|
||||||
if (condition) {
|
if (condition) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -406,4 +409,68 @@ export class Console {
|
||||||
|
|
||||||
this.error(`Assertion failed:`, ...args);
|
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`);
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,10 @@
|
||||||
import { test, assert, assertEqual } from "./test_util.ts";
|
import { test, assert, assertEqual } from "./test_util.ts";
|
||||||
import { stringifyArgs } from "./console.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
|
// tslint:disable-next-line:no-any
|
||||||
function stringify(...args: any[]): string {
|
function stringify(...args: any[]): string {
|
||||||
return stringifyArgs(args);
|
return stringifyArgs(args);
|
||||||
|
@ -114,7 +118,7 @@ test(function consoleTestStringifyCircular() {
|
||||||
assertEqual(
|
assertEqual(
|
||||||
stringify(console),
|
stringify(console),
|
||||||
// tslint:disable-next-line:max-line-length
|
// 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() {
|
test(function consoleTestError() {
|
||||||
class MyError extends Error {
|
class MyError extends Error {
|
||||||
constructor(errStr: string) {
|
constructor(errStr: string) {
|
||||||
|
@ -159,6 +179,11 @@ test(function consoleDetachedLog() {
|
||||||
const warn = console.warn;
|
const warn = console.warn;
|
||||||
const error = console.error;
|
const error = console.error;
|
||||||
const consoleAssert = console.assert;
|
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");
|
log("Hello world");
|
||||||
dir("Hello world");
|
dir("Hello world");
|
||||||
debug("Hello world");
|
debug("Hello world");
|
||||||
|
@ -166,4 +191,9 @@ test(function consoleDetachedLog() {
|
||||||
warn("Hello world");
|
warn("Hello world");
|
||||||
error("Hello world");
|
error("Hello world");
|
||||||
consoleAssert(true);
|
consoleAssert(true);
|
||||||
|
consoleCount("Hello world");
|
||||||
|
consoleCountReset("Hello world");
|
||||||
|
consoleTime("Hello world");
|
||||||
|
consoleTimeLog("Hello world");
|
||||||
|
consoleTimeEnd("Hello world");
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue