From 842627d6b905f71aea821c426a886022b07270a5 Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Tue, 19 Mar 2019 13:52:25 -0400 Subject: [PATCH] pretty-print long strings --- js/console.ts | 8 +++++++- js/console_test.ts | 11 +++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/js/console.ts b/js/console.ts index bde912dd69..b68794d3ff 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 994f0ecfd2..b20a601973 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;