| '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); |
| } |