@@ -48,8 +48,8 @@ describe("pat-autosuggest", function () {
4848        jest . restoreAllMocks ( ) ; 
4949    } ) ; 
5050
51-     describe ( "An ordinary <input> element " ,  function  ( )  { 
52-         it ( "gets converted into a select2 widget" ,  async  function  ( )  { 
51+     describe ( "1 - Basic tests " ,  function  ( )  { 
52+         it ( "1.1 - An ordinary <input> element  gets converted into a select2 widget" ,  async  function  ( )  { 
5353            testutils . createInputElement ( ) ; 
5454            var  $el  =  $ ( "input.pat-autosuggest" ) ; 
5555
@@ -67,10 +67,8 @@ describe("pat-autosuggest", function () {
6767            expect ( $el [ 0 ] . getAttribute ( "type" ) ) . toBe ( "text" ) ; 
6868            expect ( $el [ 0 ] . hasAttribute ( "hidden" ) ) . toBe ( true ) ; 
6969        } ) ; 
70-     } ) ; 
7170
72-     describe ( "An <input> element with an ajax option" ,  function  ( )  { 
73-         it ( "keeps the ajax option when turning into a select2 widget" ,  async  function  ( )  { 
71+         it ( "1.1 - An <input> element with an ajax option keeps the ajax option when turning into a select2 widget" ,  async  function  ( )  { 
7472            testutils . createInputElement ( { 
7573                data : "ajax-url: http://test.org/test" , 
7674            } ) ; 
@@ -82,10 +80,8 @@ describe("pat-autosuggest", function () {
8280            expect ( $el . select2 . mock . calls . pop ( ) [ 0 ] . ajax ) . toBeDefined ( ) ; 
8381            testutils . removeSelect2 ( ) ; 
8482        } ) ; 
85-     } ) ; 
8683
87-     describe ( "A <select> element" ,  function  ( )  { 
88-         it ( "gets converted into a select2 widget" ,  async  function  ( )  { 
84+         it ( "1.3 - A <select> element gets converted into a select2 widget" ,  async  function  ( )  { 
8985            testutils . createSelectElement ( ) ; 
9086            var  $el  =  $ ( "select.pat-autosuggest" ) ; 
9187            expect ( $ ( ".select2-container" ) . length ) . toBe ( 0 ) ; 
@@ -98,11 +94,10 @@ describe("pat-autosuggest", function () {
9894        } ) ; 
9995    } ) ; 
10096
101-     describe ( "Selected items" ,  function  ( )  { 
102-         it ( "can be given custom CSS classes" ,  async  function  ( )  { 
97+     describe ( "2.1 -  Selected items" ,  function  ( )  { 
98+         it ( "4.1 -  can be given custom CSS classes" ,  async  function  ( )  { 
10399            testutils . createInputElement ( { 
104-                 data :
105-                     'words: apple,orange,pear; pre-fill: orange; selection-classes: {"orange": ["fruit", "orange"]}' , 
100+                 data : 'words: apple,orange,pear; pre-fill: orange; selection-classes: {"orange": ["fruit", "orange"]}' , 
106101            } ) ; 
107102            var  $el  =  $ ( "input.pat-autosuggest" ) ; 
108103            expect ( $ ( ".select2-search-choice" ) . length ) . toBe ( 0 ) ; 
@@ -114,7 +109,7 @@ describe("pat-autosuggest", function () {
114109            testutils . removeSelect2 ( ) ; 
115110        } ) ; 
116111
117-         it ( "can be restricted to a certain amount" ,  async  function  ( )  { 
112+         it ( "2.2 -  can be restricted to a certain amount" ,  async  function  ( )  { 
118113            // First check without limit 
119114            testutils . createInputElement ( { 
120115                data : "words: apple,orange,pear; pre-fill: orange" , 
@@ -130,8 +125,7 @@ describe("pat-autosuggest", function () {
130125
131126            // Then with limit 
132127            testutils . createInputElement ( { 
133-                 data :
134-                     "maximum-selection-size: 1; words: apple,orange,pear; pre-fill: orange" , 
128+                 data : "maximum-selection-size: 1; words: apple,orange,pear; pre-fill: orange" , 
135129            } ) ; 
136130            expect ( $ ( ".select2-input" ) . length ) . toBe ( 0 ) ; 
137131            pattern . init ( $ ( "input.pat-autosuggest" ) ) ; 
@@ -143,10 +137,53 @@ describe("pat-autosuggest", function () {
143137            expect ( $ ( ".select2-search-choice-close" ) . length ) . toBe ( 1 ) ; 
144138            testutils . removeSelect2 ( ) ; 
145139        } ) ; 
140+ 
141+         it ( "2.3 - select an item from a word list." ,  async  function  ( )  { 
142+             document . body . innerHTML  =  ` 
143+                 <input 
144+                     type="text" 
145+                     class="pat-autosuggest" 
146+                     data-pat-autosuggest="words: apple, orange, pear" /> 
147+             ` ; 
148+ 
149+             const  input  =  document . querySelector ( "input" ) ; 
150+             new  pattern ( input ) ; 
151+             await  utils . timeout ( 1 ) ;  // wait a tick for async to settle. 
152+             $ ( ".select2-input" ) . click ( ) ; 
153+             $ ( document . querySelector ( ".select2-result" ) ) . mouseup ( ) ; 
154+ 
155+             const  selected  =  document . querySelectorAll ( ".select2-search-choice" ) ; 
156+             expect ( selected . length ) . toBe ( 1 ) ; 
157+             expect ( selected [ 0 ] . textContent . trim ( ) ) . toBe ( "apple" ) ; 
158+             expect ( input . value ) . toBe ( "apple" ) ; 
159+         } ) ; 
160+ 
161+         it ( "2.4 - select multiple items from a word list." ,  async  function  ( )  { 
162+             document . body . innerHTML  =  ` 
163+                 <input 
164+                     type="text" 
165+                     class="pat-autosuggest" 
166+                     data-pat-autosuggest="words: apple, orange, pear" /> 
167+             ` ; 
168+ 
169+             const  input  =  document . querySelector ( "input" ) ; 
170+             new  pattern ( input ) ; 
171+             await  utils . timeout ( 1 ) ;  // wait a tick for async to settle. 
172+             $ ( ".select2-input" ) . click ( ) ; 
173+             $ ( document . querySelector ( ".select2-result" ) ) . mouseup ( ) ; 
174+             $ ( ".select2-input" ) . click ( ) ; 
175+             $ ( document . querySelector ( ".select2-result" ) ) . mouseup ( ) ; 
176+ 
177+             const  selected  =  document . querySelectorAll ( ".select2-search-choice" ) ; 
178+             expect ( selected . length ) . toBe ( 2 ) ; 
179+             expect ( selected [ 0 ] . textContent . trim ( ) ) . toBe ( "apple" ) ; 
180+             expect ( selected [ 1 ] . textContent . trim ( ) ) . toBe ( "orange" ) ; 
181+             expect ( input . value ) . toBe ( "apple,orange" ) ; 
182+         } ) ; 
146183    } ) ; 
147184
148-     describe ( "Placeholder tests" ,  function  ( )  { 
149-         it ( "A placeholder on the original element is reused on the auto-suggest element" ,  async  function  ( )  { 
185+     describe ( "3 -  Placeholder tests" ,  function  ( )  { 
186+         it ( "3.1 -  A placeholder on the original element is reused on the auto-suggest element" ,  async  function  ( )  { 
150187            var  placeholder  =  "Test placeholder" ; 
151188
152189            $ ( "<input/>" ,  { 
@@ -166,7 +203,7 @@ describe("pat-autosuggest", function () {
166203            testutils . removeSelect2 ( ) ; 
167204        } ) ; 
168205
169-         it ( "No placeholder doesn't create an automatic one." ,  async  function  ( )  { 
206+         it ( "3.2 -  No placeholder doesn't create an automatic one." ,  async  function  ( )  { 
170207            $ ( "<input/>" ,  { 
171208                id : "select2" , 
172209                class : "pat-autosuggest" , 
0 commit comments