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
|
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="variant" content="?white-space=pre">
<meta name="variant" content="?white-space=pre-line">
<meta name="variant" content="?white-space=pre-wrap">
<title>Inserting multiline text shouldn't be split to multiple Text nodes unless using br elements</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="/resources/testdriver-actions.js"></script>
<script src="../include/editor-test-utils.js"></script>
<script>
"use strict";
const searchParams = new URLSearchParams(document.location.search);
const whiteSpace = searchParams.get("white-space");
document.addEventListener("DOMContentLoaded", () => {
promise_test(async () => {
const editingHost = document.querySelector("div[contenteditable]");
editingHost.style.whiteSpace = whiteSpace;
const utils = new EditorTestUtils(editingHost);
const pre = document.querySelector("pre");
await test_driver.click(pre); // Ensure user activation
getSelection().selectAllChildren(pre);
await utils.sendCopyShortcutKey();
editingHost.focus();
utils.setupEditingHost("<p>{}<br></p>");
await utils.sendPasteAsPlaintextShortcutKey();
if (editingHost.innerHTML == "<p>abc<br>def<br>ghi</p>") {
// It's fine to use <br> for line breaks, at least, out of scope of this test.
assert_equals(editingHost.innerHTML, "<p>abc<br>def<br>ghi</p>");
return;
}
// The form in https://discussions.apple.com/ expects that pasted text is
// not split at each linefeed. For backward compatibility, browsers need
// to keep this behavior.
assert_equals(editingHost.innerHTML, "<p>abc\ndef\nghi</p>");
assert_equals(
editingHost.querySelector("p").childNodes.length,
1,
"Pasted text should be in a single Text node"
);
});
}, {once: true});
</script>
</head>
<body>
<pre>abc
def
ghi</pre>
<div contenteditable="true"></div>
</body>
</html>
|