blob: 852631401fbdd1625a3117a1304eb962f4a07fd1 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<script src="../../../resources/js-test.js"></script>
<script src="../../../resources/ui-helper.js"></script>
</head>
<body>
<input inputmode="text">
<div id="countdown"></div>
<script>
jsTestIsAsync = true;
description('This tests updating inputmode of an input element from "none" to "text". The software keyboard should be updated.<br>'
+ 'To manually test, focus the input element below. The software keyboard should show up after 3 seconds');
const input = document.querySelector("input");
if (!window.testRunner) {
input.addEventListener('focus', () => {
let countdown = 3;
const id = setInterval(() => {
document.getElementById('countdown').textContent = countdown ? countdown : '';
if (!countdown) {
clearInterval(id);
input.setAttribute('inputmode', 'decimal');
}
countdown--;
}, 1000);
});
}
async function runTest() {
await UIHelper.setHardwareKeyboardAttached(false);
debug('inputmode="text"');
let didResize = () => { };
window.visualViewport.addEventListener('resize', () => didResize());
if (window.testRunner) {
await UIHelper.activateFormControl(input);
window.keyboardRect = await UIHelper.inputViewBounds();
shouldBeTrue('textHeight = keyboardRect.height; keyboardRect.height > 0');
} else {
await new Promise((resolve) => { didResize = resolve; });
shouldBeTrue('textHeight = document.documentElement.clientHeight - visualViewport.height; document.documentElement.clientHeight - visualViewport.height < 100');
}
if (window.testRunner)
input.setAttribute('inputmode', 'decimal');
await new Promise((resolve) => { didResize = resolve; });
debug('');
debug('inputmode="number"');
if (window.testRunner) {
window.keyboardRect = await UIHelper.inputViewBounds();
shouldNotBe('keyboardRect.height', 'textHeight');
} else
shouldNotBe('document.documentElement.clientHeight - visualViewport.height', 'textHeight');
finishJSTest();
}
window.onload = () => setTimeout(runTest, 0);
</script>
</body>
</html>