<!DOCTYPE html>
<html>
<body onload="runTest()">
<script src="../../resources/js-test-pre.js"></script>
<script>

description('This tests accessing DataTransferItemList when dropping a file.'
    + ' To manually test, drag and drop <a href="../resources/text-pasteboard-data.txt">LayoutTests/editing/resources/text-pasteboard-data.txt</a> from another app (e.g. Finder) to the box below.');

function runTest()
{
    if (!window.testRunner)
        return;
    if (!window.eventSender || !eventSender.beginDragWithFiles) {
        testFailed('This test requires eventSender.beginDragWithFiles');
        finishJSTest();
        return;
    }

    eventSender.beginDragWithFiles(["../resources/text-pasteboard-data.txt"]);
    const target = document.getElementById('target');
    eventSender.mouseMoveTo(target.offsetLeft + 5, target.offsetTop + 5);
    eventSender.mouseUp();
}

function drop(event)
{
    event.preventDefault();
    dataTransfer = event.dataTransfer;
    shouldBe('dataTransfer.items.length', '1');
    shouldBeEqualToString('dataTransfer.items[0].kind', 'file');
    shouldBeEqualToString('dataTransfer.items[0].type', 'text/plain');
    shouldNotBe('file = dataTransfer.items[0].getAsFile(); file', 'null');
    shouldBeEqualToString('file.name', 'text-pasteboard-data.txt');
    shouldNotThrow('reader = new FileReader(); reader.onload = () => checkFileContent(reader.result); reader.readAsText(file);');
}

function checkFileContent(content)
{
    shouldBeEqualToString('"' + content + '"', 'hello, world.');
    shouldBe('dataTransfer.items[0].getAsFile()', 'null');
    finishJSTest();
}

jsTestIsAsync = true;
successfullyParsed = true;

</script>
<script src="../../resources/js-test-post.js"></script>
<div id="target" contenteditable="true" ondrop="drop(event)" style="width: 100px; height: 100px; border: solid 1px black;"></div>
</body>
</html>
