summaryrefslogtreecommitdiff
path: root/js
diff options
context:
space:
mode:
Diffstat (limited to 'js')
-rw-r--r--js/console.ts69
-rw-r--r--js/console_test.ts32
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");
});