Bug 1883912: Enable Intl.ListFormat test for "unit" style. r=spidermonkey-reviewers...
[gecko.git] / editor / libeditor / tests / test_handle_new_lines.html
blob0e5825aaad290deb79a9f76694fd46db0adfccd4
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <title>Test for TextEditor::HandleNewLinesInStringForSingleLineEditor()</title>
5 <script src="/tests/SimpleTest/SimpleTest.js"></script>
6 <script src="/tests/SimpleTest/EventUtils.js"></script>
7 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
8 </head>
9 <body>
10 <p id="display"></p>
11 <div id="content" style="display: none;">
13 </div>
15 <div id="container"></div>
17 <textarea id="toCopyPlaintext" style="display: none;"></textarea>
19 <pre id="test">
21 <script class="testbody" type="application/javascript">
22 SimpleTest.waitForExplicitFinish();
24 async function copyPlaintext(aText) {
25 return new Promise(resolve => {
26 SimpleTest.waitForClipboard(
27 aText.replace(/\r\n?/g, "\n"),
28 () => {
29 let element = document.getElementById("toCopyPlaintext");
30 element.style.display = "block";
31 element.focus();
32 element.value = aText;
33 synthesizeKey("a", {accelKey: true});
34 synthesizeKey("c", {accelKey: true});
36 () => {
37 ok(true, `Succeeded to copy "${aText.replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/ /g, "\u00A0")}" to clipboard`);
38 let element = document.getElementById("toCopyPlaintext");
39 element.style.display = "none";
40 resolve();
42 () => {
43 SimpleTest.finish();
44 });
45 });
48 async function doTests() {
49 // nsIEditor::eNewlinesPasteIntact (0):
50 // only remove the leading and trailing newlines.
51 // nsIEditor::eNewlinesPasteToFirst (1) or any other value:
52 // remove the first newline and all characters following it.
53 // nsIEditor::eNewlinesReplaceWithSpaces (2, Firefox default):
54 // replace newlines with spaces.
55 // nsIEditor::eNewlinesStrip (3):
56 // remove newlines from the string.
57 // nsIEditor::eNewlinesReplaceWithCommas (4, Thunderbird default):
58 // replace newlines with commas.
59 // nsIEditor::eNewlinesStripSurroundingWhitespace (5):
60 // collapse newlines and surrounding whitespace characters and
61 // remove them from the string.
63 // value: setting or pasting text.
64 // expected: array of final values for each above pref value.
65 // setValue: expected result when HTMLInputElement.value is set to the value.
66 // pasteValue: expected result when pasting the value from clipboard.
68 // Note that HTMLInputElement strips both \r and \n. Therefore, each expected
69 // result is different from pasting the value.
70 const kTests = [
71 { value: "\nabc\ndef\n",
72 expected: [{ setValue: "abcdef", pasteValue: "abc\ndef" },
73 { setValue: "abcdef", pasteValue: "abc" },
74 { setValue: "abcdef", pasteValue: " abc def" },
75 { setValue: "abcdef", pasteValue: "abcdef" },
76 { setValue: "abcdef", pasteValue: "abc,def" },
77 { setValue: "abcdef", pasteValue: "abcdef" }],
79 { value: "\n abc \n def \n",
80 expected: [{ setValue: " abc def ", pasteValue: " abc \n def " },
81 { setValue: " abc def ", pasteValue: " abc " },
82 { setValue: " abc def ", pasteValue: " abc def " },
83 { setValue: " abc def ", pasteValue: " abc def " },
84 { setValue: " abc def ", pasteValue: " abc , def " },
85 { setValue: " abc def ", pasteValue: "abcdef" }],
87 { value: " abc \n def ",
88 expected: [{ setValue: " abc def ", pasteValue: " abc \n def " },
89 { setValue: " abc def ", pasteValue: " abc " },
90 { setValue: " abc def ", pasteValue: " abc def " },
91 { setValue: " abc def ", pasteValue: " abc def " },
92 { setValue: " abc def ", pasteValue: " abc , def " },
93 { setValue: " abc def ", pasteValue: " abcdef " }],
97 let container = document.getElementById("container");
98 for (let i = 0; i <= 5; i++) {
99 await SpecialPowers.pushPrefEnv({"set": [["editor.singleLine.pasteNewlines", i]]});
100 container.innerHTML = `<input id="input${i}" type="text">`;
101 let input = document.getElementById(`input${i}`);
102 input.focus();
103 let editor = SpecialPowers.wrap(input).editor;
104 for (const kLineBreaker of ["\n", "\r", "\r\n"]) {
105 for (let kTest of kTests) {
106 let value = kTest.value.replace(/\n/g, kLineBreaker);
107 input.value = value;
108 is(editor.rootElement.firstChild.wholeText, kTest.expected[i].setValue,
109 `Setting value to "${value.replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/ /g, "\u00A0")}" when pref is ${i}`);
110 input.value = "";
112 await copyPlaintext(value);
113 input.focus();
114 synthesizeKey("v", {accelKey: true});
115 is(editor.rootElement.firstChild.wholeText, kTest.expected[i].pasteValue,
116 `Pasting "${value.replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/ /g, "\u00A0")}" when pref is ${i}`);
117 input.value = "";
122 SimpleTest.finish();
125 SimpleTest.waitForFocus(doTests);
126 </script>
127 </pre>
128 </body>
129 </html>