mirror of
https://github.com/nodejs/node.git
synced 2025-04-28 21:46:48 +00:00

The current internal isError function checked the toString value instead of using the more precise `util.types.isNativeError()` check. The `instanceof` check is not removed due to possible errors that are not native but still an instance of Error. PR-URL: https://github.com/nodejs/node/pull/24746 Reviewed-By: Michaël Zasso <targos@protonmail.com> Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
38 lines
1.3 KiB
JavaScript
38 lines
1.3 KiB
JavaScript
// Flags: --expose-internals
|
|
'use strict';
|
|
|
|
require('../common');
|
|
const assert = require('assert');
|
|
const { types } = require('util');
|
|
const { isError } = require('internal/util');
|
|
const vm = require('vm');
|
|
|
|
// Special cased errors. Test the internal function which is used in
|
|
// `util.inspect()`, the `repl` and maybe more. This verifies that errors from
|
|
// different realms, and non native instances of error are properly detected as
|
|
// error while definitely false ones are not detected. This is different than
|
|
// the public `util.isError()` function which falsy detects the fake errors as
|
|
// actual errors.
|
|
{
|
|
const fake = { [Symbol.toStringTag]: 'Error' };
|
|
assert(!types.isNativeError(fake));
|
|
assert(!(fake instanceof Error));
|
|
assert(!isError(fake));
|
|
|
|
const err = new Error('test');
|
|
const newErr = Object.create(
|
|
Object.getPrototypeOf(err),
|
|
Object.getOwnPropertyDescriptors(err));
|
|
Object.defineProperty(err, 'message', { value: err.message });
|
|
assert(types.isNativeError(err));
|
|
assert(!types.isNativeError(newErr));
|
|
assert(newErr instanceof Error);
|
|
assert(isError(newErr));
|
|
|
|
const context = vm.createContext({});
|
|
const differentRealmErr = vm.runInContext('new Error()', context);
|
|
assert(types.isNativeError(differentRealmErr));
|
|
assert(!(differentRealmErr instanceof Error));
|
|
assert(isError(differentRealmErr));
|
|
}
|