and a note on manual changes in dataTables.bootstrap.css
[myslice.git] / third-party / jquery-ui-1.10.2 / tests / unit / autocomplete / autocomplete_events.js
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 ) );