blob: a89f5a5c1264caaf80386a944bdc92f1a2cf928d [file] [log] [blame]
<!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('Tests if the spellchecker behavior change after the spellcheck attribute changed by the script.');
jsTestIsAsync = true;
if (window.internals) {
internals.settings.setUnifiedTextCheckerEnabled(true);
internals.settings.setAsynchronousSpellCheckingEnabled(true);
}
var parent = document.createElement("div");
document.body.appendChild(parent);
var sel = document.getSelection();
function testSpellCheckingEnabled(target, enabled)
{
target.spellcheck = enabled;
if (target.tagName == "SPAN") {
target.appendChild(document.createTextNode("Hello,"));
sel.setBaseAndExtent(target, 6, target, 6);
} else if (target.tagName == "INPUT" || target.tagName == "TEXTAREA") {
target.focus();
document.execCommand("InsertText", false, "Hello,");
}
document.execCommand("InsertText", false, 'z');
document.execCommand("InsertText", false, 'z');
document.execCommand("InsertText", false, ' ');
window.target = target;
shouldBe("target.spellcheck", enabled ? "true" : "false");
shouldBecomeEqual("internals.hasSpellingMarker(6, 2)", enabled ? "true" : "false", done);
}
function createElement(tagName, spellcheck)
{
var target = document.createElement(tagName);
if (tagName == "SPAN")
target.setAttribute("contentEditable", "true");
if (spellcheck)
target.setAttribute("spellcheck", spellcheck);
return target;
}
function testFor(tagName, initialAttribute, expectation)
{
var target = createElement(tagName, initialAttribute);
parent.appendChild(target);
testSpellCheckingEnabled(target, expectation);
}
var tests = [ function() { testFor("SPAN", undefined, true); }, // default -> true
function() { testFor("SPAN", undefined, false); }, // default -> false
function() { testFor("SPAN", true, true); }, // true -> true
function() { testFor("SPAN", true, false); }, // true -> false
function() { testFor("SPAN", false, true); }, // false -> true
function() { testFor("SPAN", false, false); }, // false -> false
function() { testFor("INPUT", undefined, true); }, // default -> true
function() { testFor("INPUT", undefined, false); }, // default -> false
function() { testFor("INPUT", true, true); }, // true -> true
function() { testFor("INPUT", true, false); }, // true -> false
function() { testFor("INPUT", false, true); }, // false -> true
function() { testFor("INPUT", false, false); }, // false -> false
function() { testFor("TEXTAREA", undefined, true); }, // default -> true
function() { testFor("TEXTAREA", undefined, false); }, // default -> false
function() { testFor("TEXTAREA", true, true); }, // true -> true
function() { testFor("TEXTAREA", true, false); }, // true -> false
function() { testFor("TEXTAREA", false, true); }, // false -> true
function() { testFor("TEXTAREA", false, false); }, // false -> false
];
function done()
{
if (window.internals) {
var next = tests.shift();
if (next)
return window.setTimeout(next, 0);
parent.innerHTML = "";
}
finishJSTest();
}
done();
var successfullyParsed = true;
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>