<!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/ui-helper.js"></script>
<script src="../../../resources/js-test.js"></script>
<style>
body, html {
    width: 100%;
    height: 100%;
    margin: 0;
}

#editor {
    width: 320px;
    height: 200px;
    border: solid 1px tomato;
    margin-top: 100px;
}

.big {
    font-size: 24px;
}
</style>
<script>
jsTestIsAsync = true;

if (window.testRunner) {
    testRunner.setAllowedMenuActions(["Embiggen"]);
    testRunner.installCustomMenuAction("Embiggen", false, () => document.querySelector("#editor").classList.add("big"));
}

addEventListener("load", runTest);
async function runTest() {
    description("This test verifies that interacting with a menu action item on iOS that is marked with 'dontDismiss' does not cause the callout menu to dismiss, even if the action changes the selection. To test manually, select the text and tap an item in the callout menu that shouldn't automatically dismiss the menu but changes the selection rects (for instance, Bold). Verify that the callout menu remains visible after tapping this item.");

    await UIHelper.activateElementAndWaitForInputSession(editor);
    await UIHelper.keyDown("a", ["metaKey"]);

    let grabberRect = {};
    while (!grabberRect.width && !grabberRect.height)
        grabberRect = await UIHelper.getSelectionEndGrabberViewRect();
    centerX = rect => rect.left + rect.width / 2;
    centerY = rect => rect.top + rect.height / 2;
    await UIHelper.activateAt(centerX(grabberRect), centerY(grabberRect));

    await UIHelper.waitForMenuToShow();
    await UIHelper.chooseMenuAction("Embiggen");

    selectionRects = null;
    while (!selectionRects || selectionRects.length != 2)
        selectionRects = await UIHelper.getUISelectionViewRects();
    dismissingMenu = await UIHelper.isDismissingMenu();
    showingMenu = await UIHelper.isShowingMenu();

    shouldBe("selectionRects[0].top", "102");
    shouldBe("selectionRects[0].width", "320");
    shouldBe("selectionRects[0].left", "1");
    shouldBe("selectionRects[0].height", "28");
    shouldBe("selectionRects[1].top", "130");
    shouldBe("selectionRects[1].width", "172");
    shouldBe("selectionRects[1].left", "1");
    shouldBe("selectionRects[1].height", "30");
    shouldBe("dismissingMenu", "false");
    shouldBe("showingMenu", "true");

    finishJSTest();
}
</script>
</head>
<body>
<div id="editor" contenteditable>The quick brown fox jumped over the lazy dog.</div>
<div id="description"></div>
<div id="console"></div>
</body>
</html>
