|
1 <?xml version="1.0"?> |
|
2 <?xml-stylesheet href="chrome://global/skin" type="text/css"?> |
|
3 <?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?> |
|
4 |
|
5 <window title="Autocomplete Widget Test 4" |
|
6 xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" |
|
7 onload="runTest();"> |
|
8 |
|
9 <script type="application/javascript" |
|
10 src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/> |
|
11 <script type="application/javascript" |
|
12 src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"/> |
|
13 <script type="application/javascript" |
|
14 src="chrome://global/content/globalOverlay.js"/> |
|
15 |
|
16 <textbox id="autocomplete" |
|
17 type="autocomplete" |
|
18 completedefaultindex="true" |
|
19 onsearchcomplete="searchComplete();" |
|
20 timeout="0" |
|
21 autocompletesearch="simple"/> |
|
22 |
|
23 <script class="testbody" type="application/javascript"> |
|
24 <![CDATA[ |
|
25 |
|
26 Components.utils.import("resource://gre/modules/XPCOMUtils.jsm"); |
|
27 |
|
28 function autoCompleteSimpleResult(aString) { |
|
29 this.searchString = aString; |
|
30 this.searchResult = Components.interfaces.nsIAutoCompleteResult.RESULT_SUCCESS; |
|
31 this.matchCount = 1; |
|
32 this._param = "Result"; |
|
33 } |
|
34 autoCompleteSimpleResult.prototype = { |
|
35 _param: "", |
|
36 searchString: null, |
|
37 searchResult: Components.interfaces.nsIAutoCompleteResult.RESULT_FAILURE, |
|
38 defaultIndex: 0, |
|
39 errorDescription: null, |
|
40 matchCount: 0, |
|
41 getValueAt: function() { return this._param; }, |
|
42 getCommentAt: function() { return null; }, |
|
43 getStyleAt: function() { return null; }, |
|
44 getImageAt: function() { return null; }, |
|
45 getFinalCompleteValueAt: function() { return this.getValueAt(); }, |
|
46 getLabelAt: function() { return null; }, |
|
47 removeValueAt: function() {} |
|
48 }; |
|
49 |
|
50 // A basic autocomplete implementation that returns one result. |
|
51 let autoCompleteSimple = { |
|
52 classID: Components.ID("0a2afbdb-f30e-47d1-9cb1-0cd160240aca"), |
|
53 contractID: "@mozilla.org/autocomplete/search;1?name=simple", |
|
54 QueryInterface: XPCOMUtils.generateQI([ |
|
55 Components.interfaces.nsIFactory, |
|
56 Components.interfaces.nsIAutoCompleteSearch |
|
57 ]), |
|
58 createInstance: function (outer, iid) { |
|
59 return this.QueryInterface(iid); |
|
60 }, |
|
61 |
|
62 registerFactory: function () { |
|
63 let registrar = |
|
64 Components.manager.QueryInterface(Components.interfaces.nsIComponentRegistrar); |
|
65 registrar.registerFactory(this.classID, "Test Simple Autocomplete", |
|
66 this.contractID, this); |
|
67 }, |
|
68 unregisterFactory: function () { |
|
69 let registrar = |
|
70 Components.manager.QueryInterface(Components.interfaces.nsIComponentRegistrar); |
|
71 registrar.unregisterFactory(this.classID, this); |
|
72 }, |
|
73 |
|
74 startSearch: function (aString, aParam, aResult, aListener) { |
|
75 let result = new autoCompleteSimpleResult(aString); |
|
76 aListener.onSearchResult(this, result); |
|
77 }, |
|
78 stopSearch: function () {} |
|
79 }; |
|
80 |
|
81 SimpleTest.waitForExplicitFinish(); |
|
82 |
|
83 // XPFE AutoComplete needs to register early. |
|
84 autoCompleteSimple.registerFactory(); |
|
85 |
|
86 let gACTimer; |
|
87 let gAutoComplete; |
|
88 |
|
89 function searchComplete() { |
|
90 is(gAutoComplete.value, "result", "Value should be autocompleted now"); |
|
91 ok(Date.now() - gACTimer > 500, "There should be a delay before autocomplete"); |
|
92 |
|
93 // Unregister the factory so that we don't get in the way of other tests |
|
94 autoCompleteSimple.unregisterFactory(); |
|
95 SimpleTest.finish(); |
|
96 } |
|
97 |
|
98 function runTest() { |
|
99 gAutoComplete = $("autocomplete"); |
|
100 |
|
101 const SEARCH_STRING = "res"; |
|
102 |
|
103 function cbCallback() { |
|
104 gAutoComplete.focus(); |
|
105 synthesizeKey("v", { accelKey: true }); |
|
106 is(gAutoComplete.value, SEARCH_STRING, "Value should not be autocompleted immediately"); |
|
107 } |
|
108 |
|
109 SimpleTest.waitForClipboard(SEARCH_STRING, function () { |
|
110 gACTimer = Date.now(); |
|
111 Components.classes["@mozilla.org/widget/clipboardhelper;1"] |
|
112 .getService(Components.interfaces.nsIClipboardHelper) |
|
113 .copyStringToClipboard(SEARCH_STRING, Components.interfaces.nsIClipboard.kGlobalClipboard, document); |
|
114 }, cbCallback, cbCallback); |
|
115 } |
|
116 ]]> |
|
117 </script> |
|
118 |
|
119 <body xmlns="http://www.w3.org/1999/xhtml"> |
|
120 <p id="display"> |
|
121 </p> |
|
122 <div id="content" style="display: none"> |
|
123 </div> |
|
124 <pre id="test"> |
|
125 </pre> |
|
126 </body> |
|
127 |
|
128 </window> |