20
20
21
21
'use strict' ;
22
22
23
- // UTILITY
24
- const compare = process . binding ( 'buffer' ) . compare ;
23
+ const { compare } = process . binding ( 'buffer' ) ;
25
24
const util = require ( 'util' ) ;
26
25
const { isSet, isMap } = process . binding ( 'util' ) ;
27
- const objectToString = require ( 'internal/util' ) . objectToString ;
28
- const Buffer = require ( 'buffer' ) . Buffer ;
26
+ const { objectToString } = require ( 'internal/util' ) ;
27
+ const { Buffer } = require ( 'buffer' ) ;
29
28
30
29
var errors ;
31
30
function lazyErrors ( ) {
@@ -47,10 +46,21 @@ const assert = module.exports = ok;
47
46
48
47
// All of the following functions must throw an AssertionError
49
48
// when a corresponding condition is not met, with a message that
50
- // may be undefined if not provided. All assertion methods provide
49
+ // may be undefined if not provided. All assertion methods provide
51
50
// both the actual and expected values to the assertion error for
52
51
// display purposes.
53
52
53
+ function innerFail ( actual , expected , message , operator , stackStartFunction ) {
54
+ const errors = lazyErrors ( ) ;
55
+ throw new errors . AssertionError ( {
56
+ message,
57
+ actual,
58
+ expected,
59
+ operator,
60
+ stackStartFunction
61
+ } ) ;
62
+ }
63
+
54
64
function fail ( actual , expected , message , operator , stackStartFunction ) {
55
65
if ( arguments . length === 0 ) {
56
66
message = 'Failed' ;
@@ -59,19 +69,11 @@ function fail(actual, expected, message, operator, stackStartFunction) {
59
69
message = actual ;
60
70
actual = undefined ;
61
71
}
62
- if ( arguments . length === 2 )
72
+ if ( arguments . length === 2 ) {
63
73
operator = '!=' ;
64
- const errors = lazyErrors ( ) ;
65
- throw new errors . AssertionError ( {
66
- message : message ,
67
- actual : actual ,
68
- expected : expected ,
69
- operator : operator ,
70
- stackStartFunction : stackStartFunction
71
- } ) ;
74
+ }
75
+ innerFail ( actual , expected , message , operator , stackStartFunction || fail ) ;
72
76
}
73
-
74
- // EXTENSION! allows for well behaved errors defined elsewhere.
75
77
assert . fail = fail ;
76
78
77
79
// The AssertionError is defined in internal/error.
@@ -82,50 +84,39 @@ assert.AssertionError = lazyErrors().AssertionError;
82
84
83
85
84
86
// Pure assertion tests whether a value is truthy, as determined
85
- // by !!guard.
86
- // assert.ok(guard, message_opt);
87
- // This statement is equivalent to assert.equal(true, !!guard,
88
- // message_opt);. To test strictly for the value true, use
89
- // assert.strictEqual(true, guard, message_opt);.
90
-
87
+ // by !!value.
91
88
function ok ( value , message ) {
92
- if ( ! value ) fail ( value , true , message , '==' , assert . ok ) ;
89
+ if ( ! value ) innerFail ( value , true , message , '==' , ok ) ;
93
90
}
94
91
assert . ok = ok ;
95
92
96
- // The equality assertion tests shallow, coercive equality with
97
- // ==.
98
- // assert.equal(actual, expected, message_opt);
93
+ // The equality assertion tests shallow, coercive equality with ==.
99
94
/* eslint-disable no-restricted-properties */
100
95
assert . equal = function equal ( actual , expected , message ) {
101
96
// eslint-disable-next-line eqeqeq
102
- if ( actual != expected ) fail ( actual , expected , message , '==' , assert . equal ) ;
97
+ if ( actual != expected ) innerFail ( actual , expected , message , '==' , equal ) ;
103
98
} ;
104
99
105
100
// The non-equality assertion tests for whether two objects are not
106
101
// equal with !=.
107
- // assert.notEqual(actual, expected, message_opt);
108
-
109
102
assert . notEqual = function notEqual ( actual , expected , message ) {
110
103
// eslint-disable-next-line eqeqeq
111
104
if ( actual == expected ) {
112
- fail ( actual , expected , message , '!=' , assert . notEqual ) ;
105
+ innerFail ( actual , expected , message , '!=' , notEqual ) ;
113
106
}
114
107
} ;
115
108
116
109
// The equivalence assertion tests a deep equality relation.
117
- // assert.deepEqual(actual, expected, message_opt);
118
-
119
110
assert . deepEqual = function deepEqual ( actual , expected , message ) {
120
- if ( ! _deepEqual ( actual , expected , false ) ) {
121
- fail ( actual , expected , message , 'deepEqual' , assert . deepEqual ) ;
111
+ if ( ! innerDeepEqual ( actual , expected , false ) ) {
112
+ innerFail ( actual , expected , message , 'deepEqual' , deepEqual ) ;
122
113
}
123
114
} ;
124
115
/* eslint-enable */
125
116
126
117
assert . deepStrictEqual = function deepStrictEqual ( actual , expected , message ) {
127
- if ( ! _deepEqual ( actual , expected , true ) ) {
128
- fail ( actual , expected , message , 'deepStrictEqual' , assert . deepStrictEqual ) ;
118
+ if ( ! innerDeepEqual ( actual , expected , true ) ) {
119
+ innerFail ( actual , expected , message , 'deepStrictEqual' , deepStrictEqual ) ;
129
120
}
130
121
} ;
131
122
@@ -154,7 +145,7 @@ function isArguments(tag) {
154
145
return tag === '[object Arguments]' ;
155
146
}
156
147
157
- function _deepEqual ( actual , expected , strict , memos ) {
148
+ function innerDeepEqual ( actual , expected , strict , memos ) {
158
149
// All identical values are equivalent, as determined by ===.
159
150
if ( actual === expected ) {
160
151
return true ;
@@ -307,7 +298,7 @@ function setHasSimilarElement(set, val1, usedEntries, strict, memo) {
307
298
if ( usedEntries && usedEntries . has ( val2 ) )
308
299
continue ;
309
300
310
- if ( _deepEqual ( val1 , val2 , strict , memo ) ) {
301
+ if ( innerDeepEqual ( val1 , val2 , strict , memo ) ) {
311
302
if ( usedEntries )
312
303
usedEntries . add ( val2 ) ;
313
304
return true ;
@@ -364,7 +355,7 @@ function mapHasSimilarEntry(map, key1, item1, usedEntries, strict, memo) {
364
355
// This check is not strictly necessary. The loop performs this check, but
365
356
// doing it here improves performance of the common case when reference-equal
366
357
// keys exist (which includes all primitive-valued keys).
367
- if ( map . has ( key1 ) && _deepEqual ( item1 , map . get ( key1 ) , strict , memo ) ) {
358
+ if ( map . has ( key1 ) && innerDeepEqual ( item1 , map . get ( key1 ) , strict , memo ) ) {
368
359
if ( usedEntries )
369
360
usedEntries . add ( key1 ) ;
370
361
return true ;
@@ -381,8 +372,8 @@ function mapHasSimilarEntry(map, key1, item1, usedEntries, strict, memo) {
381
372
if ( usedEntries && usedEntries . has ( key2 ) )
382
373
continue ;
383
374
384
- if ( _deepEqual ( key1 , key2 , strict , memo ) &&
385
- _deepEqual ( item1 , item2 , strict , memo ) ) {
375
+ if ( innerDeepEqual ( key1 , key2 , strict , memo ) &&
376
+ innerDeepEqual ( item1 , item2 , strict , memo ) ) {
386
377
if ( usedEntries )
387
378
usedEntries . add ( key2 ) ;
388
379
return true ;
@@ -459,44 +450,39 @@ function objEquiv(a, b, strict, actualVisitedObjects) {
459
450
// Possibly expensive deep test:
460
451
for ( i = aKeys . length - 1 ; i >= 0 ; i -- ) {
461
452
key = aKeys [ i ] ;
462
- if ( ! _deepEqual ( a [ key ] , b [ key ] , strict , actualVisitedObjects ) )
453
+ if ( ! innerDeepEqual ( a [ key ] , b [ key ] , strict , actualVisitedObjects ) )
463
454
return false ;
464
455
}
465
456
return true ;
466
457
}
467
458
468
459
// The non-equivalence assertion tests for any deep inequality.
469
- // assert.notDeepEqual(actual, expected, message_opt);
470
-
471
460
assert . notDeepEqual = function notDeepEqual ( actual , expected , message ) {
472
- if ( _deepEqual ( actual , expected , false ) ) {
473
- fail ( actual , expected , message , 'notDeepEqual' , assert . notDeepEqual ) ;
461
+ if ( innerDeepEqual ( actual , expected , false ) ) {
462
+ innerFail ( actual , expected , message , 'notDeepEqual' , notDeepEqual ) ;
474
463
}
475
464
} ;
476
465
477
466
assert . notDeepStrictEqual = notDeepStrictEqual ;
478
467
function notDeepStrictEqual ( actual , expected , message ) {
479
- if ( _deepEqual ( actual , expected , true ) ) {
480
- fail ( actual , expected , message , 'notDeepStrictEqual' , notDeepStrictEqual ) ;
468
+ if ( innerDeepEqual ( actual , expected , true ) ) {
469
+ innerFail ( actual , expected , message , 'notDeepStrictEqual' ,
470
+ notDeepStrictEqual ) ;
481
471
}
482
472
}
483
473
484
474
// The strict equality assertion tests strict equality, as determined by ===.
485
- // assert.strictEqual(actual, expected, message_opt);
486
-
487
475
assert . strictEqual = function strictEqual ( actual , expected , message ) {
488
476
if ( actual !== expected ) {
489
- fail ( actual , expected , message , '===' , assert . strictEqual ) ;
477
+ innerFail ( actual , expected , message , '===' , strictEqual ) ;
490
478
}
491
479
} ;
492
480
493
481
// The strict non-equality assertion tests for strict inequality, as
494
482
// determined by !==.
495
- // assert.notStrictEqual(actual, expected, message_opt);
496
-
497
483
assert . notStrictEqual = function notStrictEqual ( actual , expected , message ) {
498
484
if ( actual === expected ) {
499
- fail ( actual , expected , message , '!==' , assert . notStrictEqual ) ;
485
+ innerFail ( actual , expected , message , '!==' , notStrictEqual ) ;
500
486
}
501
487
} ;
502
488
@@ -525,7 +511,7 @@ function expectedException(actual, expected) {
525
511
return expected . call ( { } , actual ) === true ;
526
512
}
527
513
528
- function _tryBlock ( block ) {
514
+ function tryBlock ( block ) {
529
515
var error ;
530
516
try {
531
517
block ( ) ;
@@ -535,7 +521,7 @@ function _tryBlock(block) {
535
521
return error ;
536
522
}
537
523
538
- function _throws ( shouldThrow , block , expected , message ) {
524
+ function innerThrows ( shouldThrow , block , expected , message ) {
539
525
var actual ;
540
526
541
527
if ( typeof block !== 'function' ) {
@@ -549,13 +535,13 @@ function _throws(shouldThrow, block, expected, message) {
549
535
expected = null ;
550
536
}
551
537
552
- actual = _tryBlock ( block ) ;
538
+ actual = tryBlock ( block ) ;
553
539
554
540
message = ( expected && expected . name ? ' (' + expected . name + ')' : '' ) +
555
541
( message ? ': ' + message : '.' ) ;
556
542
557
543
if ( shouldThrow && ! actual ) {
558
- fail ( actual , expected , 'Missing expected exception' + message ) ;
544
+ innerFail ( actual , expected , 'Missing expected exception' + message , fail ) ;
559
545
}
560
546
561
547
const userProvidedMessage = typeof message === 'string' ;
@@ -566,7 +552,7 @@ function _throws(shouldThrow, block, expected, message) {
566
552
userProvidedMessage &&
567
553
expectedException ( actual , expected ) ) ||
568
554
isUnexpectedException ) {
569
- fail ( actual , expected , 'Got unwanted exception' + message ) ;
555
+ innerFail ( actual , expected , 'Got unwanted exception' + message , fail ) ;
570
556
}
571
557
572
558
if ( ( shouldThrow && actual && expected &&
@@ -576,16 +562,12 @@ function _throws(shouldThrow, block, expected, message) {
576
562
}
577
563
578
564
// Expected to throw an error.
579
- // assert.throws(block, Error_opt, message_opt);
580
-
581
- assert . throws = function throws ( block , /*optional*/ error , /*optional*/ message ) {
582
- _throws ( true , block , error , message ) ;
565
+ assert . throws = function throws ( block , error , message ) {
566
+ innerThrows ( true , block , error , message ) ;
583
567
} ;
584
568
585
- // EXTENSION! This is annoying to write outside this module.
586
- assert . doesNotThrow = doesNotThrow ;
587
- function doesNotThrow ( block , /*optional*/ error , /*optional*/ message ) {
588
- _throws ( false , block , error , message ) ;
589
- }
569
+ assert . doesNotThrow = function doesNotThrow ( block , error , message ) {
570
+ innerThrows ( false , block , error , message ) ;
571
+ } ;
590
572
591
573
assert . ifError = function ifError ( err ) { if ( err ) throw err ; } ;
0 commit comments