1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
const { truncate, pprint } = ChromeUtils.importESModule(
"chrome://remote/content/shared/Format.sys.mjs"
);
const MAX_STRING_LENGTH = 250;
const HALF = "x".repeat(MAX_STRING_LENGTH / 2);
add_task(function test_pprint() {
equal('[object Object] {"foo":"bar"}', pprint`${{ foo: "bar" }}`);
equal("[object Number] 42", pprint`${42}`);
equal("[object Boolean] true", pprint`${true}`);
equal("[object Undefined] undefined", pprint`${undefined}`);
equal("[object Null] null", pprint`${null}`);
let complexObj = { toJSON: () => "foo" };
equal('[object Object] "foo"', pprint`${complexObj}`);
let cyclic = {};
cyclic.me = cyclic;
equal("[object Object] <cyclic object value>", pprint`${cyclic}`);
let el = {
hasAttribute: attr => attr in el,
getAttribute: attr => (attr in el ? el[attr] : null),
nodeType: 1,
localName: "input",
id: "foo",
class: "a b",
href: "#",
name: "bar",
src: "s",
type: "t",
};
equal(
'<input id="foo" class="a b" href="#" name="bar" src="s" type="t">',
pprint`${el}`
);
});
add_task(function test_truncate_empty() {
equal(truncate``, "");
});
add_task(function test_truncate_noFields() {
equal(truncate`foo bar`, "foo bar");
});
add_task(function test_truncate_multipleFields() {
equal(truncate`${0}`, "0");
equal(truncate`${1}${2}${3}`, "123");
equal(truncate`a${1}b${2}c${3}`, "a1b2c3");
});
add_task(function test_truncate_primitiveFields() {
equal(truncate`${123}`, "123");
equal(truncate`${true}`, "true");
equal(truncate`${null}`, "");
equal(truncate`${undefined}`, "");
});
add_task(function test_truncate_string() {
equal(truncate`${"foo"}`, "foo");
equal(truncate`${"x".repeat(250)}`, "x".repeat(250));
equal(truncate`${"x".repeat(260)}`, `${HALF} ... ${HALF}`);
});
add_task(function test_truncate_array() {
equal(truncate`${["foo"]}`, JSON.stringify(["foo"]));
equal(truncate`${"foo"} ${["bar"]}`, `foo ${JSON.stringify(["bar"])}`);
equal(
truncate`${["x".repeat(260)]}`,
JSON.stringify([`${HALF} ... ${HALF}`])
);
});
add_task(function test_truncate_object() {
equal(truncate`${{}}`, JSON.stringify({}));
equal(truncate`${{ foo: "bar" }}`, JSON.stringify({ foo: "bar" }));
equal(
truncate`${{ foo: "x".repeat(260) }}`,
JSON.stringify({ foo: `${HALF} ... ${HALF}` })
);
equal(truncate`${{ foo: ["bar"] }}`, JSON.stringify({ foo: ["bar"] }));
equal(
truncate`${{ foo: ["bar", { baz: 42 }] }}`,
JSON.stringify({ foo: ["bar", { baz: 42 }] })
);
let complex = {
toString() {
return "hello world";
},
};
equal(truncate`${complex}`, "hello world");
let longComplex = {
toString() {
return "x".repeat(260);
},
};
equal(truncate`${longComplex}`, `${HALF} ... ${HALF}`);
});
|