diff --git a/test/common.js b/test/common.js index 85b2393c559a23..891c674a693cbf 100644 --- a/test/common.js +++ b/test/common.js @@ -554,17 +554,45 @@ exports.isAlive = function isAlive(pid) { } }; -exports.expectWarning = function(name, expected) { - if (typeof expected === 'string') - expected = [expected]; - process.on('warning', exports.mustCall((warning) => { +function expectWarning(name, expectedMessages) { + return exports.mustCall((warning) => { assert.strictEqual(warning.name, name); - assert.ok(expected.includes(warning.message), + assert.ok(expectedMessages.includes(warning.message), `unexpected error message: "${warning.message}"`); // Remove a warning message after it is seen so that we guarantee that we // get each message only once. - expected.splice(expected.indexOf(warning.message), 1); - }, expected.length)); + expectedMessages.splice(expectedMessages.indexOf(warning.message), 1); + }, 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', {