@gitlab/ui 114.0.1 → 114.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/package.json +9 -28
  2. package/CHANGELOG.md +0 -13132
  3. package/src/vendor/bootstrap/LICENSE +0 -11
  4. package/src/vendor/bootstrap-vue/LICENSE +0 -11
  5. package/src/vendor/bootstrap-vue/package.json +0 -144
  6. package/src/vendor/bootstrap-vue/src/components/button/MODIFICATIONS.md +0 -16
  7. package/src/vendor/bootstrap-vue/src/components/button/README.md +0 -240
  8. package/src/vendor/bootstrap-vue/src/components/button/button-close.spec.js +0 -210
  9. package/src/vendor/bootstrap-vue/src/components/button/button.spec.js +0 -349
  10. package/src/vendor/bootstrap-vue/src/components/button/package.json +0 -105
  11. package/src/vendor/bootstrap-vue/src/components/dropdown/README.md +0 -730
  12. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-divider.spec.js +0 -58
  13. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-form.spec.js +0 -110
  14. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-group.spec.js +0 -94
  15. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-header.spec.js +0 -73
  16. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-item-button.spec.js +0 -117
  17. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-item.spec.js +0 -147
  18. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-text.spec.js +0 -59
  19. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown.spec.js +0 -1121
  20. package/src/vendor/bootstrap-vue/src/components/dropdown/package.json +0 -368
  21. package/src/vendor/bootstrap-vue/src/components/form/README.md +0 -365
  22. package/src/vendor/bootstrap-vue/src/components/form/form-invalid-feedback.spec.js +0 -170
  23. package/src/vendor/bootstrap-vue/src/components/form/form-text.spec.js +0 -93
  24. package/src/vendor/bootstrap-vue/src/components/form/form-valid-feedback.spec.js +0 -157
  25. package/src/vendor/bootstrap-vue/src/components/form/form.spec.js +0 -97
  26. package/src/vendor/bootstrap-vue/src/components/form/package.json +0 -112
  27. package/src/vendor/bootstrap-vue/src/components/form-checkbox/README.md +0 -691
  28. package/src/vendor/bootstrap-vue/src/components/form-checkbox/form-checkbox-group.spec.js +0 -525
  29. package/src/vendor/bootstrap-vue/src/components/form-checkbox/form-checkbox.spec.js +0 -922
  30. package/src/vendor/bootstrap-vue/src/components/form-checkbox/package.json +0 -172
  31. package/src/vendor/bootstrap-vue/src/components/form-group/README.md +0 -339
  32. package/src/vendor/bootstrap-vue/src/components/form-group/form-group.spec.js +0 -477
  33. package/src/vendor/bootstrap-vue/src/components/form-group/package.json +0 -183
  34. package/src/vendor/bootstrap-vue/src/components/form-radio/README.md +0 -437
  35. package/src/vendor/bootstrap-vue/src/components/form-radio/form-radio-group.spec.js +0 -357
  36. package/src/vendor/bootstrap-vue/src/components/form-radio/form-radio.spec.js +0 -587
  37. package/src/vendor/bootstrap-vue/src/components/form-radio/package.json +0 -162
  38. package/src/vendor/bootstrap-vue/src/components/form-select/README.md +0 -504
  39. package/src/vendor/bootstrap-vue/src/components/form-select/form-select-option-group.spec.js +0 -138
  40. package/src/vendor/bootstrap-vue/src/components/form-select/form-select-option.spec.js +0 -75
  41. package/src/vendor/bootstrap-vue/src/components/form-select/form-select.spec.js +0 -723
  42. package/src/vendor/bootstrap-vue/src/components/form-select/package.json +0 -132
  43. package/src/vendor/bootstrap-vue/src/components/form-textarea/README.md +0 -453
  44. package/src/vendor/bootstrap-vue/src/components/form-textarea/form-textarea.spec.js +0 -1000
  45. package/src/vendor/bootstrap-vue/src/components/form-textarea/package.json +0 -122
  46. package/src/vendor/bootstrap-vue/src/components/layout/README.md +0 -791
  47. package/src/vendor/bootstrap-vue/src/components/layout/col.spec.js +0 -192
  48. package/src/vendor/bootstrap-vue/src/components/layout/form-row.spec.js +0 -45
  49. package/src/vendor/bootstrap-vue/src/components/layout/package.json +0 -99
  50. package/src/vendor/bootstrap-vue/src/components/link/README.md +0 -76
  51. package/src/vendor/bootstrap-vue/src/components/link/link.spec.js +0 -434
  52. package/src/vendor/bootstrap-vue/src/components/link/package.json +0 -57
  53. package/src/vendor/bootstrap-vue/src/components/modal/MODIFICATIONS.md +0 -30
  54. package/src/vendor/bootstrap-vue/src/components/modal/README.md +0 -1067
  55. package/src/vendor/bootstrap-vue/src/components/modal/helpers/bv-modal-event.class.spec.js +0 -82
  56. package/src/vendor/bootstrap-vue/src/components/modal/modal.spec.js +0 -1418
  57. package/src/vendor/bootstrap-vue/src/components/modal/package.json +0 -544
  58. package/src/vendor/bootstrap-vue/src/components/nav/README.md +0 -362
  59. package/src/vendor/bootstrap-vue/src/components/nav/nav-item.spec.js +0 -127
  60. package/src/vendor/bootstrap-vue/src/components/nav/nav.spec.js +0 -177
  61. package/src/vendor/bootstrap-vue/src/components/nav/package.json +0 -73
  62. package/src/vendor/bootstrap-vue/src/components/popover/README.md +0 -919
  63. package/src/vendor/bootstrap-vue/src/components/popover/package.json +0 -261
  64. package/src/vendor/bootstrap-vue/src/components/popover/popover.spec.js +0 -198
  65. package/src/vendor/bootstrap-vue/src/components/table/README.md +0 -3157
  66. package/src/vendor/bootstrap-vue/src/components/table/helpers/default-sort-compare.spec.js +0 -112
  67. package/src/vendor/bootstrap-vue/src/components/table/helpers/normalize-fields.spec.js +0 -93
  68. package/src/vendor/bootstrap-vue/src/components/table/package.json +0 -1763
  69. package/src/vendor/bootstrap-vue/src/components/table/table-busy.spec.js +0 -150
  70. package/src/vendor/bootstrap-vue/src/components/table/table-caption.spec.js +0 -176
  71. package/src/vendor/bootstrap-vue/src/components/table/table-colgroup.spec.js +0 -81
  72. package/src/vendor/bootstrap-vue/src/components/table/table-filtering.spec.js +0 -409
  73. package/src/vendor/bootstrap-vue/src/components/table/table-item-formatter.spec.js +0 -56
  74. package/src/vendor/bootstrap-vue/src/components/table/table-lite.spec.js +0 -682
  75. package/src/vendor/bootstrap-vue/src/components/table/table-pagination.spec.js +0 -133
  76. package/src/vendor/bootstrap-vue/src/components/table/table-primarykey.spec.js +0 -83
  77. package/src/vendor/bootstrap-vue/src/components/table/table-provider.spec.js +0 -411
  78. package/src/vendor/bootstrap-vue/src/components/table/table-row-details.spec.js +0 -459
  79. package/src/vendor/bootstrap-vue/src/components/table/table-selectable.spec.js +0 -1182
  80. package/src/vendor/bootstrap-vue/src/components/table/table-simple.spec.js +0 -206
  81. package/src/vendor/bootstrap-vue/src/components/table/table-sorting.spec.js +0 -858
  82. package/src/vendor/bootstrap-vue/src/components/table/table-sticky-column.spec.js +0 -377
  83. package/src/vendor/bootstrap-vue/src/components/table/table-tbody-bottom-row.spec.js +0 -94
  84. package/src/vendor/bootstrap-vue/src/components/table/table-tbody-row-events.spec.js +0 -529
  85. package/src/vendor/bootstrap-vue/src/components/table/table-tbody-top-row.spec.js +0 -88
  86. package/src/vendor/bootstrap-vue/src/components/table/table-tbody-transition.spec.js +0 -83
  87. package/src/vendor/bootstrap-vue/src/components/table/table-tfoot-custom.spec.js +0 -91
  88. package/src/vendor/bootstrap-vue/src/components/table/table-tfoot-events.spec.js +0 -137
  89. package/src/vendor/bootstrap-vue/src/components/table/table-thead-events.spec.js +0 -155
  90. package/src/vendor/bootstrap-vue/src/components/table/table-thead-top.spec.js +0 -96
  91. package/src/vendor/bootstrap-vue/src/components/table/table.spec.js +0 -692
  92. package/src/vendor/bootstrap-vue/src/components/tabs/README.md +0 -433
  93. package/src/vendor/bootstrap-vue/src/components/tabs/package.json +0 -205
  94. package/src/vendor/bootstrap-vue/src/components/tabs/tab.spec.js +0 -330
  95. package/src/vendor/bootstrap-vue/src/components/tabs/tabs.spec.js +0 -778
  96. package/src/vendor/bootstrap-vue/src/components/toast/README.md +0 -655
  97. package/src/vendor/bootstrap-vue/src/components/toast/helpers/bv-toast.spec.js +0 -117
  98. package/src/vendor/bootstrap-vue/src/components/toast/package.json +0 -184
  99. package/src/vendor/bootstrap-vue/src/components/toast/toast.spec.js +0 -294
  100. package/src/vendor/bootstrap-vue/src/components/toast/toaster.spec.js +0 -77
  101. package/src/vendor/bootstrap-vue/src/components/tooltip/README.md +0 -559
  102. package/src/vendor/bootstrap-vue/src/components/tooltip/package.json +0 -258
  103. package/src/vendor/bootstrap-vue/src/components/tooltip/tooltip.spec.js +0 -1240
  104. package/src/vendor/bootstrap-vue/src/components/transition/package.json +0 -5
  105. package/src/vendor/bootstrap-vue/src/components/transporter/package.json +0 -5
  106. package/src/vendor/bootstrap-vue/src/components/transporter/transporter.spec.js +0 -85
  107. package/src/vendor/bootstrap-vue/src/directives/modal/modal.spec.js +0 -191
  108. package/src/vendor/bootstrap-vue/src/directives/tooltip/README.md +0 -521
  109. package/src/vendor/bootstrap-vue/src/directives/tooltip/package.json +0 -131
  110. package/src/vendor/bootstrap-vue/src/directives/tooltip/tooltip.spec.js +0 -190
  111. package/src/vendor/bootstrap-vue/src/directives/visible/README.md +0 -244
  112. package/src/vendor/bootstrap-vue/src/directives/visible/package.json +0 -24
  113. package/src/vendor/bootstrap-vue/src/mixins/attrs.spec.js +0 -194
  114. package/src/vendor/bootstrap-vue/src/mixins/click-out.spec.js +0 -52
  115. package/src/vendor/bootstrap-vue/src/mixins/focus-in.spec.js +0 -53
  116. package/src/vendor/bootstrap-vue/src/mixins/listen-on-document.spec.js +0 -117
  117. package/src/vendor/bootstrap-vue/src/mixins/listen-on-root.spec.js +0 -77
  118. package/src/vendor/bootstrap-vue/src/mixins/listen-on-window.spec.js +0 -115
  119. package/src/vendor/bootstrap-vue/src/mixins/listeners.spec.js +0 -245
  120. package/src/vendor/bootstrap-vue/src/utils/bv-event.class.spec.js +0 -66
  121. package/src/vendor/bootstrap-vue/src/utils/clone-deep.spec.js +0 -70
  122. package/src/vendor/bootstrap-vue/src/utils/config.spec.js +0 -169
  123. package/src/vendor/bootstrap-vue/src/utils/css-escape.spec.js +0 -82
  124. package/src/vendor/bootstrap-vue/src/utils/dom.spec.js +0 -291
  125. package/src/vendor/bootstrap-vue/src/utils/events.spec.js +0 -41
  126. package/src/vendor/bootstrap-vue/src/utils/get.spec.js +0 -109
  127. package/src/vendor/bootstrap-vue/src/utils/inspect.spec.js +0 -251
  128. package/src/vendor/bootstrap-vue/src/utils/loose-equal.spec.js +0 -203
  129. package/src/vendor/bootstrap-vue/src/utils/normalize-slot.spec.js +0 -63
  130. package/src/vendor/bootstrap-vue/src/utils/number.spec.js +0 -72
  131. package/src/vendor/bootstrap-vue/src/utils/object.spec.js +0 -61
  132. package/src/vendor/bootstrap-vue/src/utils/props.spec.js +0 -112
  133. package/src/vendor/bootstrap-vue/src/utils/router.spec.js +0 -248
  134. package/src/vendor/bootstrap-vue/src/utils/string.spec.js +0 -65
  135. package/src/vendor/bootstrap-vue/src/utils/stringify-object-values.spec.js +0 -47
  136. package/src/vendor/bootstrap-vue/src/utils/warn.spec.js +0 -54
