blob: fdfa4427f72193956c7701d9d5e9d47759d0ac16 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<script src="../../resources/js-test.js"></script>
<script src="../editing.js"></script>
<style>
.editing {
border: 2px solid red;
padding: 6px;
font-size: 18px;
}
</style>
</head>
<body>
<pre id="description"></pre>
<pre id="console"></pre>
<div id="container"></div>
<script>
description("Test for Unified Spell Checker & Async Spell Checker.");
jsTestIsAsync = true;
if (window.internals)
internals.settings.setUnifiedTextCheckerEnabled(true);
var container = document.getElementById('container');
function removeChildren(node) {
while (node.firstChild)
node.removeChild(node.firstChild);
}
var testData = [
{ text: 'zz', marked: ['zz'] },
{ text: 'apple,zz,orange', marked: ['zz'] },
{ text: 'zz,zz', marked: ['zz','zz'] },
{ text: 'zz zz zz', marked: ['zz', 'zz', 'zz'] },
{ text: ' zz zz zz ', marked: ['zz', 'zz', 'zz'] },
{ text: 'zz apple orange', marked: ['zz'] },
{ text: 'apple zz orange', marked: ['zz'] },
{ text: 'apple orange zz', marked: ['zz'] },
{ text: 'zzz', marked: [] },
{ text: 'I would like to sleep, zzz', marked: [] }
];
var testNo = 0;
function doTestIfAny() {
var next = testData.shift();
if (next)
return window.setTimeout(function(){ doTest(++testNo, next.text, next.marked); }, 0);
// No more tests.
removeChildren(container);
finishJSTest();
}
function createEditableElement(id) {
var e = document.createElement('div');
e.setAttribute("contentEditable", "true");
e.className = 'editing';
e.id = id;
return e;
}
function typeText(e, text) {
e.focus();
for (var i = 0; i < text.length; ++i) {
typeCharacterCommand(text[i]);
}
typeCharacterCommand('.');
}
function doTest(testNo, text, marked) {
removeChildren(container);
var id = "spelling" + testNo;
var e = createEditableElement(id);
container.appendChild(e);
typeText(e, text);
if (!window.internals)
return;
tryVerify(10, id, text, marked, 1);
}
function tryVerify(restTry, id, text, marked, nsleep) {
// No more try.
if (restTry <= 0) {
testFailed('text : "' + text + '" should have markers: [' + marked + ']');
setTimeout(doTestIfAny, 0);
return;
}
var success = true;
var e = document.getElementById(id);
var numMarked = internals.markerCountForNode(e.firstChild, "spelling");
var success = numMarked == marked.length;
if (success) {
for (var i = 0; i < numMarked; ++i) {
var range = internals.markerRangeForNode(e.firstChild, "spelling", i);
if (range.toString() != marked[i])
success = false;
}
}
if (success) {
testPassed('text : "' + text + '" has markers: [' + marked + ']');
setTimeout(doTestIfAny, 0);
} else {
// Type '.' to invoke asynchronouse spell checking again.
typeCharacterCommand('.');
setTimeout(function() { tryVerify(restTry - 1, id, text, marked, nsleep * 2); }, nsleep);
}
}
doTestIfAny();
var successfullyParsed = true;
</script>
</body>
</html>