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

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) {

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) {

8685

stackStartFunction: stackStartFunction

8786

});

8887

}

89-90-

// EXTENSION! allows for well behaved errors defined elsewhere.

9188

assert.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.

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;

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 */

10999

assert.equal = function equal(actual, expected, message) {

110100

if (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-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

};

122110123111

// 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 */

132118133119

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

};

138124139-

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

}

255241256242

// 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

};

264248265249

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

}

271256272257273258

// 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

};

281264282265

// 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

}

316297317-

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

}

326307327-

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

}

338317339-

actual = _tryBlock(block);

318+

const actual = tryBlock(block);

340319341320

message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +

342321

(message ? ' ' + message : '.');

343322344323

if (shouldThrow && !actual) {

345-

fail(actual, expected, 'Missing expected exception' + message);

324+

fail(actual, expected, 'Missing expected exception' + message, fail);

346325

}

347326348327

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

}

358337359338

if ((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; };