summaryrefslogtreecommitdiff
path: root/test/common/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'test/common/index.js')
-rw-r--r--test/common/index.js43
1 files changed, 31 insertions, 12 deletions
diff --git a/test/common/index.js b/test/common/index.js
index 64127e4c33..63e94adae5 100644
--- a/test/common/index.js
+++ b/test/common/index.js
@@ -696,24 +696,43 @@ Object.defineProperty(exports, 'hasSmallICU', {
});
// Useful for testing expected internal/error objects
-exports.expectsError = function expectsError(fn, options, exact) {
+exports.expectsError = function expectsError(fn, settings, exact) {
if (typeof fn !== 'function') {
- exact = options;
- options = fn;
+ exact = settings;
+ settings = fn;
fn = undefined;
}
- const { code, type, message } = options;
const innerFn = exports.mustCall(function(error) {
- assert.strictEqual(error.code, code);
- if (type !== undefined) {
+ assert.strictEqual(error.code, settings.code);
+ if ('type' in settings) {
+ const type = settings.type;
+ if (type !== Error && !Error.isPrototypeOf(type)) {
+ throw new TypeError('`settings.type` must inherit from `Error`');
+ }
assert(error instanceof type,
- `${error} is not the expected type ${type}`);
+ `${error.name} is not instance of ${type.name}`);
+ }
+ if ('message' in settings) {
+ const message = settings.message;
+ if (typeof message === 'string') {
+ assert.strictEqual(error.message, message);
+ } else {
+ assert(message.test(error.message),
+ `${error.message} does not match ${message}`);
+ }
}
- if (message instanceof RegExp) {
- assert(message.test(error.message),
- `${error.message} does not match ${message}`);
- } else if (typeof message === 'string') {
- assert.strictEqual(error.message, message);
+ if ('name' in settings) {
+ assert.strictEqual(error.name, settings.name);
+ }
+ if (error.constructor.name === 'AssertionError') {
+ ['generatedMessage', 'actual', 'expected', 'operator'].forEach((key) => {
+ if (key in settings) {
+ const actual = error[key];
+ const expected = settings[key];
+ assert.strictEqual(actual, expected,
+ `${key}: expected ${expected}, not ${actual}`);
+ }
+ });
}
return true;
}, exact);