Browse Source

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>
v6
Faiz Halde 8 years ago
committed by James M Snell
parent
commit
425aba4f36
  1. 43
      lib/assert.js
  2. 25
      lib/internal/errors.js
  3. 2
      test/message/error_exit.out

43
lib/assert.js

@ -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);

25
lib/internal/errors.js

@ -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.
}; };

2
test/message/error_exit.out

@ -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…
Cancel
Save