errors: AssertionError moved to internal/error
AssertionError class is moved to interna/error in reference to the TODO in assert.js. This was suggested to get rid of the cyclic dependency between assert.js and internal/error.js PR-URL: https://github.com/nodejs/node/pull/12906 Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
parent
9836cf5717
commit
425aba4f36
@ -40,39 +40,6 @@ function lazyErrors() {
|
|||||||
|
|
||||||
const assert = module.exports = ok;
|
const assert = module.exports = ok;
|
||||||
|
|
||||||
// The AssertionError is defined in assert.
|
|
||||||
// new assert.AssertionError({ message: message,
|
|
||||||
// actual: actual,
|
|
||||||
// expected: expected });
|
|
||||||
|
|
||||||
// TODO(jasnell): Consider moving AssertionError into internal/errors.js
|
|
||||||
class AssertionError extends Error {
|
|
||||||
constructor(options) {
|
|
||||||
if (typeof options !== 'object' || options === null) {
|
|
||||||
// Lazy because the errors module itself uses assertions, leading to
|
|
||||||
// a circular dependency. This can be eliminated by moving this class
|
|
||||||
// into internal/errors.js
|
|
||||||
const errors = lazyErrors();
|
|
||||||
throw new errors.TypeError('ERR_INVALID_ARG_TYPE', 'options', 'object');
|
|
||||||
}
|
|
||||||
const message = options.message ||
|
|
||||||
`${util.inspect(options.actual).slice(0, 128)} ` +
|
|
||||||
`${options.operator} ` +
|
|
||||||
util.inspect(options.expected).slice(0, 128);
|
|
||||||
super(message);
|
|
||||||
this.generatedMessage = !options.message;
|
|
||||||
this.name = 'AssertionError [ERR_ASSERTION]';
|
|
||||||
this.code = 'ERR_ASSERTION';
|
|
||||||
this.actual = options.actual;
|
|
||||||
this.expected = options.expected;
|
|
||||||
this.operator = options.operator;
|
|
||||||
var stackStartFunction = options.stackStartFunction || fail;
|
|
||||||
Error.captureStackTrace(this, stackStartFunction);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
assert.AssertionError = AssertionError;
|
|
||||||
|
|
||||||
// At present only the three keys mentioned above are used and
|
// At present only the three keys mentioned above are used and
|
||||||
// understood by the spec. Implementations or sub modules can pass
|
// understood by the spec. Implementations or sub modules can pass
|
||||||
// other keys to the AssertionError's constructor - they will be
|
// other keys to the AssertionError's constructor - they will be
|
||||||
@ -89,7 +56,8 @@ function fail(actual, expected, message, operator, stackStartFunction) {
|
|||||||
message = actual;
|
message = actual;
|
||||||
if (arguments.length === 2)
|
if (arguments.length === 2)
|
||||||
operator = '!=';
|
operator = '!=';
|
||||||
throw new AssertionError({
|
const errors = lazyErrors();
|
||||||
|
throw new errors.AssertionError({
|
||||||
message: message,
|
message: message,
|
||||||
actual: actual,
|
actual: actual,
|
||||||
expected: expected,
|
expected: expected,
|
||||||
@ -101,6 +69,13 @@ function fail(actual, expected, message, operator, stackStartFunction) {
|
|||||||
// EXTENSION! allows for well behaved errors defined elsewhere.
|
// EXTENSION! allows for well behaved errors defined elsewhere.
|
||||||
assert.fail = fail;
|
assert.fail = fail;
|
||||||
|
|
||||||
|
// The AssertionError is defined in internal/error.
|
||||||
|
// new assert.AssertionError({ message: message,
|
||||||
|
// actual: actual,
|
||||||
|
// expected: expected });
|
||||||
|
assert.AssertionError = lazyErrors().AssertionError;
|
||||||
|
|
||||||
|
|
||||||
// Pure assertion tests whether a value is truthy, as determined
|
// Pure assertion tests whether a value is truthy, as determined
|
||||||
// by !!guard.
|
// by !!guard.
|
||||||
// assert.ok(guard, message_opt);
|
// assert.ok(guard, message_opt);
|
||||||
|
@ -41,6 +41,30 @@ function makeNodeError(Base) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class AssertionError extends Error {
|
||||||
|
constructor(options) {
|
||||||
|
if (typeof options !== 'object' || options === null) {
|
||||||
|
throw new exports.TypeError('ERR_INVALID_ARG_TYPE', 'options', 'object');
|
||||||
|
}
|
||||||
|
const util = lazyUtil();
|
||||||
|
const assert = lazyAssert();
|
||||||
|
const message = options.message ||
|
||||||
|
`${util.inspect(options.actual).slice(0, 128)} ` +
|
||||||
|
`${options.operator} ` +
|
||||||
|
util.inspect(options.expected).slice(0, 128);
|
||||||
|
|
||||||
|
super(message);
|
||||||
|
this.generatedMessage = !options.message;
|
||||||
|
this.name = 'AssertionError [ERR_ASSERTION]';
|
||||||
|
this.code = 'ERR_ASSERTION';
|
||||||
|
this.actual = options.actual;
|
||||||
|
this.expected = options.expected;
|
||||||
|
this.operator = options.operator;
|
||||||
|
const stackStartFunction = options.stackStartFunction || assert.fail;
|
||||||
|
Error.captureStackTrace(this, stackStartFunction);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function message(key, args) {
|
function message(key, args) {
|
||||||
const assert = lazyAssert();
|
const assert = lazyAssert();
|
||||||
assert.strictEqual(typeof key, 'string');
|
assert.strictEqual(typeof key, 'string');
|
||||||
@ -69,6 +93,7 @@ module.exports = exports = {
|
|||||||
Error: makeNodeError(Error),
|
Error: makeNodeError(Error),
|
||||||
TypeError: makeNodeError(TypeError),
|
TypeError: makeNodeError(TypeError),
|
||||||
RangeError: makeNodeError(RangeError),
|
RangeError: makeNodeError(RangeError),
|
||||||
|
AssertionError,
|
||||||
E // This is exported only to facilitate testing.
|
E // This is exported only to facilitate testing.
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
Exiting with code=1
|
Exiting with code=1
|
||||||
assert.js:*
|
assert.js:*
|
||||||
throw new AssertionError({
|
throw new errors.AssertionError({
|
||||||
^
|
^
|
||||||
|
|
||||||
AssertionError [ERR_ASSERTION]: 1 === 2
|
AssertionError [ERR_ASSERTION]: 1 === 2
|
||||||
|
Loading…
x
Reference in New Issue
Block a user