assert: refactor the code · nodejs/node@73416b4
@@ -20,8 +20,7 @@
20202121'use strict';
222223-// UTILITY
24-const compare = process.binding('buffer').compare;
23+const { compare } = process.binding('buffer');
2524const util = require('util');
2625const Buffer = require('buffer').Buffer;
2726const pToString = (obj) => Object.prototype.toString.call(obj);
@@ -49,7 +48,7 @@ assert.AssertionError = function AssertionError(options) {
4948this.message = getMessage(this);
5049this.generatedMessage = true;
5150}
52-var stackStartFunction = options.stackStartFunction || fail;
51+const stackStartFunction = options.stackStartFunction || fail;
5352Error.captureStackTrace(this, stackStartFunction);
5453};
5554@@ -73,7 +72,7 @@ function getMessage(self) {
73727473// All of the following functions must throw an AssertionError
7574// when a corresponding condition is not met, with a message that
76-// may be undefined if not provided. All assertion methods provide
75+// may be undefined if not provided. All assertion methods provide
7776// both the actual and expected values to the assertion error for
7877// display purposes.
7978@@ -86,57 +85,44 @@ function fail(actual, expected, message, operator, stackStartFunction) {
8685stackStartFunction: stackStartFunction
8786});
8887}
89-90-// EXTENSION! allows for well behaved errors defined elsewhere.
9188assert.fail = fail;
92899390// Pure assertion tests whether a value is truthy, as determined
94-// by !!guard.
95-// assert.ok(guard, message_opt);
96-// This statement is equivalent to assert.equal(true, !!guard,
97-// message_opt);. To test strictly for the value true, use
98-// assert.strictEqual(true, guard, message_opt);.
99-91+// by !!value.
10092function ok(value, message) {
101-if (!value) fail(value, true, message, '==', assert.ok);
93+if (!value) fail(value, true, message, '==', ok);
10294}
10395assert.ok = ok;
10496105-// The equality assertion tests shallow, coercive equality with
106-// ==.
107-// assert.equal(actual, expected, message_opt);
97+// The equality assertion tests shallow, coercive equality with ==.
10898/* eslint-disable no-restricted-properties */
10999assert.equal = function equal(actual, expected, message) {
110100if (actual != expected) fail(actual, expected, message, '==', assert.equal);
111101};
112102113103// The non-equality assertion tests for whether two objects are not
114104// equal with !=.
115-// assert.notEqual(actual, expected, message_opt);
116-117105assert.notEqual = function notEqual(actual, expected, message) {
118106if (actual == expected) {
119-fail(actual, expected, message, '!=', assert.notEqual);
107+fail(actual, expected, message, '!=', notEqual);
120108}
121109};
122110123111// The equivalence assertion tests a deep equality relation.
124-// assert.deepEqual(actual, expected, message_opt);
125-126112assert.deepEqual = function deepEqual(actual, expected, message) {
127-if (!_deepEqual(actual, expected, false)) {
128-fail(actual, expected, message, 'deepEqual', assert.deepEqual);
113+if (!innerDeepEqual(actual, expected, false)) {
114+fail(actual, expected, message, 'deepEqual', deepEqual);
129115}
130116};
131117/* eslint-enable */
132118133119assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
134-if (!_deepEqual(actual, expected, true)) {
135-fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
120+if (!innerDeepEqual(actual, expected, true)) {
121+fail(actual, expected, message, 'deepStrictEqual', deepStrictEqual);
136122}
137123};
138124139-function _deepEqual(actual, expected, strict, memos) {
125+function innerDeepEqual(actual, expected, strict, memos) {
140126// All identical values are equivalent, as determined by ===.
141127if (actual === expected) {
142128return true;
@@ -247,45 +233,40 @@ function objEquiv(a, b, strict, actualVisitedObjects) {
247233// Possibly expensive deep test:
248234for (i = ka.length - 1; i >= 0; i--) {
249235key = ka[i];
250-if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
236+if (!innerDeepEqual(a[key], b[key], strict, actualVisitedObjects))
251237return false;
252238}
253239return true;
254240}
255241256242// The non-equivalence assertion tests for any deep inequality.
257-// assert.notDeepEqual(actual, expected, message_opt);
258-259243assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
260-if (_deepEqual(actual, expected, false)) {
261-fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
244+if (innerDeepEqual(actual, expected, false)) {
245+fail(actual, expected, message, 'notDeepEqual', notDeepEqual);
262246}
263247};
264248265249assert.notDeepStrictEqual = notDeepStrictEqual;
266250function notDeepStrictEqual(actual, expected, message) {
267-if (_deepEqual(actual, expected, true)) {
268-fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
251+if (innerDeepEqual(actual, expected, true)) {
252+fail(actual, expected, message, 'notDeepStrictEqual',
253+notDeepStrictEqual);
269254}
270255}
271256272257273258// The strict equality assertion tests strict equality, as determined by ===.
274-// assert.strictEqual(actual, expected, message_opt);
275-276259assert.strictEqual = function strictEqual(actual, expected, message) {
277260if (actual !== expected) {
278-fail(actual, expected, message, '===', assert.strictEqual);
261+fail(actual, expected, message, '===', strictEqual);
279262}
280263};
281264282265// The strict non-equality assertion tests for strict inequality, as
283266// determined by !==.
284-// assert.notStrictEqual(actual, expected, message_opt);
285-286267assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
287268if (actual === expected) {
288-fail(actual, expected, message, '!==', assert.notStrictEqual);
269+fail(actual, expected, message, '!==', notStrictEqual);
289270}
290271};
291272@@ -314,7 +295,7 @@ function expectedException(actual, expected) {
314295return expected.call({}, actual) === true;
315296}
316297317-function _tryBlock(block) {
298+function tryBlock(block) {
318299var error;
319300try {
320301block();
@@ -324,9 +305,7 @@ function _tryBlock(block) {
324305return error;
325306}
326307327-function _throws(shouldThrow, block, expected, message) {
328-var actual;
329-308+function innerThrows(shouldThrow, block, expected, message) {
330309if (typeof block !== 'function') {
331310throw new TypeError('"block" argument must be a function');
332311}
@@ -336,13 +315,13 @@ function _throws(shouldThrow, block, expected, message) {
336315expected = null;
337316}
338317339-actual = _tryBlock(block);
318+const actual = tryBlock(block);
340319341320message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
342321(message ? ' ' + message : '.');
343322344323if (shouldThrow && !actual) {
345-fail(actual, expected, 'Missing expected exception' + message);
324+fail(actual, expected, 'Missing expected exception' + message, fail);
346325}
347326348327const userProvidedMessage = typeof message === 'string';
@@ -353,7 +332,7 @@ function _throws(shouldThrow, block, expected, message) {
353332userProvidedMessage &&
354333expectedException(actual, expected)) ||
355334isUnexpectedException) {
356-fail(actual, expected, 'Got unwanted exception' + message);
335+fail(actual, expected, 'Got unwanted exception' + message, fail);
357336}
358337359338if ((shouldThrow && actual && expected &&
@@ -363,15 +342,12 @@ function _throws(shouldThrow, block, expected, message) {
363342}
364343365344// Expected to throw an error.
366-// assert.throws(block, Error_opt, message_opt);
367-368-assert.throws = function(block, /*optional*/error, /*optional*/message) {
369-_throws(true, block, error, message);
345+assert.throws = function throws(block, error, message) {
346+innerThrows(true, block, error, message);
370347};
371348372-// EXTENSION! This is annoying to write outside this module.
373-assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
374-_throws(false, block, error, message);
349+assert.doesNotThrow = function doesNotThrow(block, error, message) {
350+innerThrows(false, block, error, message);
375351};
376352377-assert.ifError = function(err) { if (err) throw err; };
353+assert.ifError = function ifError(err) { if (err) throw err; };