node/test/parallel/test-snapshot-warning.js
Joyee Cheung 64a5c01b99
test: add spawnSyncAndExit() and spawnSyncAndExitWithoutError()
Replaces expectSyncExit() and expectSyncExitWithoutError(). Since
we usually just check the child process right after its spawned,
these shorthands also takes care of the spawning. This makes the
tests more concise.

PR-URL: https://github.com/nodejs/node/pull/49200
Reviewed-By: LiviaMedeiros <livia@cirno.name>
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
2023-08-18 16:54:19 +00:00

146 lines
3.7 KiB
JavaScript

'use strict';
// This tests that the warning handler is cleaned up properly
// during snapshot serialization and installed again during
// deserialization.
require('../common');
const assert = require('assert');
const tmpdir = require('../common/tmpdir');
const fixtures = require('../common/fixtures');
const { spawnSyncAndExitWithoutError } = require('../common/child_process');
const fs = require('fs');
const warningScript = fixtures.path('snapshot', 'warning.js');
const blobPath = tmpdir.resolve('snapshot.blob');
const empty = fixtures.path('empty.js');
tmpdir.refresh();
{
console.log('\n# Check snapshot scripts that do not emit warnings.');
spawnSyncAndExitWithoutError(process.execPath, [
'--snapshot-blob',
blobPath,
'--build-snapshot',
empty,
], {
cwd: tmpdir.path
});
const stats = fs.statSync(blobPath);
assert(stats.isFile());
spawnSyncAndExitWithoutError(process.execPath, [
'--snapshot-blob',
blobPath,
warningScript,
], {
cwd: tmpdir.path
}, {
stderr(output) {
const match = output.match(/Warning: test warning/g);
assert.strictEqual(match.length, 1);
return true;
}
});
}
tmpdir.refresh();
{
console.log('\n# Check snapshot scripts that emit ' +
'warnings and --trace-warnings hint.');
spawnSyncAndExitWithoutError(process.execPath, [
'--snapshot-blob',
blobPath,
'--build-snapshot',
warningScript,
], {
cwd: tmpdir.path
}, {
stderr(output) {
let match = output.match(/Warning: test warning/g);
assert.strictEqual(match.length, 1);
match = output.match(/Use `node --trace-warnings/g);
assert.strictEqual(match.length, 1);
return true;
}
});
const stats = fs.statSync(blobPath);
assert(stats.isFile());
spawnSyncAndExitWithoutError(process.execPath, [
'--snapshot-blob',
blobPath,
warningScript,
], {
cwd: tmpdir.path
}, {
stderr(output) {
// Warnings should not be handled more than once.
let match = output.match(/Warning: test warning/g);
assert.strictEqual(match.length, 1);
match = output.match(/Use `node --trace-warnings/g);
assert.strictEqual(match.length, 1);
return true;
}
});
}
tmpdir.refresh();
{
console.log('\n# Check --redirect-warnings');
const warningFile1 = tmpdir.resolve('warnings.txt');
const warningFile2 = tmpdir.resolve('warnings2.txt');
spawnSyncAndExitWithoutError(process.execPath, [
'--snapshot-blob',
blobPath,
'--redirect-warnings',
warningFile1,
'--build-snapshot',
warningScript,
], {
cwd: tmpdir.path
}, {
stderr(output) {
assert.doesNotMatch(output, /Warning: test warning/);
}
});
const stats = fs.statSync(blobPath);
assert(stats.isFile());
const warnings1 = fs.readFileSync(warningFile1, 'utf8');
console.log(warningFile1, ':', warnings1);
let match = warnings1.match(/Warning: test warning/g);
assert.strictEqual(match.length, 1);
match = warnings1.match(/Use `node --trace-warnings/g);
assert.strictEqual(match.length, 1);
fs.rmSync(warningFile1, {
maxRetries: 3, recursive: false, force: true
});
spawnSyncAndExitWithoutError(process.execPath, [
'--snapshot-blob',
blobPath,
'--redirect-warnings',
warningFile2,
warningScript,
], {
cwd: tmpdir.path
}, {
stderr(output) {
assert.doesNotMatch(output, /Warning: test warning/);
return true;
}
});
assert(!fs.existsSync(warningFile1));
const warnings2 = fs.readFileSync(warningFile2, 'utf8');
console.log(warningFile2, ':', warnings1);
match = warnings2.match(/Warning: test warning/g);
assert.strictEqual(match.length, 1);
match = warnings2.match(/Use `node --trace-warnings/g);
assert.strictEqual(match.length, 1);
}