145 lines
4.4 KiB
HTML
145 lines
4.4 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
|
|
<html>
|
|
<head>
|
|
<script src="../../resources/js-test-pre.js"></script>
|
|
<script src="resources/js-test-selection-shared.js"></script>
|
|
</head>
|
|
<body>
|
|
<p id="description"></p>
|
|
<div id="console"></div>
|
|
<script>
|
|
description('Grammar checking for pasted text.');
|
|
|
|
jsTestIsAsync = true;
|
|
|
|
var testRoot = document.createElement("div");
|
|
document.body.insertBefore(testRoot, document.body.firstChild);
|
|
|
|
var testTextArea = document.createElement("textarea");
|
|
testRoot.appendChild(testTextArea);
|
|
|
|
var testInput = document.createElement("input");
|
|
testInput.setAttribute("type", "text");
|
|
testRoot.appendChild(testInput);
|
|
|
|
var testEditable = document.createElement("div");
|
|
testEditable.setAttribute("contentEditable", "true");
|
|
testRoot.appendChild(testEditable);
|
|
|
|
var testSourcePlain = document.createElement("div");
|
|
testSourcePlain.innerHTML = "You has the right.";
|
|
testRoot.appendChild(testSourcePlain);
|
|
|
|
var testSourceDecorated = document.createElement("div");
|
|
testSourceDecorated.innerHTML = "I have a<b>n ki</b>wi. I have no idea.";
|
|
testRoot.appendChild(testSourceDecorated);
|
|
|
|
var testSourceMulti = document.createElement("div");
|
|
testSourceMulti.innerHTML = "I have an grape. I have an muscat. I don't know.";
|
|
testRoot.appendChild(testSourceMulti);
|
|
|
|
var sel = window.getSelection();
|
|
|
|
var tests = [];
|
|
|
|
function done()
|
|
{
|
|
var next = tests.shift();
|
|
if (next)
|
|
return window.setTimeout(next, 0);
|
|
testRoot.style.display = "none";
|
|
finishJSTest();
|
|
}
|
|
|
|
function findFirstTextNode(node)
|
|
{
|
|
function iterToFindFirstTextNode(node)
|
|
{
|
|
if (node instanceof Text)
|
|
return node;
|
|
|
|
var childNodes = node.childNodes;
|
|
for (var i = 0; i < childNodes.length; ++i) {
|
|
var n = iterToFindFirstTextNode(childNodes[i]);
|
|
if (n)
|
|
return n;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
|
|
if (node instanceof HTMLInputElement || node instanceof HTMLTextAreaElement)
|
|
return iterToFindFirstTextNode(internals.shadowRoot(node));
|
|
else
|
|
return iterToFindFirstTextNode(node);
|
|
}
|
|
|
|
function verifyMarker(node, expectedMarked)
|
|
{
|
|
if (node instanceof HTMLInputElement || node instanceof HTMLTextAreaElement)
|
|
node.focus();
|
|
else
|
|
sel.selectAllChildren(node);
|
|
|
|
var textNode = findFirstTextNode(node);
|
|
var num = internals.markerCountForNode(textNode, "grammar");
|
|
if (num != expectedMarked.length)
|
|
return false;
|
|
for (var i = 0; i < num; ++i) {
|
|
var range = internals.markerRangeForNode(textNode, "grammar", i);
|
|
if (range.toString() != expectedMarked[i])
|
|
return false;
|
|
}
|
|
|
|
var nodeContent = node instanceof HTMLInputElement || node instanceof HTMLTextAreaElement ? node.value : node.innerHTML;
|
|
testPassed(node.tagName + " ungrammatical phrase '" + expectedMarked + "' on '" + nodeContent + "'");
|
|
|
|
return true;
|
|
}
|
|
|
|
var destination = null;
|
|
var expectedMarked = null;
|
|
function pasteAndVerify(source, dest, expectedMarked)
|
|
{
|
|
sel.selectAllChildren(source);
|
|
document.execCommand("Copy");
|
|
if (dest instanceof HTMLInputElement || dest instanceof HTMLTextAreaElement) {
|
|
dest.value = "";
|
|
dest.focus();
|
|
} else {
|
|
dest.innerHTML = "";
|
|
sel.selectAllChildren(dest);
|
|
}
|
|
document.execCommand("Paste");
|
|
|
|
if (window.internals) {
|
|
destination = dest;
|
|
ungrammaticalPhrase = expectedMarked;
|
|
shouldBecomeEqual('verifyMarker(destination, ungrammaticalPhrase)', 'true', done);
|
|
}
|
|
};
|
|
|
|
if (window.internals)
|
|
internals.settings.setAsynchronousSpellCheckingEnabled(true);
|
|
|
|
tests.push(function() { pasteAndVerify(testSourcePlain, testEditable, ["has"]); });
|
|
tests.push(function() { pasteAndVerify(testSourceDecorated, testEditable, ["a"]); }); // Checks only 'a'.
|
|
tests.push(function() { pasteAndVerify(testSourceMulti, testEditable, ["an", "an"]); });
|
|
|
|
tests.push(function() { pasteAndVerify(testSourcePlain, testInput, ["has"]); });
|
|
tests.push(function() { pasteAndVerify(testSourceDecorated, testInput, ["an"]); });
|
|
tests.push(function() { pasteAndVerify(testSourceMulti, testInput, ["an", "an"]); });
|
|
|
|
tests.push(function() { pasteAndVerify(testSourcePlain, testTextArea, ["has"]); });
|
|
tests.push(function() { pasteAndVerify(testSourceDecorated, testTextArea, ["an"]); });
|
|
tests.push(function() { pasteAndVerify(testSourceMulti, testTextArea, ["an", "an"]); });
|
|
|
|
done();
|
|
|
|
var successfullyParsed = true;
|
|
</script>
|
|
<script src="../../resources/js-test-post.js"></script>
|
|
</body>
|
|
</html>
|