<!DOCTYPE html> <!-- webkit-test-runner [ useFlexibleViewport=true ] -->
<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="none">
<script>

description(`This tests removing inputmode="none" from an input element after the element was focused.<br>
To manually test, detach a hardware keyboard and tap on the text field below. The software keyboard should come up.`);

jsTestIsAsync = true;

const input = document.querySelector('input');
if (window.testRunner)
    window.onload = runTest;
else
    input.addEventListener('click', () => this.removeAttribute('inputmode'));

let systemKeyboardRect;
async function runTest() {
    await UIHelper.setHardwareKeyboardAttached(false);

    // We insert a dummy input element to detect when the keyboard hides for an input element with inputmode="none".
    const dummyInput = document.createElement('input');
    document.body.appendChild(dummyInput);
    await UIHelper.activateElementAndWaitForInputSession(dummyInput);

    debug("\nACTIVATE input with inputmode=none");
    input.focus();
    await UIHelper.activateElement(input);
    await UIHelper.waitForKeyboardToHide();
    systemKeyboardRect = await UIHelper.inputViewBounds();
    shouldBe("systemKeyboardRect.height", "0");

    await UIHelper.enterText("hello,");
    shouldBeEqualToString("input.value", "hello,");

    debug("\nRemoving inputmode=none");
    input.removeAttribute('inputmode');

    await new Promise((resolve) => {
        window.visualViewport.addEventListener('resize', resolve);
        setTimeout(resolve, 3000); // Failed.
    });

    systemKeyboardRect = await UIHelper.inputViewBounds();
    shouldBeTrue("systemKeyboardRect.height > 0");

    await UIHelper.enterText(" world");
    shouldBeEqualToString("input.value", "hello, world");

    finishJSTest();
}

</script>
</body>
</html>
