151 lines
6.7 KiB
HTML
151 lines
6.7 KiB
HTML
<!doctype html>
|
|
<html>
|
|
<head>
|
|
<meta charset=utf-8>
|
|
<meta name="flags" content="may">
|
|
<title>Testing normalizing white-space sequence after execCommand("insertlinebreak", false, "foo")</title>
|
|
<script src="/resources/testharness.js"></script>
|
|
<script src="/resources/testharnessreport.js"></script>
|
|
</head>
|
|
<body>
|
|
<script>
|
|
"use strict";
|
|
|
|
setup({explicit_done: true});
|
|
|
|
function runTests() {
|
|
// README:
|
|
// These tests based on the behavior of Chrome 83. This test does NOT define
|
|
// nor suggest any standard behavior (actually, some expected results might
|
|
// look odd), but this test must help you to understand how other browsers
|
|
// use different logic to normalize white-space sequence.
|
|
|
|
document.body.innerHTML = "<div contenteditable></div>";
|
|
let editor = document.querySelector("div[contenteditable]");
|
|
editor.focus();
|
|
let selection = document.getSelection();
|
|
|
|
function escape(str) {
|
|
return typeof(str) === "string" ? str.replace(/\u00A0/ig, " ") : "";
|
|
}
|
|
|
|
function generateWhiteSpaces(num, lastIsAlwaysNBSP) {
|
|
let str = "";
|
|
for (let i = 0; i < num - 1; i++) {
|
|
str += i % 2 ? " " : "\u00A0";
|
|
}
|
|
str += lastIsAlwaysNBSP || num % 2 ? "\u00A0" : " ";
|
|
return escape(str);
|
|
}
|
|
function getDescriptionForTextNode(textNode) {
|
|
return selection.focusNode === textNode ?
|
|
`${escape(textNode.data.slice(0, selection.focusOffset))}[]${escape(textNode.data.slice(selection.focusOffset))}` :
|
|
escape(textNode);
|
|
}
|
|
|
|
editor.innerHTML = "a b";
|
|
selection.collapse(editor.firstChild, 0);
|
|
test(function () {
|
|
document.execCommand("insertlinebreak", false, "");
|
|
assert_equals(editor.innerHTML,
|
|
`<br>a b`,
|
|
"Modified text is wrong");
|
|
}, `execCommand("insertlinebreak", false, "") at "${getDescriptionForTextNode(editor.firstChild)}"`);
|
|
|
|
editor.innerHTML = "a b";
|
|
selection.collapse(editor.firstChild, 1);
|
|
test(function () {
|
|
document.execCommand("insertlinebreak", false, "");
|
|
assert_equals(editor.innerHTML,
|
|
`a<br>${escape(generateWhiteSpaces(9, false))}b`,
|
|
"Modified text is wrong");
|
|
}, `execCommand("insertlinebreak", false, "") at "${getDescriptionForTextNode(editor.firstChild)}"`);
|
|
|
|
editor.innerHTML = "a b";
|
|
selection.collapse(editor.firstChild, 2);
|
|
test(function () {
|
|
document.execCommand("insertlinebreak", false, "");
|
|
assert_equals(editor.innerHTML,
|
|
`a <br>${escape(generateWhiteSpaces(8, false))}b`,
|
|
"Modified text is wrong");
|
|
}, `execCommand("insertlinebreak", false, "") at "${getDescriptionForTextNode(editor.firstChild)}"`);
|
|
|
|
editor.innerHTML = "a b";
|
|
selection.collapse(editor.firstChild, 3);
|
|
test(function () {
|
|
document.execCommand("insertlinebreak", false, "");
|
|
assert_equals(editor.innerHTML,
|
|
`a <br>${escape(generateWhiteSpaces(7, false))}b`,
|
|
"Modified text is wrong");
|
|
}, `execCommand("insertlinebreak", false, "") at "${getDescriptionForTextNode(editor.firstChild)}"`);
|
|
|
|
editor.innerHTML = "a b";
|
|
selection.collapse(editor.firstChild, 4);
|
|
test(function () {
|
|
document.execCommand("insertlinebreak", false, "");
|
|
assert_equals(editor.innerHTML,
|
|
`a <br>${escape(generateWhiteSpaces(6, false))}b`,
|
|
"Modified text is wrong");
|
|
}, `execCommand("insertlinebreak", false, "") at "${getDescriptionForTextNode(editor.firstChild)}"`);
|
|
|
|
editor.innerHTML = "a b";
|
|
selection.collapse(editor.firstChild, 5);
|
|
test(function () {
|
|
document.execCommand("insertlinebreak", false, "");
|
|
assert_equals(editor.innerHTML,
|
|
`a <br>${escape(generateWhiteSpaces(5, false))}b`,
|
|
"Modified text is wrong");
|
|
}, `execCommand("insertlinebreak", false, "") at "${getDescriptionForTextNode(editor.firstChild)}"`);
|
|
|
|
editor.innerHTML = "a b";
|
|
selection.collapse(editor.firstChild, 6);
|
|
test(function () {
|
|
document.execCommand("insertlinebreak", false, "");
|
|
assert_equals(editor.innerHTML,
|
|
`a <br>${escape(generateWhiteSpaces(4, false))}b`,
|
|
"Modified text is wrong");
|
|
}, `execCommand("insertlinebreak", false, "") at "${getDescriptionForTextNode(editor.firstChild)}"`);
|
|
|
|
editor.innerHTML = "a b";
|
|
selection.collapse(editor.firstChild, 7);
|
|
test(function () {
|
|
document.execCommand("insertlinebreak", false, "");
|
|
assert_equals(editor.innerHTML,
|
|
`a <br>${escape(generateWhiteSpaces(3, false))}b`,
|
|
"Modified text is wrong");
|
|
}, `execCommand("insertlinebreak", false, "") at "${getDescriptionForTextNode(editor.firstChild)}"`);
|
|
|
|
editor.innerHTML = "a b";
|
|
selection.collapse(editor.firstChild, 8);
|
|
test(function () {
|
|
document.execCommand("insertlinebreak", false, "");
|
|
assert_equals(editor.innerHTML,
|
|
`a <br>${escape(generateWhiteSpaces(2, false))}b`,
|
|
"Modified text is wrong");
|
|
}, `execCommand("insertlinebreak", false, "") at "${getDescriptionForTextNode(editor.firstChild)}"`);
|
|
|
|
editor.innerHTML = "a b";
|
|
selection.collapse(editor.firstChild, 9);
|
|
test(function () {
|
|
document.execCommand("insertlinebreak", false, "");
|
|
assert_equals(editor.innerHTML,
|
|
`a <br>${escape(generateWhiteSpaces(1, false))}b`,
|
|
"Modified text is wrong");
|
|
}, `execCommand("insertlinebreak", false, "") at "${getDescriptionForTextNode(editor.firstChild)}"`);
|
|
|
|
editor.innerHTML = "a b";
|
|
selection.collapse(editor.firstChild, 10);
|
|
test(function () {
|
|
document.execCommand("insertlinebreak", false, "");
|
|
assert_equals(editor.innerHTML,
|
|
`a <br>b`,
|
|
"Modified text is wrong");
|
|
}, `execCommand("insertlinebreak", false, "") at "${getDescriptionForTextNode(editor.firstChild)}"`);
|
|
|
|
done();
|
|
}
|
|
|
|
window.addEventListener("load", runTests, {once: true});
|
|
</script>
|
|
</body>
|
|
</html>
|