@@ -1,723 +0,0 @@
1
- import { mount } from '@vue/test-utils'
2
- import { waitNT, waitRAF } from '../../../tests/utils'
3
- import { BFormSelect } from './form-select'
4
-
5
- describe('form-select', () => {
6
- afterAll(() => {
7
- console.warn.mockClear()
8
- })
9
-
10
- it('has select as root element', async () => {
11
- const wrapper = mount(BFormSelect)
12
- expect(wrapper.element.tagName).toBe('SELECT')
13
-
14
- wrapper.destroy()
15
- })
16
-
17
- it('has class custom-select', async () => {
18
- const wrapper = mount(BFormSelect)
19
- expect(wrapper.classes()).toContain('custom-select')
20
- expect(wrapper.classes().length).toBe(1)
21
-
22
- wrapper.destroy()
23
- })
24
-
25
- it('does not have attr multiple by default', async () => {
26
- const wrapper = mount(BFormSelect)
27
- expect(wrapper.attributes('multiple')).toBeUndefined()
28
-
29
- wrapper.destroy()
30
- })
31
-
32
- it('does not have attr required by default', async () => {
33
- const wrapper = mount(BFormSelect)
34
- expect(wrapper.attributes('required')).toBeUndefined()
35
-
36
- wrapper.destroy()
37
- })
38
-
39
- it('has attr required when required=true', async () => {
40
- const wrapper = mount(BFormSelect, {
41
- propsData: {
42
- required: true
43
- }
44
- })
45
- expect(wrapper.attributes('required')).toBeDefined()
46
-
47
- wrapper.destroy()
48
- })
49
-
50
- it('does not have attr form by default', async () => {
51
- const wrapper = mount(BFormSelect)
52
- expect(wrapper.attributes('form')).toBeUndefined()
53
-
54
- wrapper.destroy()
55
- })
56
-
57
- it('has attr form when form is set', async () => {
58
- const wrapper = mount(BFormSelect, {
59
- propsData: {
60
- form: 'foobar'
61
- }
62
- })
63
- expect(wrapper.attributes('form')).toBeDefined()
64
- expect(wrapper.attributes('form')).toBe('foobar')
65
-
66
- wrapper.destroy()
67
- })
68
-
69
- it('has attr multiple when multiple=true', async () => {
70
- const wrapper = mount(BFormSelect, {
71
- propsData: {
72
- multiple: true,
73
- value: []
74
- }
75
- })
76
- expect(wrapper.attributes('multiple')).toBeDefined()
77
-
78
- wrapper.destroy()
79
- })
80
-
81
- it('has attr size when select-size is set', async () => {
82
- const wrapper = mount(BFormSelect, {
83
- propsData: {
84
- selectSize: 4
85
- }
86
- })
87
- expect(wrapper.attributes('size')).toBeDefined()
88
- expect(wrapper.attributes('size')).toBe('4')
89
- expect(wrapper.attributes('multiple')).toBeUndefined()
90
-
91
- wrapper.destroy()
92
- })
93
-
94
- it('has auto ID attr by default', async () => {
95
- const wrapper = mount(BFormSelect)
96
- await waitNT(wrapper.vm) // Auto-ID assigned after mount
97
- expect(wrapper.attributes('id')).toBeDefined()
98
-
99
- wrapper.destroy()
100
- })
101
-
102
- it('has user supplied ID attr when id is set', async () => {
103
- const wrapper = mount(BFormSelect, {
104
- propsData: {
105
- id: 'foobar'
106
- }
107
- })
108
- expect(wrapper.attributes('id')).toBeDefined()
109
- expect(wrapper.attributes('id')).toBe('foobar')
110
-
111
- wrapper.destroy()
112
- })
113
-
114
- it('does not have attr size by default', async () => {
115
- const wrapper = mount(BFormSelect)
116
- expect(wrapper.attributes('size')).toBeUndefined()
117
-
118
- wrapper.destroy()
119
- })
120
-
121
- it('does have attr size when plain=true', async () => {
122
- const wrapper = mount(BFormSelect, {
123
- propsData: {
124
- plain: true
125
- }
126
- })
127
- expect(wrapper.attributes('size')).toBeDefined()
128
- expect(wrapper.attributes('size')).toBe('0')
129
-
130
- wrapper.destroy()
131
- })
132
-
133
- it('has class custom-select-sm when size=sm and plain=false', async () => {
134
- const wrapper = mount(BFormSelect, {
135
- propsData: {
136
- size: 'sm'
137
- }
138
- })
139
- expect(wrapper.classes()).toContain('custom-select-sm')
140
- expect(wrapper.classes()).toContain('custom-select')
141
- expect(wrapper.classes().length).toBe(2)
142
-
143
- wrapper.destroy()
144
- })
145
-
146
- it('has class custom-select-lg when size=lg and plain=false', async () => {
147
- const wrapper = mount(BFormSelect, {
148
- propsData: {
149
- size: 'lg'
150
- }
151
- })
152
- expect(wrapper.classes()).toContain('custom-select-lg')
153
- expect(wrapper.classes()).toContain('custom-select')
154
- expect(wrapper.classes().length).toBe(2)
155
-
156
- wrapper.destroy()
157
- })
158
-
159
- it('has class custom-select-foo when size=foo and plain=false', async () => {
160
- const wrapper = mount(BFormSelect, {
161
- propsData: {
162
- size: 'foo'
163
- }
164
- })
165
- expect(wrapper.classes()).toContain('custom-select-foo')
166
- expect(wrapper.classes()).toContain('custom-select')
167
- expect(wrapper.classes().length).toBe(2)
168
-
169
- wrapper.destroy()
170
- })
171
-
172
- it('has class is-invalid and attr aria-invalid="true" when state=false', async () => {
173
- const wrapper = mount(BFormSelect, {
174
- propsData: {
175
- state: false
176
- }
177
- })
178
- expect(wrapper.attributes('aria-invalid')).toBe('true')
179
- expect(wrapper.classes()).toContain('is-invalid')
180
- expect(wrapper.classes()).toContain('custom-select')
181
- expect(wrapper.classes().length).toBe(2)
182
-
183
- wrapper.destroy()
184
- })
185
-
186
- it('has class is-valid when state=true', async () => {
187
- const wrapper = mount(BFormSelect, {
188
- propsData: {
189
- state: true
190
- }
191
- })
192
- expect(wrapper.attributes('aria-invalid')).toBeUndefined()
193
- expect(wrapper.classes()).toContain('is-valid')
194
- expect(wrapper.classes()).toContain('custom-select')
195
- expect(wrapper.classes().length).toBe(2)
196
-
197
- wrapper.destroy()
198
- })
199
-
200
- it('has attr aria-invalid="true" when aria-invalid="true"', async () => {
201
- const wrapper = mount(BFormSelect, {
202
- propsData: {
203
- ariaInvalid: 'true'
204
- }
205
- })
206
- expect(wrapper.attributes('aria-invalid')).toBe('true')
207
- expect(wrapper.classes()).toContain('custom-select')
208
- expect(wrapper.classes().length).toBe(1)
209
-
210
- wrapper.destroy()
211
- })
212
-
213
- it('has attr aria-invalid="true" when aria-invalid=true', async () => {
214
- const wrapper = mount(BFormSelect, {
215
- propsData: {
216
- ariaInvalid: true
217
- }
218
- })
219
- expect(wrapper.attributes('aria-invalid')).toBe('true')
220
- expect(wrapper.classes()).toContain('custom-select')
221
- expect(wrapper.classes().length).toBe(1)
222
-
223
- wrapper.destroy()
224
- })
225
-
226
- it('has class form-control when plain=true', async () => {
227
- const wrapper = mount(BFormSelect, {
228
- propsData: {
229
- plain: true
230
- }
231
- })
232
- expect(wrapper.classes()).toContain('form-control')
233
- expect(wrapper.classes().length).toBe(1)
234
- expect(wrapper.element.tagName).toBe('SELECT')
235
-
236
- wrapper.destroy()
237
- })
238
-
239
- it('has class form-control-lg when size=lg and plain=true', async () => {
240
- const wrapper = mount(BFormSelect, {
241
- propsData: {
242
- size: 'lg',
243
- plain: true
244
- }
245
- })
246
- expect(wrapper.classes()).toContain('form-control-lg')
247
- expect(wrapper.classes()).toContain('form-control')
248
- expect(wrapper.classes().length).toBe(2)
249
-
250
- wrapper.destroy()
251
- })
252
-
253
- it('has class form-control-sm when size=sm and plain=true', async () => {
254
- const wrapper = mount(BFormSelect, {
255
- propsData: {
256
- size: 'sm',
257
- plain: true
258
- }
259
- })
260
- expect(wrapper.classes()).toContain('form-control-sm')
261
- expect(wrapper.classes()).toContain('form-control')
262
- expect(wrapper.classes().length).toBe(2)
263
-
264
- wrapper.destroy()
265
- })
266
-
267
- it('has class form-control-foo when size=foo and plain=true', async () => {
268
- const wrapper = mount(BFormSelect, {
269
- propsData: {
270
- size: 'foo',
271
- plain: true
272
- }
273
- })
274
- expect(wrapper.classes()).toContain('form-control-foo')
275
- expect(wrapper.classes()).toContain('form-control')
276
- expect(wrapper.classes().length).toBe(2)
277
-
278
- wrapper.destroy()
279
- })
280
-
281
- it('focus() and blur() methods work', async () => {
282
- const wrapper = mount(BFormSelect, {
283
- attachTo: document.body
284
- })
285
-
286
- expect(document.activeElement).not.toBe(wrapper.element)
287
-
288
- wrapper.vm.focus()
289
- await waitNT(wrapper.vm)
290
-
291
- expect(document.activeElement).toBe(wrapper.element)
292
-
293
- wrapper.vm.blur()
294
- await waitNT(wrapper.vm)
295
-
296
- expect(document.activeElement).not.toBe(wrapper.element)
297
-
298
- wrapper.destroy()
299
- })
300
-
301
- it('has option elements from simple options array', async () => {
302
- const wrapper = mount(BFormSelect, {
303
- propsData: {
304
- options: ['one', 'two', 'three']
305
- }
306
- })
307
- const $options = wrapper.findAll('option')
308
- expect($options.length).toBe(3)
309
- expect($options.at(0).text()).toBe('one')
310
- expect($options.at(1).text()).toBe('two')
311
- expect($options.at(2).text()).toBe('three')
312
- expect($options.at(0).attributes('value')).toBe('one')
313
- expect($options.at(1).attributes('value')).toBe('two')
314
- expect($options.at(2).attributes('value')).toBe('three')
315
- expect($options.wrappers.every(o => o.find('[disabled]').exists())).toBe(false)
316
-
317
- wrapper.destroy()
318
- })
319
-
320
- it('has option elements from options array of objects', async () => {
321
- const wrapper = mount(BFormSelect, {
322
- propsData: {
323
- options: [
324
- { text: 'one', value: 1 },
325
- { text: 'two', value: 2, disabled: true },
326
- { text: 'three', value: 3 }
327
- ]
328
- }
329
- })
330
-
331
- const $options = wrapper.findAll('option')
332
- expect($options.length).toBe(3)
333
- expect($options.at(0).text()).toBe('one')
334
- expect($options.at(1).text()).toBe('two')
335
- expect($options.at(2).text()).toBe('three')
336
- expect($options.at(0).attributes('value')).toBe('1')
337
- expect($options.at(1).attributes('value')).toBe('2')
338
- expect($options.at(2).attributes('value')).toBe('3')
339
- expect($options.at(0).element.matches('[disabled]')).toBe(false)
340
- expect($options.at(1).element.matches('[disabled]')).toBe(true)
341
- expect($options.at(2).element.matches('[disabled]')).toBe(false)
342
-
343
- wrapper.destroy()
344
- })
345
-
346
- it('has option elements from options array of objects with custom field names', async () => {
347
- const wrapper = mount(BFormSelect, {
348
- propsData: {
349
- options: [
350
- { price: 1.5, display: { text: '1,50 €' } },
351
- {
352
- price: 5,
353
- display: { text: '5,00 €', html: '<span class="lowest-price">5,00 €</span>' }
354
- },
355
- { price: 50.75, display: { text: '50,75 €' }, notAvailable: true }
356
- ],
357
- valueField: 'price',
358
- textField: 'display.text',
359
- htmlField: 'display.html',
360
- disabledField: 'notAvailable'
361
- }
362
- })
363
-
364
- const $options = wrapper.findAll('option')
365
- expect($options.length).toBe(3)
366
- expect($options.at(0).text()).toBe('1,50 €')
367
- expect($options.at(1).text()).toBe('5,00 €')
368
- expect($options.at(2).text()).toBe('50,75 €')
369
- expect(
370
- $options
371
- .at(0)
372
- .find('span')
373
- .exists()
374
- ).toBe(false)
375
- expect(
376
- $options
377
- .at(1)
378
- .find('span')
379
- .exists()
380
- ).toBe(true)
381
- expect(
382
- $options
383
- .at(2)
384
- .find('span')
385
- .exists()
386
- ).toBe(false)
387
- expect($options.at(0).attributes('value')).toBe('1.5')
388
- expect($options.at(1).attributes('value')).toBe('5')
389
- expect($options.at(2).attributes('value')).toBe('50.75')
390
- expect($options.at(0).element.matches('[disabled]')).toBe(false)
391
- expect($options.at(1).element.matches('[disabled]')).toBe(false)
392
- expect($options.at(2).element.matches('[disabled]')).toBe(true)
393
-
394
- wrapper.destroy()
395
- })
396
-
397
- it('has option group elements with options from options array of objects', async () => {
398
- const wrapper = mount(BFormSelect, {
399
- propsData: {
400
- options: [
401
- {
402
- label: 'group one',
403
- options: [{ text: 'one', value: 1 }, { text: 'two', value: 2 }]
404
- },
405
- {
406
- label: 'group two',
407
- options: [{ text: 'three', value: 3 }, { text: 'four', value: 4, disabled: true }]
408
- }
409
- ]
410
- }
411
- })
412
-
413
- const $groups = wrapper.findAll('optgroup')
414
- expect($groups.length).toBe(2)
415
- expect($groups.at(0).attributes('label')).toBe('group one')
416
- expect($groups.at(1).attributes('label')).toBe('group two')
417
- expect($groups.at(0).findAll('option').length).toBe(2)
418
- expect($groups.at(1).findAll('option').length).toBe(2)
419
-
420
- const $options = wrapper.findAll('option')
421
- expect($options.length).toBe(4)
422
- expect($options.at(0).text()).toBe('one')
423
- expect($options.at(1).text()).toBe('two')
424
- expect($options.at(2).text()).toBe('three')
425
- expect($options.at(3).text()).toBe('four')
426
- expect($options.at(0).attributes('value')).toBe('1')
427
- expect($options.at(1).attributes('value')).toBe('2')
428
- expect($options.at(2).attributes('value')).toBe('3')
429
- expect($options.at(3).attributes('value')).toBe('4')
430
- expect($options.at(0).element.matches('[disabled]')).toBe(false)
431
- expect($options.at(1).element.matches('[disabled]')).toBe(false)
432
- expect($options.at(2).element.matches('[disabled]')).toBe(false)
433
- expect($options.at(3).element.matches('[disabled]')).toBe(true)
434
-
435
- wrapper.destroy()
436
- })
437
-
438
- it('has option group and option elements from options array of objects', async () => {
439
- const wrapper = mount(BFormSelect, {
440
- propsData: {
441
- options: [
442
- { text: 'one', value: 1 },
443
- {
444
- label: 'group',
445
- options: [{ text: 'two', value: 2 }, { text: 'three', value: 3 }]
446
- },
447
- { text: 'four', value: 4, disabled: true }
448
- ]
449
- }
450
- })
451
-
452
- const $groups = wrapper.findAll('optgroup')
453
- expect($groups.length).toBe(1)
454
- expect($groups.at(0).attributes('label')).toBe('group')
455
- expect($groups.at(0).findAll('option').length).toBe(2)
456
-
457
- const $options = wrapper.findAll('option')
458
- expect($options.length).toBe(4)
459
- expect($options.at(0).text()).toBe('one')
460
- expect($options.at(1).text()).toBe('two')
461
- expect($options.at(2).text()).toBe('three')
462
- expect($options.at(3).text()).toBe('four')
463
- expect($options.at(0).attributes('value')).toBe('1')
464
- expect($options.at(1).attributes('value')).toBe('2')
465
- expect($options.at(2).attributes('value')).toBe('3')
466
- expect($options.at(3).attributes('value')).toBe('4')
467
- expect($options.at(0).element.matches('[disabled]')).toBe(false)
468
- expect($options.at(1).element.matches('[disabled]')).toBe(false)
469
- expect($options.at(2).element.matches('[disabled]')).toBe(false)
470
- expect($options.at(3).element.matches('[disabled]')).toBe(true)
471
-
472
- wrapper.destroy()
473
- })
474
-
475
- it('has option elements from options legacy object format', async () => {
476
- const spyWarn = jest.spyOn(console, 'warn').mockImplementationOnce(() => {})
477
- const wrapper = mount(BFormSelect, {
478
- propsData: {
479
- options: { one: 1, two: { value: 2, text: 'Two' }, three: 'three' }
480
- }
481
- })
482
-
483
- const $options = wrapper.findAll('option')
484
- expect($options.length).toBe(3)
485
- expect($options.at(0).text()).toBe('1')
486
- expect($options.at(1).text()).toBe('Two')
487
- expect($options.at(2).text()).toBe('three')
488
- expect($options.at(0).attributes('value')).toBe('one')
489
- expect($options.at(1).attributes('value')).toBe('2')
490
- expect($options.at(2).attributes('value')).toBe('three')
491
-
492
- expect(spyWarn).toHaveBeenCalledWith(
493
- '[BootstrapVue warn]: BFormSelect - Setting prop "options" to an object is deprecated. Use the array format instead.'
494
- )
495
-
496
- wrapper.destroy()
497
- })
498
-
499
- it('has option elements from default slot', async () => {
500
- const wrapper = mount(BFormSelect, {
501
- slots: {
502
- default: [
503
- '<option value="1">one</option>',
504
- '<option value="2">two</option>',
505
- '<option value="3">three</option>'
506
- ]
507
- }
508
- })
509
-
510
- const $options = wrapper.findAll('option')
511
- expect($options.length).toBe(3)
512
- expect($options.at(0).text()).toBe('one')
513
- expect($options.at(1).text()).toBe('two')
514
- expect($options.at(2).text()).toBe('three')
515
- expect($options.at(0).attributes('value')).toBe('1')
516
- expect($options.at(1).attributes('value')).toBe('2')
517
- expect($options.at(2).attributes('value')).toBe('3')
518
-
519
- wrapper.destroy()
520
- })
521
-
522
- it('updates v-model when option selected in single mode', async () => {
523
- const wrapper = mount(BFormSelect, {
524
- propsData: {
525
- options: ['one', 'two', 'three']
526
- }
527
- })
528
- const $options = wrapper.findAll('option')
529
- expect($options.length).toBe(3)
530
-
531
- expect(wrapper.emitted('input')).toBeUndefined()
532
- expect(wrapper.emitted('change')).toBeUndefined()
533
-
534
- // select 3rd option
535
- $options.at(2).setSelected()
536
- await waitNT(wrapper.vm)
537
-
538
- expect(wrapper.emitted('input')).toBeDefined()
539
- expect(wrapper.emitted('change')).toBeDefined()
540
- expect(wrapper.emitted('input')[0][0]).toBe('three')
541
- expect(wrapper.emitted('change')[0][0]).toBe('three')
542
-
543
- wrapper.destroy()
544
- })
545
-
546
- it('updating v-model (value) when selects correct option', async () => {
547
- const wrapper = mount(BFormSelect, {
548
- propsData: {
549
- options: ['one', 'two', { text: 'three', value: { three: 3 } }],
550
- value: 'one'
551
- }
552
- })
553
- const $options = wrapper.findAll('option')
554
- expect($options.length).toBe(3)
555
-
556
- expect($options.at(0).element.selected).toBe(true)
557
-
558
- // Select 2nd option
559
- await wrapper.setProps({
560
- value: 'two'
561
- })
562
-
563
- expect($options.at(1).element.selected).toBe(true)
564
-
565
- // Select 3rd option
566
- await wrapper.setProps({
567
- value: { three: 3 }
568
- })
569
-
570
- expect($options.at(2).element.selected).toBe(true)
571
-
572
- wrapper.destroy()
573
- })
574
-
575
- it('updates v-model when option selected in single mode with complex values', async () => {
576
- const wrapper = mount(BFormSelect, {
577
- propsData: {
578
- options: [
579
- { text: 'one', value: { a: 1 } },
580
- { text: 'two', value: { b: 2 } },
581
- { text: 'three', value: { c: 3 } }
582
- ]
583
- }
584
- })
585
- const $options = wrapper.findAll('option')
586
- expect($options.length).toBe(3)
587
-
588
- expect(wrapper.emitted('input')).toBeUndefined()
589
- expect(wrapper.emitted('change')).toBeUndefined()
590
-
591
- // Select 3rd option
592
- $options.at(2).setSelected()
593
- await waitNT(wrapper.vm)
594
-
595
- expect(wrapper.emitted('input')).toBeDefined()
596
- expect(wrapper.emitted('change')).toBeDefined()
597
- expect(wrapper.emitted('input')[0][0]).toEqual({ c: 3 })
598
- expect(wrapper.emitted('change')[0][0]).toEqual({ c: 3 })
599
-
600
- wrapper.destroy()
601
- })
602
-
603
- it('updates v-model when option selected in multiple mode', async () => {
604
- const wrapper = mount(BFormSelect, {
605
- propsData: {
606
- multiple: true,
607
- selectSize: 3,
608
- options: ['one', 'two', 'three'],
609
- value: []
610
- }
611
- })
612
- const $options = wrapper.findAll('option')
613
- expect($options.length).toBe(3)
614
-
615
- expect(wrapper.emitted('input')).toBeUndefined()
616
- expect(wrapper.emitted('change')).toBeUndefined()
617
-
618
- // Select 2nd and 3rd option
619
- $options.at(1).element.selected = true
620
- $options.at(2).element.selected = true
621
- await wrapper.trigger('change')
622
- expect(wrapper.emitted('input')).toBeDefined()
623
- expect(wrapper.emitted('change')).toBeDefined()
624
- expect(wrapper.emitted('input')[0][0]).toEqual(['two', 'three'])
625
- expect(wrapper.emitted('change')[0][0]).toEqual(['two', 'three'])
626
-
627
- wrapper.destroy()
628
- })
629
-
630
- it('updates v-model when option selected in multiple mode with complex values', async () => {
631
- const wrapper = mount(BFormSelect, {
632
- propsData: {
633
- multiple: true,
634
- selectSize: 3,
635
- value: [],
636
- options: [
637
- { text: 'one', value: { a: 1 } },
638
- { text: 'two', value: { b: 2 } },
639
- { text: 'three', value: { c: 3 } }
640
- ]
641
- }
642
- })
643
- const $options = wrapper.findAll('option')
644
- expect($options.length).toBe(3)
645
-
646
- expect(wrapper.emitted('input')).toBeUndefined()
647
- expect(wrapper.emitted('change')).toBeUndefined()
648
-
649
- // Select 2nd and 3rd option
650
- $options.at(1).element.selected = true
651
- $options.at(2).element.selected = true
652
- await wrapper.trigger('change')
653
- expect(wrapper.emitted('input')).toBeDefined()
654
- expect(wrapper.emitted('change')).toBeDefined()
655
- expect(wrapper.emitted('input')[0][0]).toEqual([{ b: 2 }, { c: 3 }])
656
- expect(wrapper.emitted('change')[0][0]).toEqual([{ b: 2 }, { c: 3 }])
657
-
658
- wrapper.destroy()
659
- })
660
-
661
- // These tests are wrapped in a new describe to limit the scope of the getBCR Mock
662
- describe('prop `autofocus`', () => {
663
- const origGetBCR = Element.prototype.getBoundingClientRect
664
-
665
- beforeEach(() => {
666
- // Mock `getBoundingClientRect()` so that the `isVisible(el)` test returns `true`
667
- // In our test below, all pagination buttons would normally be visible
668
- Element.prototype.getBoundingClientRect = jest.fn(() => ({
669
- width: 24,
670
- height: 24,
671
- top: 0,
672
- left: 0,
673
- bottom: 0,
674
- right: 0
675
- }))
676
- })
677
-
678
- afterEach(() => {
679
- // Restore prototype
680
- Element.prototype.getBoundingClientRect = origGetBCR
681
- })
682
-
683
- it('works when true', async () => {
684
- const wrapper = mount(BFormSelect, {
685
- attachTo: document.body,
686
- propsData: {
687
- autofocus: true,
688
- options: ['a', 'b', 'c']
689
- }
690
- })
691
- expect(wrapper.vm).toBeDefined()
692
- await waitNT(wrapper.vm)
693
- await waitRAF()
694
-
695
- const input = wrapper.find('select')
696
- expect(input.exists()).toBe(true)
697
- expect(document).toBeDefined()
698
- expect(document.activeElement).toBe(input.element)
699
-
700
- wrapper.destroy()
701
- })
702
-
703
- it('does not autofocus when false', async () => {
704
- const wrapper = mount(BFormSelect, {
705
- attachTo: document.body,
706
- propsData: {
707
- autofocus: false,
708
- options: ['a', 'b', 'c']
709
- }
710
- })
711
- expect(wrapper.vm).toBeDefined()
712
- await waitNT(wrapper.vm)
713
- await waitRAF()
714
-
715
- const input = wrapper.find('select')
716
- expect(input.exists()).toBe(true)
717
- expect(document).toBeDefined()
718
- expect(document.activeElement).not.toBe(input.element)
719
-
720
- wrapper.destroy()
721
- })
722
- })
723
- })