1'use strict'; 2 3require('../common'); 4const assert = require('assert'); 5 6const stdoutWrite = process.stdout.write; 7 8let buf = ''; 9 10process.stdout.write = (string) => buf = string; 11 12console.count(); 13assert.strictEqual(buf, 'default: 1\n'); 14 15// 'default' and undefined are equivalent 16console.count('default'); 17assert.strictEqual(buf, 'default: 2\n'); 18 19console.count('a'); 20assert.strictEqual(buf, 'a: 1\n'); 21 22console.count('b'); 23assert.strictEqual(buf, 'b: 1\n'); 24 25console.count('a'); 26assert.strictEqual(buf, 'a: 2\n'); 27 28console.count(); 29assert.strictEqual(buf, 'default: 3\n'); 30 31console.count({}); 32assert.strictEqual(buf, '[object Object]: 1\n'); 33 34console.count(1); 35assert.strictEqual(buf, '1: 1\n'); 36 37console.count(null); 38assert.strictEqual(buf, 'null: 1\n'); 39 40console.count('null'); 41assert.strictEqual(buf, 'null: 2\n'); 42 43console.countReset(); 44console.count(); 45assert.strictEqual(buf, 'default: 1\n'); 46 47console.countReset('a'); 48console.count('a'); 49assert.strictEqual(buf, 'a: 1\n'); 50 51// countReset('a') only reset the a counter 52console.count(); 53assert.strictEqual(buf, 'default: 2\n'); 54 55process.stdout.write = stdoutWrite; 56 57// Symbol labels do not work. Only check that the `Error` is a `TypeError`. Do 58// not check the message because it is different depending on the JavaScript 59// engine. 60assert.throws( 61 () => console.count(Symbol('test')), 62 TypeError); 63assert.throws( 64 () => console.countReset(Symbol('test')), 65 TypeError); 66