nodejs/test/parallel/test-console-methods.js

64 lines
1.3 KiB
JavaScript

'use strict';
require('../common');
// This test ensures that console methods cannot be invoked as constructors and
// that their name is always correct.
const assert = require('assert');
const { Console } = console;
const newInstance = new Console(process.stdout);
const err = TypeError;
const methods = [
'log',
'warn',
'dir',
'time',
'timeEnd',
'timeLog',
'trace',
'assert',
'clear',
'count',
'countReset',
'group',
'groupEnd',
'table',
'debug',
'info',
'dirxml',
'error',
'groupCollapsed',
];
const alternateNames = {
debug: 'log',
info: 'log',
dirxml: 'log',
error: 'warn',
groupCollapsed: 'group'
};
function assertEqualName(method) {
try {
assert.strictEqual(console[method].name, method);
} catch {
assert.strictEqual(console[method].name, alternateNames[method]);
}
try {
assert.strictEqual(newInstance[method].name, method);
} catch {
assert.strictEqual(newInstance[method].name, alternateNames[method]);
}
}
for (const method of methods) {
assertEqualName(method);
assert.throws(() => new console[method](), err);
assert.throws(() => new newInstance[method](), err);
assert.throws(() => Reflect.construct({}, [], console[method]), err);
assert.throws(() => Reflect.construct({}, [], newInstance[method]), err);
}