Skip to content

Commit 627ce64

Browse files
BridgeARMylesBorins
authored andcommitted
assert: refactor the code
1. Rename private functions 2. Use destructuring 3. Remove obsolete comments Backport-PR-URL: #15516 PR-URL: #13862 Reviewed-By: Refael Ackermann <[email protected]> Reviewed-By: Joyee Cheung <[email protected]>
1 parent 55a2bd2 commit 627ce64

File tree

2 files changed

+40
-54
lines changed

2 files changed

+40
-54
lines changed

lib/assert.js

+30-54
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@
2020

2121
'use strict';
2222

23-
// UTILITY
24-
const compare = process.binding('buffer').compare;
23+
const { compare } = process.binding('buffer');
2524
const util = require('util');
2625
const Buffer = require('buffer').Buffer;
2726
const pToString = (obj) => Object.prototype.toString.call(obj);
@@ -49,7 +48,7 @@ assert.AssertionError = function AssertionError(options) {
4948
this.message = getMessage(this);
5049
this.generatedMessage = true;
5150
}
52-
var stackStartFunction = options.stackStartFunction || fail;
51+
const stackStartFunction = options.stackStartFunction || fail;
5352
Error.captureStackTrace(this, stackStartFunction);
5453
};
5554

@@ -73,7 +72,7 @@ function getMessage(self) {
7372

7473
// 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) {
8685
stackStartFunction: stackStartFunction
8786
});
8887
}
89-
90-
// EXTENSION! allows for well behaved errors defined elsewhere.
9188
assert.fail = fail;
9289

9390
// 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.
10092
function ok(value, message) {
101-
if (!value) fail(value, true, message, '==', assert.ok);
93+
if (!value) fail(value, true, message, '==', ok);
10294
}
10395
assert.ok = ok;
10496

105-
// 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 */
10999
assert.equal = function equal(actual, expected, message) {
110100
if (actual != expected) fail(actual, expected, message, '==', assert.equal);
111101
};
112102

113103
// The non-equality assertion tests for whether two objects are not
114104
// equal with !=.
115-
// assert.notEqual(actual, expected, message_opt);
116-
117105
assert.notEqual = function notEqual(actual, expected, message) {
118106
if (actual == expected) {
119-
fail(actual, expected, message, '!=', assert.notEqual);
107+
fail(actual, expected, message, '!=', notEqual);
120108
}
121109
};
122110

123111
// The equivalence assertion tests a deep equality relation.
124-
// assert.deepEqual(actual, expected, message_opt);
125-
126112
assert.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 */
132118

133119
assert.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
};
138124

139-
function _deepEqual(actual, expected, strict, memos) {
125+
function innerDeepEqual(actual, expected, strict, memos) {
140126
// All identical values are equivalent, as determined by ===.
141127
if (actual === expected) {
142128
return true;
@@ -247,45 +233,40 @@ function objEquiv(a, b, strict, actualVisitedObjects) {
247233
// Possibly expensive deep test:
248234
for (i = ka.length - 1; i >= 0; i--) {
249235
key = ka[i];
250-
if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
236+
if (!innerDeepEqual(a[key], b[key], strict, actualVisitedObjects))
251237
return false;
252238
}
253239
return true;
254240
}
255241

256242
// The non-equivalence assertion tests for any deep inequality.
257-
// assert.notDeepEqual(actual, expected, message_opt);
258-
259243
assert.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
};
264248

265249
assert.notDeepStrictEqual = notDeepStrictEqual;
266250
function 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
}
271256

272257

273258
// The strict equality assertion tests strict equality, as determined by ===.
274-
// assert.strictEqual(actual, expected, message_opt);
275-
276259
assert.strictEqual = function strictEqual(actual, expected, message) {
277260
if (actual !== expected) {
278-
fail(actual, expected, message, '===', assert.strictEqual);
261+
fail(actual, expected, message, '===', strictEqual);
279262
}
280263
};
281264

282265
// The strict non-equality assertion tests for strict inequality, as
283266
// determined by !==.
284-
// assert.notStrictEqual(actual, expected, message_opt);
285-
286267
assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
287268
if (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) {
314295
return expected.call({}, actual) === true;
315296
}
316297

317-
function _tryBlock(block) {
298+
function tryBlock(block) {
318299
var error;
319300
try {
320301
block();
@@ -324,9 +305,7 @@ function _tryBlock(block) {
324305
return error;
325306
}
326307

327-
function _throws(shouldThrow, block, expected, message) {
328-
var actual;
329-
308+
function innerThrows(shouldThrow, block, expected, message) {
330309
if (typeof block !== 'function') {
331310
throw new TypeError('"block" argument must be a function');
332311
}
@@ -336,13 +315,13 @@ function _throws(shouldThrow, block, expected, message) {
336315
expected = null;
337316
}
338317

339-
actual = _tryBlock(block);
318+
const actual = tryBlock(block);
340319

341320
message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
342321
(message ? ' ' + message : '.');
343322

344323
if (shouldThrow && !actual) {
345-
fail(actual, expected, 'Missing expected exception' + message);
324+
fail(actual, expected, 'Missing expected exception' + message, fail);
346325
}
347326

348327
const userProvidedMessage = typeof message === 'string';
@@ -353,7 +332,7 @@ function _throws(shouldThrow, block, expected, message) {
353332
userProvidedMessage &&
354333
expectedException(actual, expected)) ||
355334
isUnexpectedException) {
356-
fail(actual, expected, 'Got unwanted exception' + message);
335+
fail(actual, expected, 'Got unwanted exception' + message, fail);
357336
}
358337

359338
if ((shouldThrow && actual && expected &&
@@ -363,15 +342,12 @@ function _throws(shouldThrow, block, expected, message) {
363342
}
364343

365344
// 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
};
371348

372-
// 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
};
376352

377-
assert.ifError = function(err) { if (err) throw err; };
353+
assert.ifError = function ifError(err) { if (err) throw err; };

test/parallel/test-assert-fail.js

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
'use strict';
2+
3+
require('../common');
4+
const assert = require('assert');
5+
6+
// The stackFrameFunction should exclude the foo frame
7+
assert.throws(
8+
function foo() { assert.fail('first', 'second', 'message', '!==', foo); },
9+
(err) => !/foo/m.test(err.stack)
10+
);

0 commit comments

Comments
 (0)