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