<html>
<head>
<script src="../../resources/ui-helper.js"></script>
<script src="../../resources/dump-as-markup.js"></script>
<script src="../editing.js"></script>
<script>
Markup.description("To manually test, add an automatic text replacement mapping from the string '**' to 'stars'. Then, on the second line (this is imporatant, it must not be the first line) of a contenteditable, type the string '**'. It should not be immediately corrected to 'stars'. Type any other character, which should then change '**' to 'stars'.");
Markup.waitUntilDone();

async function runTest()
{
    if (window.internals) {
        internals.settings.setUnifiedTextCheckerEnabled(true);
        internals.settings.setAsynchronousSpellCheckingEnabled(false);
        internals.setAutomaticTextReplacementEnabled(true);
        internals.setAutomaticSpellingCorrectionEnabled(true);
        await UIHelper.setSpellCheckerResults({
            "**": [
                {
                    "replacement": "stars",
                    "type": "replacement",
                    "from": 0,
                    "to": 2
                }
            ],
            "**\n": [
                {
                    "replacement": "stars",
                    "type": "replacement",
                    "from": 0,
                    "to": 2
                }
            ]
        });
    }

    const editor = document.getElementById("editor");
    editor.focus();
    insertParagraphCommand();

    for (const character of "**")
        typeCharacterCommand(character);
    await UIHelper.delayFor(0);

    Markup.dump(editor, "After typing possible replacment");

    insertParagraphCommand();
    await UIHelper.delayFor(0);

    Markup.dump(editor, "After pressing enter");
    Markup.notifyDone();
}
</script>
</head>

<body onload="runTest()">
    <div id="description"></div>
    <div contenteditable style="margin-bottom: 1em; border: 1px orange dashed;" id="editor">
        <div><br></div>
        <div><br></div>
    </div>
</body>
</html>
