@@ -13,10 +13,13 @@ let white = '';
1313const kReadableOperator = {
1414 deepStrictEqual : 'Expected inputs to be strictly deep-equal:' ,
1515 strictEqual : 'Expected inputs to be strictly equal:' ,
16+ strictEqualObject : 'Expected "actual" to be reference-equal to "expected":' ,
1617 deepEqual : 'Expected inputs to be loosely deep-equal:' ,
1718 equal : 'Expected inputs to be loosely equal:' ,
1819 notDeepStrictEqual : 'Expected "actual" not to be strictly deep-equal to:' ,
1920 notStrictEqual : 'Expected "actual" to be strictly unequal to:' ,
21+ // eslint-disable-next-line max-len
22+ notStrictEqualObject : 'Expected "actual" not to be reference-equal to "expected":' ,
2023 notDeepEqual : 'Expected "actual" not to be loosely deep-equal to:' ,
2124 notEqual : 'Expected "actual" to be loosely unequal to:' ,
2225 notIdentical : 'Inputs identical but not reference equal:' ,
@@ -67,13 +70,20 @@ function createErrDiff(actual, expected, operator) {
6770 const actualInspected = inspectValue ( actual ) ;
6871 const actualLines = actualInspected . split ( '\n' ) ;
6972 const expectedLines = inspectValue ( expected ) . split ( '\n' ) ;
70- const msg = kReadableOperator [ operator ] +
71- `\n${ green } + actual${ white } ${ red } - expected${ white } ` ;
72- const skippedMsg = ` ${ blue } ...${ white } Lines skipped` ;
7373
7474 let i = 0 ;
7575 let indicator = '' ;
7676
77+ // In case both inputs are objects explicitly mark them as not reference equal
78+ // for the `strictEqual` operator.
79+ if ( operator === 'strictEqual' &&
80+ typeof actual === 'object' &&
81+ typeof expected === 'object' &&
82+ actual !== null &&
83+ expected !== null ) {
84+ operator = 'strictEqualObject' ;
85+ }
86+
7787 // If "actual" and "expected" fit on a single line and they are not strictly
7888 // equal, check further special handling.
7989 if ( actualLines . length === 1 && expectedLines . length === 1 &&
@@ -89,7 +99,7 @@ function createErrDiff(actual, expected, operator) {
8999 return `${ kReadableOperator [ operator ] } \n\n` +
90100 `${ actualLines [ 0 ] } !== ${ expectedLines [ 0 ] } \n` ;
91101 }
92- } else {
102+ } else if ( operator !== 'strictEqualObject' ) {
93103 // If the stderr is a tty and the input length is lower than the current
94104 // columns per line, add a mismatch indicator below the output. If it is
95105 // not a tty, use a default value of 80 characters.
@@ -156,6 +166,10 @@ function createErrDiff(actual, expected, operator) {
156166 }
157167
158168 let printedLines = 0 ;
169+ const msg = kReadableOperator [ operator ] +
170+ `\n${ green } + actual${ white } ${ red } - expected${ white } ` ;
171+ const skippedMsg = ` ${ blue } ...${ white } Lines skipped` ;
172+
159173 for ( i = 0 ; i < maxLines ; i ++ ) {
160174 // Only extra expected lines exist
161175 const cur = i - lastPos ;
@@ -274,8 +288,15 @@ class AssertionError extends Error {
274288 operator === 'notStrictEqual' ) {
275289 // In case the objects are equal but the operator requires unequal, show
276290 // the first object and say A equals B
291+ let base = kReadableOperator [ operator ] ;
277292 const res = inspectValue ( actual ) . split ( '\n' ) ;
278- const base = kReadableOperator [ operator ] ;
293+
294+ // In case "actual" is an object, it should not be reference equal.
295+ if ( operator === 'notStrictEqual' &&
296+ typeof actual === 'object' &&
297+ actual !== null ) {
298+ base = kReadableOperator . notStrictEqualObject ;
299+ }
279300
280301 // Only remove lines in case it makes sense to collapse those.
281302 // TODO: Accept env to always show the full error.
0 commit comments