зеркало из https://github.com/mozilla/gecko-dev.git
130 строки
5.2 KiB
HTML
130 строки
5.2 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<title>Test for TextEditRules::HandlingNewLines()</title>
|
|
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
|
<script type="application/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
|
|
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
|
</head>
|
|
<body>
|
|
<p id="display"></p>
|
|
<div id="content" style="display: none;">
|
|
|
|
</div>
|
|
|
|
<div id="container"></div>
|
|
|
|
<textarea id="toCopyPlaintext" style="display: none;"></textarea>
|
|
|
|
<pre id="test">
|
|
|
|
<script class="testbody" type="application/javascript">
|
|
SimpleTest.waitForExplicitFinish();
|
|
|
|
async function copyPlaintext(aText) {
|
|
return new Promise(resolve => {
|
|
SimpleTest.waitForClipboard(
|
|
() => { return true; }, // because of mismatch of linebreakers
|
|
() => {
|
|
let element = document.getElementById("toCopyPlaintext");
|
|
element.style.display = "block";
|
|
element.focus();
|
|
element.value = aText;
|
|
synthesizeKey("a", {accelKey: true});
|
|
synthesizeKey("c", {accelKey: true});
|
|
},
|
|
() => {
|
|
ok(true, `Succeeded to copy "${aText.replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/ /g, "\u00A0")}" to clipboard`);
|
|
let element = document.getElementById("toCopyPlaintext");
|
|
element.style.display = "none";
|
|
resolve();
|
|
},
|
|
() => {
|
|
SimpleTest.finish();
|
|
});
|
|
});
|
|
}
|
|
|
|
async function doTests() {
|
|
// nsIPlaintextEditor::eNewlinesPasteIntact (0):
|
|
// only remove the leading and trailing newlines.
|
|
// nsIPlaintextEditor::eNewlinesPasteToFirst (1) or any other value:
|
|
// remove the first newline and all characters following it.
|
|
// nsIPlaintextEditor::eNewlinesReplaceWithSpaces (2, Firefox default):
|
|
// replace newlines with spaces.
|
|
// nsIPlaintextEditor::eNewlinesStrip (3):
|
|
// remove newlines from the string.
|
|
// nsIPlaintextEditor::eNewlinesReplaceWithCommas (4, Thunderbird default):
|
|
// replace newlines with commas.
|
|
// nsIPlaintextEditor::eNewlinesStripSurroundingWhitespace (5):
|
|
// collapse newlines and surrounding whitespace characters and
|
|
// remove them from the string.
|
|
|
|
// value: setting or pasting text.
|
|
// expected: array of final values for each above pref value.
|
|
// setValue: expected result when HTMLInputElement.value is set to the value.
|
|
// pasteValue: expected result when pasting the value from clipboard.
|
|
//
|
|
// Note that HTMLInputElement strips both \r and \n. Therefore, each expected
|
|
// result is different from pasting the value.
|
|
const kTests = [
|
|
{ value: "\nabc\ndef\n",
|
|
expected: [{ setValue: "abcdef", pasteValue: "abc\ndef" },
|
|
{ setValue: "abcdef", pasteValue: "abc" },
|
|
{ setValue: "abcdef", pasteValue: " abc def" },
|
|
{ setValue: "abcdef", pasteValue: "abcdef" },
|
|
{ setValue: "abcdef", pasteValue: "abc,def" },
|
|
{ setValue: "abcdef", pasteValue: "abcdef" }],
|
|
},
|
|
{ value: "\n abc \n def \n",
|
|
expected: [{ setValue: " abc def ", pasteValue: " abc \n def " },
|
|
{ setValue: " abc def ", pasteValue: " abc " },
|
|
{ setValue: " abc def ", pasteValue: " abc def " },
|
|
{ setValue: " abc def ", pasteValue: " abc def " },
|
|
{ setValue: " abc def ", pasteValue: " abc , def " },
|
|
{ setValue: " abc def ", pasteValue: "abcdef" }],
|
|
},
|
|
{ value: " abc \n def ",
|
|
expected: [{ setValue: " abc def ", pasteValue: " abc \n def " },
|
|
{ setValue: " abc def ", pasteValue: " abc " },
|
|
{ setValue: " abc def ", pasteValue: " abc def " },
|
|
{ setValue: " abc def ", pasteValue: " abc def " },
|
|
{ setValue: " abc def ", pasteValue: " abc , def " },
|
|
{ setValue: " abc def ", pasteValue: " abcdef " }],
|
|
},
|
|
];
|
|
|
|
let container = document.getElementById("container");
|
|
for (let i = 0; i <= 5; i++) {
|
|
await SpecialPowers.pushPrefEnv({"set": [["editor.singleLine.pasteNewlines", i]]});
|
|
container.innerHTML = `<input id="input${i}" type="text">`;
|
|
let input = document.getElementById(`input${i}`);
|
|
input.focus();
|
|
let editor = SpecialPowers.wrap(input).editor;
|
|
for (const kLineBreaker of ["\n", "\r", "\r\n"]) {
|
|
for (let kTest of kTests) {
|
|
let value = kTest.value.replace(/\n/g, kLineBreaker);
|
|
input.value = value;
|
|
is(editor.rootElement.firstChild.wholeText, kTest.expected[i].setValue,
|
|
`Setting value to "${value.replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/ /g, "\u00A0")}" when pref is ${i}`);
|
|
input.value = "";
|
|
|
|
await copyPlaintext(value);
|
|
input.focus();
|
|
synthesizeKey("v", {accelKey: true});
|
|
is(editor.rootElement.firstChild.wholeText, kTest.expected[i].pasteValue,
|
|
`Pasting "${value.replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/ /g, "\u00A0")}" when pref is ${i}`);
|
|
input.value = "";
|
|
}
|
|
}
|
|
}
|
|
|
|
SimpleTest.finish();
|
|
}
|
|
|
|
SimpleTest.waitForFocus(doTests);
|
|
</script>
|
|
</pre>
|
|
</body>
|
|
</html>
|