1<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
2<html>
3<head>
4<script src="../../fast/js/resources/js-test-pre.js"></script>
5<script src="resources/js-test-selection-shared.js"></script>
6</head>
7<body>
8<p id="description"></p>
9<div id="console"></div>
10<script>
11description('For Bug 72939: Asynchronous SpellChecker should consider multiple requests.');
12
13if (window.layoutTestController) {
14 layoutTestController.waitUntilDone();
15 layoutTestController.setAsynchronousSpellCheckingEnabled(true);
16}
17
18var testRoot = document.createElement("div");
19document.body.insertBefore(testRoot, document.body.firstChild);
20
21
22var source = document.createElement("div");
23source.innerHTML = "foo bar";
24testRoot.appendChild(source);
25
26var testInput1 = document.createElement("input");
27testInput1.setAttribute("type", "text");
28testRoot.appendChild(testInput1);
29var testInput2 = document.createElement("input");
30testInput2.setAttribute("type", "text");
31testRoot.appendChild(testInput2);
32var testInput3 = document.createElement("input");
33testInput3.setAttribute("type", "text");
34testRoot.appendChild(testInput3);
35
36var sel = window.getSelection();
37
38// At least, testInput1 and testInput3 should have markers.
39var tests = [
40 function() { verify(source, testInput1, [[0, 3]]); },
41 function() { verify(source, testInput3, [[0, 3]]); }
42];
43
44function verifyIfAny()
45{
46 var next = tests.shift();
47 if (next) {
48 next();
49 return;
50 }
51
52 testRoot.style.display = "none";
53 if (window.layoutTestController) {
54 layoutTestController.setAsynchronousSpellCheckingEnabled(false);
55 layoutTestController.notifyDone();
56 }
57}
58
59function verifyMarker(node, expectedMarked)
60{
61 node.focus();
62
63 if (!window.layoutTestController)
64 return;
65
66 var ok = true;
67 for (var i = 0; ok && i < expectedMarked.length; ++i)
68 ok = ok && layoutTestController.hasSpellingMarker(expectedMarked[i][0], expectedMarked[i][1]);
69 return ok;
70}
71
72function copyAndPaste(source, dest)
73{
74 sel.selectAllChildren(source);
75 document.execCommand("Copy");
76 if (dest instanceof HTMLInputElement || dest instanceof HTMLTextAreaElement) {
77 dest.value = "";
78 dest.focus();
79 } else {
80 dest.innerHTML = "";
81 sel.selectAllChildren(dest);
82 }
83 document.execCommand("Paste");
84}
85
86function verify(source, dest, expectedMarked)
87{
88 var nretry = 10;
89 var nsleep = 1;
90 function trial() {
91 var verified = verifyMarker(dest, expectedMarked);
92 if (verified) {
93 testPassed(dest.tagName + " has a marker on '" + source.innerHTML + "'");
94 verifyIfAny();
95 return;
96 }
97
98 nretry--;
99 if (0 == nretry) {
100 testFailed(dest.tagName + " should have a marker on for '" + source.innerHTML + "'");
101 verifyIfAny();
102 return;
103 }
104
105 nsleep *= 2;
106 window.setTimeout(trial, nsleep);
107 };
108 trial();
109}
110
111var destinations = [testInput1, testInput2, testInput3];
112for (var i = 0; i < destinations.length; ++i)
113 copyAndPaste(source, destinations[i]);
114verifyIfAny();
115
116var successfullyParsed = true;
117
118</script>
119<script src="../../fast/js/resources/js-test-post.js"></script>
120</body>
121</html>