test: support multiple warnings in checkWarning
This allows the common.checkWarning() test method to accept a map of warning names to description(s), to allow testing code that generates multiple types of warnings. PR-URL: https://github.com/nodejs/node/pull/11640 Reviewed-By: Anna Henningsen <anna@addaleax.net>
This commit is contained in:
parent
765be6c2e1
commit
74f61e8e1f
@ -583,17 +583,45 @@ exports.isAlive = function isAlive(pid) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.expectWarning = function(name, expected) {
|
function expectWarning(name, expectedMessages) {
|
||||||
if (typeof expected === 'string')
|
return exports.mustCall((warning) => {
|
||||||
expected = [expected];
|
|
||||||
process.on('warning', exports.mustCall((warning) => {
|
|
||||||
assert.strictEqual(warning.name, name);
|
assert.strictEqual(warning.name, name);
|
||||||
assert.ok(expected.includes(warning.message),
|
assert.ok(expectedMessages.includes(warning.message),
|
||||||
`unexpected error message: "${warning.message}"`);
|
`unexpected error message: "${warning.message}"`);
|
||||||
// Remove a warning message after it is seen so that we guarantee that we
|
// Remove a warning message after it is seen so that we guarantee that we
|
||||||
// get each message only once.
|
// get each message only once.
|
||||||
expected.splice(expected.indexOf(warning.message), 1);
|
expectedMessages.splice(expectedMessages.indexOf(warning.message), 1);
|
||||||
}, expected.length));
|
}, expectedMessages.length);
|
||||||
|
}
|
||||||
|
|
||||||
|
function expectWarningByName(name, expected) {
|
||||||
|
if (typeof expected === 'string') {
|
||||||
|
expected = [expected];
|
||||||
|
}
|
||||||
|
process.on('warning', expectWarning(name, expected));
|
||||||
|
}
|
||||||
|
|
||||||
|
function expectWarningByMap(warningMap) {
|
||||||
|
const catchWarning = {};
|
||||||
|
Object.keys(warningMap).forEach((name) => {
|
||||||
|
let expected = warningMap[name];
|
||||||
|
if (typeof expected === 'string') {
|
||||||
|
expected = [expected];
|
||||||
|
}
|
||||||
|
catchWarning[name] = expectWarning(name, expected);
|
||||||
|
});
|
||||||
|
process.on('warning', (warning) => catchWarning[warning.name](warning));
|
||||||
|
}
|
||||||
|
|
||||||
|
// accepts a warning name and description or array of descriptions or a map
|
||||||
|
// of warning names to description(s)
|
||||||
|
// ensures a warning is generated for each name/description pair
|
||||||
|
exports.expectWarning = function(nameOrMap, expected) {
|
||||||
|
if (typeof nameOrMap === 'string') {
|
||||||
|
expectWarningByName(nameOrMap, expected);
|
||||||
|
} else {
|
||||||
|
expectWarningByMap(nameOrMap);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Object.defineProperty(exports, 'hasIntl', {
|
Object.defineProperty(exports, 'hasIntl', {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user