util: inspect()
should not exceed breakLength
Using `util.inspect()` with the `compact` option set to a number could result in output that exceeded the `breakLength` option. This change makes sure that limit is taken into account. PR-URL: https://github.com/nodejs/node/pull/26914 Reviewed-By: Michaël Zasso <targos@protonmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
This commit is contained in:
parent
7aa7971eec
commit
e1e9f1e9ee
@ -18,8 +18,8 @@ const kReadableOperator = {
|
||||
equal: 'Expected values to be loosely equal:',
|
||||
notDeepStrictEqual: 'Expected "actual" not to be strictly deep-equal to:',
|
||||
notStrictEqual: 'Expected "actual" to be strictly unequal to:',
|
||||
// eslint-disable-next-line max-len
|
||||
notStrictEqualObject: 'Expected "actual" not to be reference-equal to "expected":',
|
||||
notStrictEqualObject:
|
||||
'Expected "actual" not to be reference-equal to "expected":',
|
||||
notDeepEqual: 'Expected "actual" not to be loosely deep-equal to:',
|
||||
notEqual: 'Expected "actual" to be loosely unequal to:',
|
||||
notIdentical: 'Values identical but not reference-equal:',
|
||||
@ -52,7 +52,10 @@ function inspectValue(val) {
|
||||
// Assert compares only enumerable properties (with a few exceptions).
|
||||
showHidden: false,
|
||||
// Having a long line as error is better than wrapping the line for
|
||||
// comparison.
|
||||
// comparison for now.
|
||||
// TODO(BridgeAR): `breakLength` should be limited as soon as soon as we
|
||||
// have meta information about the inspected properties (i.e., know where
|
||||
// in what line the property starts and ends).
|
||||
breakLength: Infinity,
|
||||
// Assert does not detect proxies currently.
|
||||
showProxy: false,
|
||||
|
@ -913,6 +913,8 @@ function groupArrayElements(ctx, output) {
|
||||
approxCharHeights * (actualMax - bias) * output.length
|
||||
) / (actualMax - bias)
|
||||
),
|
||||
// Do not exceed the breakLength.
|
||||
Math.floor((ctx.breakLength - ctx.indentationLvl) / actualMax),
|
||||
// Limit array grouping for small `compact` modes as the user requested
|
||||
// minimal grouping.
|
||||
ctx.compact * 3,
|
||||
|
@ -2233,4 +2233,94 @@ assert.strictEqual(
|
||||
'\u001b[33m3\u001b[39m, \u001b[33m4\u001b[39m ]';
|
||||
|
||||
assert.strictEqual(out, expected);
|
||||
|
||||
obj = [
|
||||
'Object', 'Function', 'Array',
|
||||
'Number', 'parseFloat', 'parseInt',
|
||||
'Infinity', 'NaN', 'undefined',
|
||||
'Boolean', 'String', 'Symbol',
|
||||
'Date', 'Promise', 'RegExp',
|
||||
'Error', 'EvalError', 'RangeError',
|
||||
'ReferenceError', 'SyntaxError', 'TypeError',
|
||||
'URIError', 'JSON', 'Math',
|
||||
'console', 'Intl', 'ArrayBuffer',
|
||||
'Uint8Array', 'Int8Array', 'Uint16Array',
|
||||
'Int16Array', 'Uint32Array', 'Int32Array',
|
||||
'Float32Array', 'Float64Array', 'Uint8ClampedArray',
|
||||
'BigUint64Array', 'BigInt64Array', 'DataView',
|
||||
'Map', 'BigInt', 'Set',
|
||||
'WeakMap', 'WeakSet', 'Proxy',
|
||||
'Reflect', 'decodeURI', 'decodeURIComponent',
|
||||
'encodeURI', 'encodeURIComponent', 'escape',
|
||||
'unescape', 'eval', 'isFinite',
|
||||
'isNaN', 'SharedArrayBuffer', 'Atomics',
|
||||
'globalThis', 'WebAssembly', 'global',
|
||||
'process', 'GLOBAL', 'root',
|
||||
'Buffer', 'URL', 'URLSearchParams',
|
||||
'TextEncoder', 'TextDecoder', 'clearInterval',
|
||||
'clearTimeout', 'setInterval', 'setTimeout',
|
||||
'queueMicrotask', 'clearImmediate', 'setImmediate',
|
||||
'module', 'require', 'assert',
|
||||
'async_hooks', 'buffer', 'child_process',
|
||||
'cluster', 'crypto', 'dgram',
|
||||
'dns', 'domain', 'events',
|
||||
'fs', 'http', 'http2',
|
||||
'https', 'inspector', 'net',
|
||||
'os', 'path', 'perf_hooks',
|
||||
'punycode', 'querystring', 'readline',
|
||||
'repl', 'stream', 'string_decoder',
|
||||
'tls', 'trace_events', 'tty',
|
||||
'url', 'v8', 'vm',
|
||||
'worker_threads', 'zlib', '_',
|
||||
'_error', 'util'
|
||||
];
|
||||
|
||||
out = util.inspect(
|
||||
obj,
|
||||
{ compact: 3, breakLength: 80, maxArrayLength: 250 }
|
||||
);
|
||||
expected = [
|
||||
'[',
|
||||
" 'Object', 'Function', 'Array',",
|
||||
" 'Number', 'parseFloat', 'parseInt',",
|
||||
" 'Infinity', 'NaN', 'undefined',",
|
||||
" 'Boolean', 'String', 'Symbol',",
|
||||
" 'Date', 'Promise', 'RegExp',",
|
||||
" 'Error', 'EvalError', 'RangeError',",
|
||||
" 'ReferenceError', 'SyntaxError', 'TypeError',",
|
||||
" 'URIError', 'JSON', 'Math',",
|
||||
" 'console', 'Intl', 'ArrayBuffer',",
|
||||
" 'Uint8Array', 'Int8Array', 'Uint16Array',",
|
||||
" 'Int16Array', 'Uint32Array', 'Int32Array',",
|
||||
" 'Float32Array', 'Float64Array', 'Uint8ClampedArray',",
|
||||
" 'BigUint64Array', 'BigInt64Array', 'DataView',",
|
||||
" 'Map', 'BigInt', 'Set',",
|
||||
" 'WeakMap', 'WeakSet', 'Proxy',",
|
||||
" 'Reflect', 'decodeURI', 'decodeURIComponent',",
|
||||
" 'encodeURI', 'encodeURIComponent', 'escape',",
|
||||
" 'unescape', 'eval', 'isFinite',",
|
||||
" 'isNaN', 'SharedArrayBuffer', 'Atomics',",
|
||||
" 'globalThis', 'WebAssembly', 'global',",
|
||||
" 'process', 'GLOBAL', 'root',",
|
||||
" 'Buffer', 'URL', 'URLSearchParams',",
|
||||
" 'TextEncoder', 'TextDecoder', 'clearInterval',",
|
||||
" 'clearTimeout', 'setInterval', 'setTimeout',",
|
||||
" 'queueMicrotask', 'clearImmediate', 'setImmediate',",
|
||||
" 'module', 'require', 'assert',",
|
||||
" 'async_hooks', 'buffer', 'child_process',",
|
||||
" 'cluster', 'crypto', 'dgram',",
|
||||
" 'dns', 'domain', 'events',",
|
||||
" 'fs', 'http', 'http2',",
|
||||
" 'https', 'inspector', 'net',",
|
||||
" 'os', 'path', 'perf_hooks',",
|
||||
" 'punycode', 'querystring', 'readline',",
|
||||
" 'repl', 'stream', 'string_decoder',",
|
||||
" 'tls', 'trace_events', 'tty',",
|
||||
" 'url', 'v8', 'vm',",
|
||||
" 'worker_threads', 'zlib', '_',",
|
||||
" '_error', 'util'",
|
||||
']'
|
||||
].join('\n');
|
||||
|
||||
assert.strictEqual(out, expected);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user