blob: 0f05606a3564b4e27644e0035d42076ff6d1fda0 [file] [log] [blame] [edit]
<!DOCTYPE html>
<html>
<head>
<title>EditContext: The HTMLElement.editContext property</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-actions.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
</head>
<body>
<script>
promise_test(async function() {
const editContext = new EditContext();
const test = document.createElement("div");
document.body.appendChild(test);
editContext.addEventListener("textupdate", e => {
test.innerHTML = e.text;
});
test.editContext = editContext;
test.focus();
await test_driver.send_keys(test, 'a');
assert_equals(test.innerHTML, "a");
test.remove();
}, 'Testing EditContext English typing');
promise_test(async function() {
const editContext = new EditContext();
assert_not_equals(editContext, null);
const test = document.createElement("div");
document.body.appendChild(test);
test.editContext = editContext;
test.focus();
textInputController.setComposition("foo");
assert_equals(test.innerHTML, "");
await test_driver.send_keys(test, 'a');
assert_equals(test.innerHTML, "");
test.remove();
}, 'EditContext should disable DOM mutation');
promise_test(async function() {
const editContext = new EditContext();
assert_not_equals(editContext, null);
const test = document.createElement("div");
document.body.appendChild(test);
test.focus();
test.editContext = editContext;
test.addEventListener("beforeinput", e => {
if (e.inputType === "insertText") {
e.preventDefault();
}
});
await test_driver.send_keys(test, 'a');
assert_equals(editContext.text, "");
test.remove();
}, 'beforeInput(insertText) should be cancelable');
promise_test(async () => {
let div = document.createElement("div");
document.body.appendChild(div);
let divText = "Hello World";
div.innerText = divText;
div.editContext = new EditContext();
div.focus();
let got_textupdate_event = false;
div.editContext.addEventListener("textupdate", e => {
got_textupdate_event = true;
});
div.editContext = null;
await test_driver.send_keys(div, "a");
assert_false(got_textupdate_event, "Shouldn't have received textupdate event after editContext was detached");
div.remove();
}, "EditContext should not receive events after being detached from element");
</script>
</body>
</html>