<!DOCTYPE html> <!-- webkit-test-runner [ useFlexibleViewport=true experimental:AsyncClipboardAPIEnabled=true ] -->
<html>
    <meta charset="utf8">
    <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>
        <script src="./resources/async-clipboard-helpers.js"></script>
        <style>
            button {
                width: 100%;
                height: 150px;
                display: block;
            }
        </style>
    </head>
    <script>
        jsTestIsAsync = true;
        finishedCopying = false;

        async function runTest() {
            description("This test verifies that navigator.clipboard.writeText can be used to write plain text the system clipboard. To verify manually, click the 'Copy' button to write text, and then click the 'Paste' button to read it back.");

            copy = document.getElementById("copy");
            paste = document.getElementById("paste");

            copy.addEventListener("click", async () => {
                try {
                    await navigator.clipboard.writeText("foo bar baz");
                    testPassed("Copied text to the clipboard.");
                } catch (exception) {
                    testFailed("Failed to copy text to the clipboard.");
                } finally {
                    finishedCopying = true;
                }
            });

            paste.addEventListener("click", async () => {
                items = await navigator.clipboard.read();
                shouldBe("items.length", "1");
                item = items[0];
                shouldBe("item.types", "['text/plain']");
                text = await loadText(await item.getType("text/plain"));
                shouldBeEqualToString("text", "foo bar baz");
                copy.remove();
                paste.remove();
                finishJSTest();
            });

            if (!window.testRunner)
                return;

            await UIHelper.activateElement(copy);
            await new Promise(r => shouldBecomeEqual("finishedCopying", "true", r));
            await UIHelper.activateElement(paste);
        }

        addEventListener("load", runTest);
    </script>
    <body>
        <button id="copy">Copy</button>
        <button id="paste">Paste</button>
        <p id="description"></p>
        <p id="console"></p>
    </body>
</html>
