From 265a9fb9323a11067b4b826acc7624f2e62f1102 Mon Sep 17 00:00:00 2001 From: Yoshiya Hinosawa Date: Mon, 12 Oct 2020 05:04:26 +0900 Subject: fix(console): fix inspection of Function (#7930) This commit fixes the inspection of functions. The current implementation gets the name of the type of the function from "f.__proto__.constructor.name", and it throws when the prototype is set to null. This commit checks the prototype before accessing its constructor name and uses the generic name 'Function' if the prototype is not available. --- cli/tests/unit/console_test.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'cli/tests') diff --git a/cli/tests/unit/console_test.ts b/cli/tests/unit/console_test.ts index df1420345..00a5927b1 100644 --- a/cli/tests/unit/console_test.ts +++ b/cli/tests/unit/console_test.ts @@ -347,6 +347,21 @@ unitTest(function consoleTestStringifyCircular(): void { }); /* eslint-enable @typescript-eslint/explicit-function-return-type */ +unitTest(function consoleTestStringifyFunctionWithPrototypeRemoved(): void { + const f = function f() {}; + Reflect.setPrototypeOf(f, null); + assertEquals(stringify(f), "[Function: f]"); + const af = async function af() {}; + Reflect.setPrototypeOf(af, null); + assertEquals(stringify(af), "[Function: af]"); + const gf = function gf() {}; + Reflect.setPrototypeOf(gf, null); + assertEquals(stringify(gf), "[Function: gf]"); + const agf = function agf() {}; + Reflect.setPrototypeOf(agf, null); + assertEquals(stringify(agf), "[Function: agf]"); +}); + unitTest(function consoleTestStringifyWithDepth(): void { // eslint-disable-next-line @typescript-eslint/no-explicit-any const nestedObj: any = { a: { b: { c: { d: { e: { f: 42 } } } } } }; -- cgit v1.2.3