From d78adccc08f90fcc7febb7711d510895cda9dd93 Mon Sep 17 00:00:00 2001 From: Cameron Little Date: Mon, 13 Mar 2017 09:04:54 -0700 Subject: [PATCH] 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 --- test/common.js | 42 +++++++++++++++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 7 deletions(-) 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', {