<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
<script src="../editing.js"></script>
<script>
jsTestIsAsync = true;

function zeroDelayTimer()
{
    return new Promise(resolve => setTimeout(resolve, 0));
}

async function runTest()
{
    if (window.internals) {
        internals.settings.setUnifiedTextCheckerEnabled(true);
        internals.settings.setAsynchronousSpellCheckingEnabled(false);
        internals.setAutomaticTextReplacementEnabled(true);
        internals.setAutomaticSpellingCorrectionEnabled(true);
        testRunner.setSpellCheckerResults({
            "YT?": [
                {
                    "replacement": "You there?",
                    "type": "replacement",
                    "from": 0,
                    "to": 3
                }
            ],
            "YT?\n": [
                {
                    "replacement": "You there?",
                    "type": "replacement",
                    "from": 0,
                    "to": 3
                }
            ]
        });
    }

    const editor = document.getElementById("editor");
    editor.focus();
    for (const character of "YT?")
        typeCharacterCommand(character);
    await zeroDelayTimer();

    if (!window.testRunner) {
        description.innerHTML = `To manually test, add an automatic text replacement mapping from the string "YT?" to
        "You there?", and then type the string "YT?". It should not be immediately corrected to "You there?".
        However, entering a newline should subsequently trigger autocorrection.`;
        return;
    }

    debug("Before pressing enter:");
    shouldBe("editor.textContent", "'YT?'");
    insertParagraphCommand();
    await zeroDelayTimer();
    finishJSTest();
}
</script>
</head>

<body onload="runTest()">
    <div id="description"></div>
    <div contenteditable style="margin-bottom: 1em; border: 1px orange dashed;" id="editor"></div>
    <script src="../../resources/js-test-post.js"></script>
</body>
</html>
