diff options
Diffstat (limited to 'js')
-rw-r--r-- | js/console.ts | 8 | ||||
-rw-r--r-- | js/console_test.ts | 11 |
2 files changed, 18 insertions, 1 deletions
diff --git a/js/console.ts b/js/console.ts index bde912dd6..b68794d3f 100644 --- a/js/console.ts +++ b/js/console.ts @@ -23,6 +23,8 @@ const DEFAULT_MAX_DEPTH = 4; // form. const OBJ_ABBREVIATE_SIZE = 5; +const STR_ABBREVIATE_SIZE = 100; + // Char codes const CHAR_PERCENT = 37; /* % */ const CHAR_LOWERCASE_S = 115; /* s */ @@ -151,7 +153,11 @@ function stringifyWithQuotes( ): string { switch (typeof value) { case "string": - return `"${value}"`; + const trunc = + value.length > STR_ABBREVIATE_SIZE + ? value.slice(0, STR_ABBREVIATE_SIZE) + "..." + : value; + return JSON.stringify(trunc); default: return stringify(value, ctx, level, maxLevel); } diff --git a/js/console_test.ts b/js/console_test.ts index 994f0ecfd..b20a60197 100644 --- a/js/console_test.ts +++ b/js/console_test.ts @@ -31,6 +31,17 @@ test(function consoleTestStringifyComplexObjects() { assertEquals(stringify({ foo: "bar" }), `{ foo: "bar" }`); }); +test(function consoleTestStringifyLongStrings() { + const veryLongString = "a".repeat(200); + // If we stringify an object containing the long string, it gets abbreviated. + let actual = stringify({ veryLongString }); + assert(actual.includes("...")); + assert(actual.length < 200); + // However if we stringify the string itself, we get it exactly. + actual = stringify(veryLongString); + assertEquals(actual, veryLongString); +}); + test(function consoleTestStringifyCircular() { class Base { a = 1; |