mirror of
https://github.com/nodejs/node.git
synced 2026-11-09 15:11:11 -05:00
This reverts commit b994b8eff6.
This caused regressions in ecosystem code. While the change originally
was semver-major and could be postponed until after Node.js 10,
I think reverting it is a good choice at this point.
Also, I personally do not think defaulting to a shallow inspect
is a bad thing at all – quite the opposite: It makes `util.inspect()`
give an overview of an object, rather than providing a full
display of its contents. Changing the `depth` default to infinity
fundamentally changed the role that `util.inspect()` plays,
and makes output much more verbose and thus at times unusable
for `console.log()`-style debugging.
PR-URL: https://github.com/nodejs/node/pull/20017
Fixes: https://github.com/nodejs/node/issues/19405
Refs: https://github.com/nodejs/node/pull/17907
Reviewed-By: Rich Trott <rtrott@gmail.com>
Reviewed-By: Tiancheng "Timothy" Gu <timothygu99@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
88 lines
3.6 KiB
JavaScript
88 lines
3.6 KiB
JavaScript
'use strict';
|
|
|
|
require('../common');
|
|
const assert = require('assert');
|
|
const util = require('util');
|
|
const processUtil = process.binding('util');
|
|
const opts = { showProxy: true };
|
|
|
|
const target = {};
|
|
const handler = {
|
|
get: function() { throw new Error('Getter should not be called'); }
|
|
};
|
|
const proxyObj = new Proxy(target, handler);
|
|
|
|
// Inspecting the proxy should not actually walk it's properties
|
|
util.inspect(proxyObj, opts);
|
|
|
|
// getProxyDetails is an internal method, not intended for public use.
|
|
// This is here to test that the internals are working correctly.
|
|
const details = processUtil.getProxyDetails(proxyObj);
|
|
assert.strictEqual(target, details[0]);
|
|
assert.strictEqual(handler, details[1]);
|
|
|
|
assert.strictEqual(util.inspect(proxyObj, opts),
|
|
'Proxy [ {}, { get: [Function: get] } ]');
|
|
|
|
// Using getProxyDetails with non-proxy returns undefined
|
|
assert.strictEqual(processUtil.getProxyDetails({}), undefined);
|
|
|
|
// This will throw because the showProxy option is not used
|
|
// and the get function on the handler object defined above
|
|
// is actually invoked.
|
|
assert.throws(
|
|
() => util.inspect(proxyObj),
|
|
/^Error: Getter should not be called$/
|
|
);
|
|
|
|
// Yo dawg, I heard you liked Proxy so I put a Proxy
|
|
// inside your Proxy that proxies your Proxy's Proxy.
|
|
const proxy1 = new Proxy({}, {});
|
|
const proxy2 = new Proxy(proxy1, {});
|
|
const proxy3 = new Proxy(proxy2, proxy1);
|
|
const proxy4 = new Proxy(proxy1, proxy2);
|
|
const proxy5 = new Proxy(proxy3, proxy4);
|
|
const proxy6 = new Proxy(proxy5, proxy5);
|
|
const expected0 = '{}';
|
|
const expected1 = 'Proxy [ {}, {} ]';
|
|
const expected2 = 'Proxy [ Proxy [ {}, {} ], {} ]';
|
|
const expected3 = 'Proxy [ Proxy [ Proxy [ {}, {} ], {} ], Proxy [ {}, {} ] ]';
|
|
const expected4 = 'Proxy [ Proxy [ {}, {} ], Proxy [ Proxy [ {}, {} ], {} ] ]';
|
|
const expected5 = 'Proxy [ Proxy [ Proxy [ Proxy [Array], {} ],' +
|
|
' Proxy [ {}, {} ] ],\n Proxy [ Proxy [ {}, {} ]' +
|
|
', Proxy [ Proxy [Array], {} ] ] ]';
|
|
const expected6 = 'Proxy [ Proxy [ Proxy [ Proxy [Array], Proxy [Array]' +
|
|
' ],\n Proxy [ Proxy [Array], Proxy [Array] ] ],\n' +
|
|
' Proxy [ Proxy [ Proxy [Array], Proxy [Array] ],\n' +
|
|
' Proxy [ Proxy [Array], Proxy [Array] ] ] ]';
|
|
assert.strictEqual(
|
|
util.inspect(proxy1, { showProxy: true, depth: null }),
|
|
expected1);
|
|
assert.strictEqual(util.inspect(proxy2, opts), expected2);
|
|
assert.strictEqual(util.inspect(proxy3, opts), expected3);
|
|
assert.strictEqual(util.inspect(proxy4, opts), expected4);
|
|
assert.strictEqual(util.inspect(proxy5, opts), expected5);
|
|
assert.strictEqual(util.inspect(proxy6, opts), expected6);
|
|
assert.strictEqual(util.inspect(proxy1), expected0);
|
|
assert.strictEqual(util.inspect(proxy2), expected0);
|
|
assert.strictEqual(util.inspect(proxy3), expected0);
|
|
assert.strictEqual(util.inspect(proxy4), expected0);
|
|
assert.strictEqual(util.inspect(proxy5), expected0);
|
|
assert.strictEqual(util.inspect(proxy6), expected0);
|
|
|
|
// Just for fun, let's create a Proxy using Arrays.
|
|
const proxy7 = new Proxy([], []);
|
|
const expected7 = 'Proxy [ [], [] ]';
|
|
assert.strictEqual(util.inspect(proxy7, opts), expected7);
|
|
assert.strictEqual(util.inspect(proxy7), '[]');
|
|
|
|
// Now we're just getting silly, right?
|
|
const proxy8 = new Proxy(Date, []);
|
|
const proxy9 = new Proxy(Date, String);
|
|
const expected8 = 'Proxy [ [Function: Date], [] ]';
|
|
const expected9 = 'Proxy [ [Function: Date], [Function: String] ]';
|
|
assert.strictEqual(util.inspect(proxy8, opts), expected8);
|
|
assert.strictEqual(util.inspect(proxy9, opts), expected9);
|
|
assert.strictEqual(util.inspect(proxy8), '[Function: Date]');
|
|
assert.strictEqual(util.inspect(proxy9), '[Function: Date]');
|