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

description('This tests dataTransfer.items. To manually test, click on "Copy text" and paste (Command+V on Mac Control+V elsewhere).');

function copyText()
{
    document.getElementById('source').style.display = null;
    document.getElementById('source').focus();
    document.execCommand('SelectAll', false, null);
    document.execCommand('Copy', false, null);
    document.getElementById('source').style.display = 'none';
    document.getElementById('target').focus();
    if (window.testRunner)
        testRunner.execCommand('Paste', null);
}

function copy(event)
{
    event.preventDefault();
    event.clipboardData.setData('text/plain', 'hello, world');
}

function paste(event)
{
    clipboardData = event.clipboardData;
    shouldBe('clipboardData.items.length', '1');
    shouldBeEqualToString('clipboardData.items[0].kind', 'string');
    shouldBeEqualToString('clipboardData.items[0].type', 'text/plain');
    shouldBe('clipboardData.items[0].getAsFile()', 'null');
    shouldBe('clipboardData.items[0].getAsString(checkContent)', 'undefined');
}

function checkContent(content)
{
    shouldBeEqualToString('"' + content + '"', 'hello, world');
    document.getElementById('container').style.display = 'none';
    finishJSTest();
}

if (window.testRunner)
    window.onload = copyText;
jsTestIsAsync = true;
successfullyParsed = true;

</script>
<div id="container">
    <button onclick="copyText();">Copy text</button>
    <div id="source" contenteditable="true" oncopy="copy(event)" style="display: none">hello, world</div>
    <div id="target" contenteditable="true" onpaste="paste(event)"></div>
</div>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>
