128 lines
3.2 KiB
HTML
128 lines
3.2 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<script src="../../resources/js-test-pre.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.setAsynchronousSpellCheckingEnabled(true);
|
|
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>
|
|
<script src="../../resources/js-test-post.js"></script>
|
|
</body>
|
|
</html>
|