summaryrefslogtreecommitdiff
path: root/js
diff options
context:
space:
mode:
Diffstat (limited to 'js')
-rw-r--r--js/console.ts8
-rw-r--r--js/console_test.ts11
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;