@@ -128,8 +128,94 @@ describe('Autocomplete Plugin', function () {
128
128
} ) ;
129
129
} ) ;
130
130
} ) ;
131
+
132
+ it ( 'destroy method should properly dispose autocomplete component' , function ( ) {
133
+ const normal = document . querySelector ( '#normal-autocomplete' ) ;
134
+ const limited = document . querySelector ( '#limited-autocomplete' ) ;
135
+
136
+ expect ( normal . parentNode . querySelector ( '.autocomplete-content' ) ) . not . toBeNull ( ) ;
137
+ expect ( limited . parentNode . querySelector ( '.autocomplete-content' ) ) . not . toBeNull ( ) ;
138
+
139
+ const normalInstance = M . Autocomplete . getInstance ( normal ) ;
140
+ const limitedInstance = M . Autocomplete . getInstance ( limited ) ;
141
+ normalInstance . destroy ( ) ;
142
+ limitedInstance . destroy ( ) ;
143
+
144
+ expect ( normal . parentNode . querySelector ( '.autocomplete-content' ) ) . toBeNull ( ) ;
145
+ expect ( limited . parentNode . querySelector ( '.autocomplete-content' ) ) . toBeNull ( ) ;
146
+ } ) ;
147
+
148
+ it ( 'selectOption method should chose only from showed dropdown' , function ( done ) {
149
+ const normal = document . querySelector ( '#normal-autocomplete' ) ;
150
+ const autocompleteInstance = resetAutocomplete ( normal , [
151
+ { id : 'Value Q1' } ,
152
+ { id : 'Value Q' } ,
153
+ { id : 'Value R' } ] ) ;
154
+ const autocompleteEl = normal . parentNode . querySelector ( '.autocomplete-content' ) ;
155
+
156
+ focus ( normal ) ;
157
+ normal . value = 'Q' ;
158
+ keyup ( normal , 81 ) ;
159
+
160
+ setTimeout ( function ( ) {
161
+ expect ( autocompleteEl . children . length ) . toBe ( 2 ) ;
162
+ const dropdownAutocompleteIds = Array
163
+ . from ( autocompleteEl . querySelectorAll ( 'li' ) )
164
+ . map ( liElement => liElement . getAttribute ( 'data-id' ) ) ;
165
+ expect ( dropdownAutocompleteIds ) . toEqual ( [ 'Value Q1' , 'Value Q' ] ) ;
166
+
167
+ autocompleteInstance . selectOption ( 'Value R' ) ;
168
+ expect ( normal . value )
169
+ . withContext ( 'Only options from dropdown can be selected through selectOption' )
170
+ . toBe ( 'Q' ) ;
171
+ autocompleteInstance . selectOption ( 'Value Q' ) ;
172
+ expect ( normal . value )
173
+ . withContext ( 'Only options from dropdown can be selected through selectOption' )
174
+ . toBe ( 'Value Q' ) ;
175
+ done ( ) ;
176
+ } , 200 ) ;
177
+ } ) ;
178
+
179
+ it ( 'setValues method should chose from any init data entry' , function ( done ) {
180
+ const normal = document . querySelector ( '#normal-autocomplete' ) ;
181
+ const autocompleteInstance = resetAutocomplete ( normal , [
182
+ { id : 'Value Q1' } ,
183
+ { id : 'Value Q' } ,
184
+ { id : 'Value R' } ] ) ;
185
+ const autocompleteEl = normal . parentNode . querySelector ( '.autocomplete-content' ) ;
186
+
187
+ focus ( normal ) ;
188
+ normal . value = 'Q' ;
189
+ keyup ( normal , 81 ) ;
190
+
191
+ setTimeout ( function ( ) {
192
+ expect ( autocompleteEl . children . length ) . toBe ( 2 ) ;
193
+ const dropdownAutocompleteIds = Array
194
+ . from ( autocompleteEl . querySelectorAll ( 'li' ) )
195
+ . map ( liElement => liElement . getAttribute ( 'data-id' ) ) ;
196
+ expect ( dropdownAutocompleteIds ) . toEqual ( [ 'Value Q1' , 'Value Q' ] ) ;
197
+
198
+ autocompleteInstance . setValues ( [ { id : 'Value R' } ] ) ;
199
+ expect ( normal . value )
200
+ . withContext ( 'Any option from init data can be selected through setValues' )
201
+ . toBe ( 'Value R' ) ;
202
+ autocompleteInstance . setValues ( [ { id : 'Value Q' } ] ) ;
203
+ expect ( normal . value )
204
+ . withContext ( 'Any option from init data can be selected through setValues' )
205
+ . toBe ( 'Value Q' ) ;
206
+ done ( ) ;
207
+ } , 200 ) ;
208
+ } ) ;
131
209
} ) ;
132
210
211
+ function resetAutocomplete ( autocompleteElement , data ) {
212
+ M . Autocomplete . getInstance ( autocompleteElement ) . destroy ( ) ;
213
+ return M . Autocomplete . init ( autocompleteElement , {
214
+ data : data ,
215
+ minLength : 0
216
+ } ) ;
217
+ }
218
+
133
219
function openDropdownAndSelectFirstOption ( autocomplete , onFinish ) {
134
220
click ( autocomplete ) ;
135
221
keyup ( autocomplete , 9 ) ; // works
0 commit comments