From 1aa6e993e327d8546ccc6107cd9dc1a7c720cd7d Mon Sep 17 00:00:00 2001 From: Ruben Bridgewater Date: Tue, 26 Mar 2019 08:39:07 +0100 Subject: [PATCH] util: fix map entries inspection MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This makes sure the arrays returned by Map#entries() are handled as any other array instead of just visualizing the entries as array. Therefore options should have an impact on the arrays. PR-URL: https://github.com/nodejs/node/pull/26918 Reviewed-By: Anna Henningsen Reviewed-By: Michaƫl Zasso Signed-off-by: Beth Griggs --- lib/internal/util/inspect.js | 29 +++++++++++++++-------------- test/parallel/test-util-inspect.js | 5 ++++- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/lib/internal/util/inspect.js b/lib/internal/util/inspect.js index f26b35b2874846..510b290ca35696 100644 --- a/lib/internal/util/inspect.js +++ b/lib/internal/util/inspect.js @@ -1156,27 +1156,28 @@ function formatMapIterInner(ctx, recurseTimes, entries, state) { const remaining = len - maxArrayLength; const maxLength = Math.min(maxArrayLength, len); let output = new Array(maxLength); - let start = ''; - let end = ''; - let middle = ' => '; let i = 0; - if (state === kMapEntries) { - start = '[ '; - end = ' ]'; - middle = ', '; - } ctx.indentationLvl += 2; - for (; i < maxLength; i++) { - const pos = i * 2; - output[i] = `${start}${formatValue(ctx, entries[pos], recurseTimes)}` + - `${middle}${formatValue(ctx, entries[pos + 1], recurseTimes)}${end}`; - } - ctx.indentationLvl -= 2; if (state === kWeak) { + for (; i < maxLength; i++) { + const pos = i * 2; + output[i] = `${formatValue(ctx, entries[pos], recurseTimes)}` + + ` => ${formatValue(ctx, entries[pos + 1], recurseTimes)}`; + } // Sort all entries to have a halfway reliable output (if more entries // than retrieved ones exist, we can not reliably return the same output). output = output.sort(); + } else { + for (; i < maxLength; i++) { + const pos = i * 2; + const res = [ + formatValue(ctx, entries[pos], recurseTimes), + formatValue(ctx, entries[pos + 1], recurseTimes) + ]; + output[i] = reduceToSingleString(ctx, res, '', ['[', ']']); + } } + ctx.indentationLvl -= 2; if (remaining > 0) { output.push(`... ${remaining} more item${remaining > 1 ? 's' : ''}`); } diff --git a/test/parallel/test-util-inspect.js b/test/parallel/test-util-inspect.js index 6c6d210dfe7fc6..282c31213c7e72 100644 --- a/test/parallel/test-util-inspect.js +++ b/test/parallel/test-util-inspect.js @@ -997,7 +997,10 @@ if (typeof Symbol !== 'undefined') { // Test Set iterators. { - const aSet = new Set([1, 3]); + const aSet = new Set([1]); + assert.strictEqual(util.inspect(aSet.entries(), { compact: false }), + '[Set Entries] {\n [\n 1,\n 1\n ]\n}'); + aSet.add(3); assert.strictEqual(util.inspect(aSet.keys()), '[Set Iterator] { 1, 3 }'); assert.strictEqual(util.inspect(aSet.values()), '[Set Iterator] { 1, 3 }'); const setEntries = aSet.entries();