1 |
(function( $ ) { |
2 |
|
3 |
module( "autocomplete: events" ); |
4 |
|
5 |
var data = [ "Clojure", "COBOL", "ColdFusion", "Java", "JavaScript", "Scala", "Scheme" ]; |
6 |
|
7 |
$.each([ |
8 |
{ |
9 |
type: "input", |
10 |
selector: "#autocomplete", |
11 |
valueMethod: "val" |
12 |
}, |
13 |
{ |
14 |
type: "textarea", |
15 |
selector: "#autocomplete-textarea", |
16 |
valueMethod: "val" |
17 |
}, |
18 |
{ |
19 |
type: "contenteditable", |
20 |
selector: "#autocomplete-contenteditable", |
21 |
valueMethod: "text" |
22 |
} |
23 |
], function( i, settings ) { |
24 |
asyncTest( "all events - " + settings.type, function() { |
25 |
expect( 13 ); |
26 |
var element = $( settings.selector ) |
27 |
.autocomplete({ |
28 |
autoFocus: false, |
29 |
delay: 0, |
30 |
source: data, |
31 |
search: function( event ) { |
32 |
equal( event.originalEvent.type, "keydown", "search originalEvent" ); |
33 |
}, |
34 |
response: function( event, ui ) { |
35 |
deepEqual( ui.content, [ |
36 |
{ label: "Clojure", value: "Clojure" }, |
37 |
{ label: "Java", value: "Java" }, |
38 |
{ label: "JavaScript", value: "JavaScript" } |
39 |
], "response ui.content" ); |
40 |
ui.content.splice( 0, 1 ); |
41 |
}, |
42 |
open: function() { |
43 |
ok( menu.is( ":visible" ), "menu open on open" ); |
44 |
}, |
45 |
focus: function( event, ui ) { |
46 |
equal( event.originalEvent.type, "menufocus", "focus originalEvent" ); |
47 |
deepEqual( ui.item, { label: "Java", value: "Java" }, "focus ui.item" ); |
48 |
}, |
49 |
close: function( event ) { |
50 |
equal( event.originalEvent.type, "menuselect", "close originalEvent" ); |
51 |
ok( menu.is( ":hidden" ), "menu closed on close" ); |
52 |
}, |
53 |
select: function( event, ui ) { |
54 |
equal( event.originalEvent.type, "menuselect", "select originalEvent" ); |
55 |
deepEqual( ui.item, { label: "Java", value: "Java" }, "select ui.item" ); |
56 |
}, |
57 |
change: function( event, ui ) { |
58 |
equal( event.originalEvent.type, "blur", "change originalEvent" ); |
59 |
deepEqual( ui.item, { label: "Java", value: "Java" }, "change ui.item" ); |
60 |
ok( menu.is( ":hidden" ), "menu closed on change" ); |
61 |
start(); |
62 |
} |
63 |
}), |
64 |
menu = element.autocomplete( "widget" ); |
65 |
|
66 |
element.simulate( "focus" )[ settings.valueMethod ]( "j" ).keydown(); |
67 |
setTimeout(function() { |
68 |
ok( menu.is( ":visible" ), "menu is visible after delay" ); |
69 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); |
70 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } ); |
71 |
// blur must be async for IE to handle it properly |
72 |
setTimeout(function() { |
73 |
element.simulate( "blur" ); |
74 |
}, 1 ); |
75 |
}, 50 ); |
76 |
}); |
77 |
}); |
78 |
|
79 |
asyncTest( "change without selection", function() { |
80 |
expect( 1 ); |
81 |
var element = $( "#autocomplete" ).autocomplete({ |
82 |
delay: 0, |
83 |
source: data, |
84 |
change: function( event, ui ) { |
85 |
strictEqual( ui.item, null ); |
86 |
start(); |
87 |
} |
88 |
}); |
89 |
element.triggerHandler( "focus" ); |
90 |
element.val( "ja" ).triggerHandler( "blur" ); |
91 |
}); |
92 |
|
93 |
asyncTest( "cancel search", function() { |
94 |
expect( 6 ); |
95 |
var first = true, |
96 |
element = $( "#autocomplete" ).autocomplete({ |
97 |
delay: 0, |
98 |
source: data, |
99 |
search: function() { |
100 |
if ( first ) { |
101 |
equal( element.val(), "ja", "val on first search" ); |
102 |
first = false; |
103 |
return false; |
104 |
} |
105 |
equal( element.val(), "java", "val on second search" ); |
106 |
}, |
107 |
open: function() { |
108 |
ok( true, "menu opened" ); |
109 |
} |
110 |
}), |
111 |
menu = element.autocomplete( "widget" ); |
112 |
element.val( "ja" ).keydown(); |
113 |
setTimeout(function() { |
114 |
ok( menu.is( ":hidden" ), "menu is hidden after first search" ); |
115 |
element.val( "java" ).keydown(); |
116 |
setTimeout(function() { |
117 |
ok( menu.is( ":visible" ), "menu is visible after second search" ); |
118 |
equal( menu.find( ".ui-menu-item" ).length, 2, "# of menu items" ); |
119 |
start(); |
120 |
}, 50 ); |
121 |
}, 50 ); |
122 |
}); |
123 |
|
124 |
asyncTest( "cancel focus", function() { |
125 |
expect( 1 ); |
126 |
var customVal = "custom value", |
127 |
element = $( "#autocomplete" ).autocomplete({ |
128 |
delay: 0, |
129 |
source: data, |
130 |
focus: function() { |
131 |
$( this ).val( customVal ); |
132 |
return false; |
133 |
} |
134 |
}); |
135 |
element.val( "ja" ).keydown(); |
136 |
setTimeout(function() { |
137 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); |
138 |
equal( element.val(), customVal ); |
139 |
start(); |
140 |
}, 50 ); |
141 |
}); |
142 |
|
143 |
asyncTest( "cancel select", function() { |
144 |
expect( 1 ); |
145 |
var customVal = "custom value", |
146 |
element = $( "#autocomplete" ).autocomplete({ |
147 |
delay: 0, |
148 |
source: data, |
149 |
select: function() { |
150 |
$( this ).val( customVal ); |
151 |
return false; |
152 |
} |
153 |
}); |
154 |
element.val( "ja" ).keydown(); |
155 |
setTimeout(function() { |
156 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); |
157 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } ); |
158 |
equal( element.val(), customVal ); |
159 |
start(); |
160 |
}, 50 ); |
161 |
}); |
162 |
|
163 |
asyncTest( "blur during remote search", function() { |
164 |
expect( 1 ); |
165 |
var ac = $( "#autocomplete" ).autocomplete({ |
166 |
delay: 0, |
167 |
source: function( request, response ) { |
168 |
ok( true, "trigger request" ); |
169 |
ac.simulate( "blur" ); |
170 |
setTimeout(function() { |
171 |
response([ "result" ]); |
172 |
start(); |
173 |
}, 100 ); |
174 |
}, |
175 |
open: function() { |
176 |
ok( false, "opened after a blur" ); |
177 |
} |
178 |
}); |
179 |
ac.val( "ro" ).keydown(); |
180 |
}); |
181 |
|
182 |
}( jQuery ) ); |