Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
- This WPT test may be referenced by the following Test IDs:
- /editing/other/paste-multiline-text-as-plaintext.tentative.https.html?white-space=pre - WPT Dashboard Interop Dashboard
- /editing/other/paste-multiline-text-as-plaintext.tentative.https.html?white-space=pre-line - WPT Dashboard Interop Dashboard
- /editing/other/paste-multiline-text-as-plaintext.tentative.https.html?white-space=pre-wrap - WPT Dashboard Interop Dashboard
<!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;
}
// 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>