mirror of
https://github.com/oven-sh/bun
synced 2026-02-10 10:58:56 +00:00
* 1st revision of new util.inspect impl. (not done)
* fix util.types.isArrayBuffer
* fix some utl tests and bugs
* fix node:tty missing primordials
* fix utl stackoverflow handling & some tests
* narrow down diff. context test
* util.inspect indirect circulars optimization
* temp workaround for buggy is...Function checks
* impl. Map/Set/Iterator entries inspection
* fix bigint & symbol objects inspection
* error inspection fixes
* misc util tests stuff
* inline getExternalValue stub
* leftovers
* util.inspect promise internals
* run bun fmt
* commit make js changes
* cut out unnecessary utl files
* reorganize utl folder structure
* remove browserify buffer check
* Try to revert git messing up uws somehow
This reverts commit 2c27e16e7d.
* commit src/js/out files again
* redo this edit too
* refresh js/out files
* Removed uws submodule
* tidy up
* unused primordials
* run fmt
---------
Co-authored-by: dave caruso <me@paperdave.net>
178 lines
5.8 KiB
JavaScript
178 lines
5.8 KiB
JavaScript
import assert from "assert";
|
|
import util from "util";
|
|
const opts = { showProxy: true };
|
|
|
|
test("no assertion failures", () => {
|
|
let proxyObj;
|
|
let called = false;
|
|
const target = {
|
|
[util.inspect.custom](depth, { showProxy }) {
|
|
if (showProxy === false) {
|
|
called = true;
|
|
if (proxyObj !== this) {
|
|
throw new Error("Failed");
|
|
}
|
|
}
|
|
return [1, 2, 3];
|
|
},
|
|
};
|
|
const handler = {
|
|
getPrototypeOf() {
|
|
throw new Error("getPrototypeOf");
|
|
},
|
|
setPrototypeOf() {
|
|
throw new Error("setPrototypeOf");
|
|
},
|
|
isExtensible() {
|
|
throw new Error("isExtensible");
|
|
},
|
|
preventExtensions() {
|
|
throw new Error("preventExtensions");
|
|
},
|
|
getOwnPropertyDescriptor() {
|
|
throw new Error("getOwnPropertyDescriptor");
|
|
},
|
|
defineProperty() {
|
|
throw new Error("defineProperty");
|
|
},
|
|
has() {
|
|
throw new Error("has");
|
|
},
|
|
get(_, key) {
|
|
throw new Error("get: " + String(key));
|
|
},
|
|
set() {
|
|
throw new Error("set");
|
|
},
|
|
deleteProperty() {
|
|
throw new Error("deleteProperty");
|
|
},
|
|
ownKeys() {
|
|
throw new Error("ownKeys");
|
|
},
|
|
apply() {
|
|
throw new Error("apply");
|
|
},
|
|
construct() {
|
|
throw new Error("construct");
|
|
},
|
|
};
|
|
proxyObj = new Proxy(target, handler);
|
|
|
|
// Inspecting the proxy should not actually walk it's properties
|
|
util.inspect(proxyObj, opts);
|
|
|
|
// Make sure inspecting object does not trigger any proxy traps.
|
|
util.format("%s", proxyObj);
|
|
|
|
const r = Proxy.revocable({}, {});
|
|
r.revoke();
|
|
|
|
assert.strictEqual(util.inspect(r.proxy), "<Revoked Proxy>");
|
|
assert.strictEqual(
|
|
util.inspect(r, { showProxy: true }),
|
|
"{ proxy: <Revoked Proxy>, revoke: [Function (anonymous)] }",
|
|
);
|
|
|
|
assert.strictEqual(util.format("%s", r.proxy), "<Revoked Proxy>");
|
|
|
|
assert.strictEqual(
|
|
util.inspect(proxyObj, opts),
|
|
"Proxy [\n" +
|
|
" [ 1, 2, 3 ],\n" +
|
|
" {\n" +
|
|
" getPrototypeOf: [Function: getPrototypeOf],\n" +
|
|
" setPrototypeOf: [Function: setPrototypeOf],\n" +
|
|
" isExtensible: [Function: isExtensible],\n" +
|
|
" preventExtensions: [Function: preventExtensions],\n" +
|
|
" getOwnPropertyDescriptor: [Function: getOwnPropertyDescriptor],\n" +
|
|
" defineProperty: [Function: defineProperty],\n" +
|
|
" has: [Function: has],\n" +
|
|
" get: [Function: get],\n" +
|
|
" set: [Function: set],\n" +
|
|
" deleteProperty: [Function: deleteProperty],\n" +
|
|
" ownKeys: [Function: ownKeys],\n" +
|
|
" apply: [Function: apply],\n" +
|
|
" construct: [Function: construct]\n" +
|
|
" }\n" +
|
|
"]",
|
|
);
|
|
|
|
// Inspecting a proxy without the showProxy option set to true should not
|
|
// trigger any proxy handlers.
|
|
assert.strictEqual(util.inspect(proxyObj), "[ 1, 2, 3 ]");
|
|
assert(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 [\n " +
|
|
"Proxy [ Proxy [ Proxy [Array], {} ], Proxy [ {}, {} ] ],\n" +
|
|
" Proxy [ Proxy [ {}, {} ], Proxy [ Proxy [Array], {} ] ]" +
|
|
"\n]";
|
|
const expected6 =
|
|
"Proxy [\n" +
|
|
" Proxy [\n" +
|
|
" Proxy [ Proxy [Array], Proxy [Array] ],\n" +
|
|
" Proxy [ Proxy [Array], Proxy [Array] ]\n" +
|
|
" ],\n" +
|
|
" Proxy [\n" +
|
|
" Proxy [ Proxy [Array], Proxy [Array] ],\n" +
|
|
" Proxy [ Proxy [Array], Proxy [Array] ]\n" +
|
|
" ]\n" +
|
|
"]";
|
|
assert.strictEqual(util.inspect(proxy1, { showProxy: 1, 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]");
|
|
|
|
const proxy10 = new Proxy(() => {}, {});
|
|
const proxy11 = new Proxy(() => {}, {
|
|
get() {
|
|
return proxy11;
|
|
},
|
|
apply() {
|
|
return proxy11;
|
|
},
|
|
});
|
|
const expected10 = "[Function (anonymous)]";
|
|
const expected11 = "[Function (anonymous)]";
|
|
assert.strictEqual(util.inspect(proxy10), expected10);
|
|
assert.strictEqual(util.inspect(proxy11), expected11);
|
|
});
|