blob: c735ee5f13bd98210b048b7cc5325023ec88194b [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
</head>
<body>
<script src="../../resources/js-test.js"></script>
<script src="../../resources/ui-helper.js"></script>
<script>
description('This tests delegating focus in a shadow tree to an input element. WebKit should move the selection as well as the focus');
jsTestIsAsync = true;
const host = document.createElement('div');
document.body.appendChild(host);
const shadowRoot = host.attachShadow({mode: 'closed', delegatesFocus: true});
shadowRoot.innerHTML = `<input type="text" id="target">
<div onclick="checkSelection()">Click here</div>`;
const target = shadowRoot.getElementById("target");
async function runTest() {
const divRect = shadowRoot.querySelector('div').getBoundingClientRect();
await UIHelper.activateAt(divRect.x + 5, divRect.y + 5);
await UIHelper.ensurePresentationUpdate();
await new Promise(requestAnimationFrame);
await selectionCheck;
}
let resolveSelectionCheck;
const selectionCheck = new Promise((resolve) => resolveSelectionCheck = resolve);
function checkSelection() {
shouldBe('document.activeElement', 'host');
shouldBe('shadowRoot.querySelector("input")', 'target');
shouldBe('shadowRoot.activeElement', 'target');
shouldBeEqualToString('target.value', '');
document.execCommand('insertText', false, 'hello');
shouldBeEqualToString('target.value', 'hello');
shouldBe('target.selectionStart', '5');
shouldBe('target.selectionEnd', '5');
resolveSelectionCheck();
}
if (window.testRunner)
UIHelper.wait(runTest());
else
selectionCheck.then(() => finishJSTest());
</script>
</body>
</html>