<!DOCTYPE html>
<html>
<body>
<script src="../../resources/js-test-pre.js"></script>
<div id="source" contenteditable="true" spellcheck="false">You has the right.</div>
<div id="target" contenteditable="true" spellcheck="true"></div>

<script>
description('This tests whether WebKit can render grammar markers when pasting text if it has a grammar-checker. To test manually, copy the text in the first div element and paste it to the second div element. This test succeeds when WebKit renders a grammar marker under a word "has".');

jsTestIsAsync = true;

if (window.internals)
    internals.settings.setAsynchronousSpellCheckingEnabled(true);

if (window.testRunner)
    testRunner.dumpAsText(true);

function verifyGrammarMarker(destination, ungrammaticalPhrase)
{
    if (window.internals && internals.hasGrammarMarker(destination.innerHTML.indexOf(ungrammaticalPhrase), ungrammaticalPhrase.length)) {
        testPassed("ungrammatical phrase '" + ungrammaticalPhrase + "' on '" + destination.innerHTML + "'");
        return true;
    } else
       return false;
}

var source = document.getElementById('source');
window.getSelection().selectAllChildren(source);
document.execCommand('Copy');
var target = document.getElementById('target');
window.getSelection().selectAllChildren(target);
document.execCommand('Paste');

shouldBecomeEqual('verifyGrammarMarker(target, "has")', 'true', finishJSTest);

</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>
