console: console.countReset() should emit warning
The Console Standard specifies that console.countReset() should emit some type of a warning when given a label that has no previous account associated with it. This PR brings node's implementation of console.countReset() up-to-spec and adds a test asserting that a warning is emitted. Fixes: https://github.com/nodejs/node/issues/20524 PR-URL: https://github.com/nodejs/node/pull/21649 Reviewed-By: Tiancheng "Timothy" Gu <timothygu99@gmail.com> Reviewed-By: Gus Caplan <me@gus.host> Reviewed-By: Minwoo Jung <minwoo@nodesource.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
parent
85b0f1649d
commit
d4164ca559
@ -107,6 +107,7 @@ function Console(options /* or: stdout, stderr, ignoreErrors = true */) {
|
||||
if (typeof colorMode !== 'boolean' && colorMode !== 'auto')
|
||||
throw new ERR_INVALID_ARG_VALUE('colorMode', colorMode);
|
||||
|
||||
// Corresponds to https://console.spec.whatwg.org/#count-map
|
||||
this[kCounts] = new Map();
|
||||
this[kColorMode] = colorMode;
|
||||
|
||||
@ -308,12 +309,14 @@ Console.prototype.count = function count(label = 'default') {
|
||||
this.log(`${label}: ${count}`);
|
||||
};
|
||||
|
||||
// Not yet defined by the https://console.spec.whatwg.org, but
|
||||
// proposed to be added and currently implemented by Edge. Having
|
||||
// the ability to reset counters is important to help prevent
|
||||
// the counter from being a memory leak.
|
||||
// Defined by: https://console.spec.whatwg.org/#countreset
|
||||
Console.prototype.countReset = function countReset(label = 'default') {
|
||||
const counts = this[kCounts];
|
||||
if (!counts.has(label)) {
|
||||
process.emitWarning(`Count for '${label}' does not exist`);
|
||||
return;
|
||||
}
|
||||
|
||||
counts.delete(`${label}`);
|
||||
};
|
||||
|
||||
|
@ -35,14 +35,16 @@ if (common.isMainThread) {
|
||||
common.expectWarning(
|
||||
'Warning',
|
||||
[
|
||||
['No such label \'nolabel\' for console.timeEnd()', common.noWarnCode],
|
||||
['No such label \'nolabel\' for console.timeLog()', common.noWarnCode],
|
||||
['Count for \'noLabel\' does not exist', common.noWarnCode],
|
||||
['No such label \'noLabel\' for console.timeLog()', common.noWarnCode],
|
||||
['No such label \'noLabel\' for console.timeEnd()', common.noWarnCode],
|
||||
['Label \'test\' already exists for console.time()', common.noWarnCode]
|
||||
]
|
||||
);
|
||||
|
||||
console.timeEnd('nolabel');
|
||||
console.timeLog('nolabel');
|
||||
console.countReset('noLabel');
|
||||
console.timeLog('noLabel');
|
||||
console.timeEnd('noLabel');
|
||||
|
||||
console.time('label');
|
||||
console.timeEnd('label');
|
||||
@ -245,6 +247,6 @@ common.hijackStderr(common.mustCall(function(data) {
|
||||
|
||||
// stderr.write will catch sync error, so use `process.nextTick` here
|
||||
process.nextTick(function() {
|
||||
assert.strictEqual(data.includes('nolabel'), true);
|
||||
assert.strictEqual(data.includes('noLabel'), true);
|
||||
});
|
||||
}));
|
||||
|
Loading…
x
Reference in New Issue
Block a user