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