nodejs/test/parallel/test-console-diagnostics-channels.js

78 lines
1.7 KiB
JavaScript
Raw Permalink Normal View History

'use strict';
const { mustCall } = require('../common');
const { deepStrictEqual, ok, strictEqual } = require('assert');
const { channel } = require('diagnostics_channel');
const {
hijackStdout,
hijackStderr,
restoreStdout,
restoreStderr
} = require('../common/hijackstdio');
const stdoutMethods = [
'log',
'info',
'debug',
];
const stderrMethods = [
'warn',
'error',
];
const methods = [
...stdoutMethods,
...stderrMethods,
];
const channels = {
log: channel('console.log'),
info: channel('console.info'),
debug: channel('console.debug'),
warn: channel('console.warn'),
error: channel('console.error')
};
process.stdout.isTTY = false;
process.stderr.isTTY = false;
for (const method of methods) {
let intercepted = false;
let formatted = false;
const isStdout = stdoutMethods.includes(method);
const hijack = isStdout ? hijackStdout : hijackStderr;
const restore = isStdout ? restoreStdout : restoreStderr;
const foo = 'string';
const bar = { key: /value/ };
const baz = [ 1, 2, 3 ];
channels[method].subscribe(mustCall((args) => {
// Should not have been formatted yet.
intercepted = true;
ok(!formatted);
// Should receive expected log message args.
deepStrictEqual(args, [foo, bar, baz]);
// Should be able to mutate message args and have it reflected in output.
bar.added = true;
}));
hijack(mustCall((output) => {
// Should have already been intercepted.
formatted = true;
ok(intercepted);
// Should produce expected formatted output with mutated message args.
strictEqual(output, 'string { key: /value/, added: true } [ 1, 2, 3 ]\n');
}));
console[method](foo, bar, baz);
restore();
}