diff options
-rw-r--r-- | lib/assert.js | 18 | ||||
-rw-r--r-- | lib/util.js | 13 |
2 files changed, 22 insertions, 9 deletions
diff --git a/lib/assert.js b/lib/assert.js index 91205af09e..4dafdd2bf0 100644 --- a/lib/assert.js +++ b/lib/assert.js @@ -21,10 +21,6 @@ 'use strict'; const { Buffer } = require('buffer'); -const { - isDeepEqual, - isDeepStrictEqual -} = require('internal/util/comparisons'); const { codes: { ERR_AMBIGUOUS_ARGUMENT, ERR_INVALID_ARG_TYPE, @@ -37,6 +33,15 @@ const { inspect, types: { isPromise, isRegExp } } = require('util'); const { EOL } = require('internal/constants'); const { NativeModule } = require('internal/bootstrap/loaders'); +let isDeepEqual; +let isDeepStrictEqual; + +function lazyLoadComparison() { + const comparison = require('internal/util/comparisons'); + isDeepEqual = comparison.isDeepEqual; + isDeepStrictEqual = comparison.isDeepStrictEqual; +} + // Escape control characters but not \n and \t to keep the line breaks and // indentation intact. // eslint-disable-next-line no-control-regex @@ -285,6 +290,7 @@ assert.notEqual = function notEqual(actual, expected, message) { // The equivalence assertion tests a deep equality relation. assert.deepEqual = function deepEqual(actual, expected, message) { + if (isDeepEqual === undefined) lazyLoadComparison(); if (!isDeepEqual(actual, expected)) { innerFail({ actual, @@ -298,6 +304,7 @@ assert.deepEqual = function deepEqual(actual, expected, message) { // The non-equivalence assertion tests for any deep inequality. assert.notDeepEqual = function notDeepEqual(actual, expected, message) { + if (isDeepEqual === undefined) lazyLoadComparison(); if (isDeepEqual(actual, expected)) { innerFail({ actual, @@ -311,6 +318,7 @@ assert.notDeepEqual = function notDeepEqual(actual, expected, message) { /* eslint-enable */ assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) { + if (isDeepEqual === undefined) lazyLoadComparison(); if (!isDeepStrictEqual(actual, expected)) { innerFail({ actual, @@ -324,6 +332,7 @@ assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) { assert.notDeepStrictEqual = notDeepStrictEqual; function notDeepStrictEqual(actual, expected, message) { + if (isDeepEqual === undefined) lazyLoadComparison(); if (isDeepStrictEqual(actual, expected)) { innerFail({ actual, @@ -437,6 +446,7 @@ function expectedException(actual, expected, msg) { throw new ERR_INVALID_ARG_VALUE('error', expected, 'may not be an empty object'); } + if (isDeepEqual === undefined) lazyLoadComparison(); for (const key of keys) { if (typeof actual[key] === 'string' && isRegExp(expected[key]) && diff --git a/lib/util.js b/lib/util.js index 45d98de194..bd7a98694b 100644 --- a/lib/util.js +++ b/lib/util.js @@ -65,10 +65,6 @@ const { } = types; const { - isDeepStrictEqual -} = require('internal/util/comparisons'); - -const { customInspectSymbol, deprecate, getSystemErrorName: internalErrorName, @@ -95,6 +91,7 @@ const dateToISOString = Date.prototype.toISOString; const errorToString = Error.prototype.toString; let CIRCULAR_ERROR_MESSAGE; +let internalDeepEqual; /* eslint-disable */ const strEscapeSequencesRegExp = /[\x00-\x1f\x27\x5c]/; @@ -1261,7 +1258,13 @@ module.exports = exports = { isArray: Array.isArray, isBoolean, isBuffer, - isDeepStrictEqual, + isDeepStrictEqual(a, b) { + if (internalDeepEqual === undefined) { + internalDeepEqual = require('internal/util/comparisons') + .isDeepStrictEqual; + } + return internalDeepEqual(a, b); + }, isNull, isNullOrUndefined, isNumber, |