@dimailn/vuetify 2.7.2-alpha28 → 2.7.2-alpha29

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 (255) hide show
  1. package/dist/vuetify.js +1416 -304
  2. package/dist/vuetify.js.map +1 -1
  3. package/dist/vuetify.min.css +1 -1
  4. package/dist/vuetify.min.js +2 -2
  5. package/es5/components/VAlert/VAlert.js +38 -8
  6. package/es5/components/VAlert/VAlert.js.map +1 -1
  7. package/es5/components/VAutocomplete/VAutocomplete.js +1 -0
  8. package/es5/components/VAutocomplete/VAutocomplete.js.map +1 -1
  9. package/es5/components/VBadge/VBadge.js +28 -0
  10. package/es5/components/VBadge/VBadge.js.map +1 -1
  11. package/es5/components/VBanner/VBanner.js +34 -6
  12. package/es5/components/VBanner/VBanner.js.map +1 -1
  13. package/es5/components/VBottomNavigation/VBottomNavigation.js +25 -0
  14. package/es5/components/VBottomNavigation/VBottomNavigation.js.map +1 -1
  15. package/es5/components/VCarousel/VCarousel.js +28 -3
  16. package/es5/components/VCarousel/VCarousel.js.map +1 -1
  17. package/es5/components/VCheckbox/VSimpleCheckbox.js +30 -2
  18. package/es5/components/VCheckbox/VSimpleCheckbox.js.map +1 -1
  19. package/es5/components/VColorPicker/VColorPicker.js +30 -2
  20. package/es5/components/VColorPicker/VColorPicker.js.map +1 -1
  21. package/es5/components/VCombobox/VCombobox.js +1 -0
  22. package/es5/components/VCombobox/VCombobox.js.map +1 -1
  23. package/es5/components/VDataIterator/VDataFooter.js +16 -7
  24. package/es5/components/VDataIterator/VDataFooter.js.map +1 -1
  25. package/es5/components/VDataIterator/VDataIterator.js +42 -47
  26. package/es5/components/VDataIterator/VDataIterator.js.map +1 -1
  27. package/es5/components/VDataTable/RowGroup.js +46 -15
  28. package/es5/components/VDataTable/RowGroup.js.map +1 -1
  29. package/es5/components/VDataTable/VDataTable.js +10 -18
  30. package/es5/components/VDataTable/VDataTable.js.map +1 -1
  31. package/es5/components/VDataTable/VDataTableHeader.js.map +1 -1
  32. package/es5/components/VDataTable/VDataTableHeaderDesktop.js +3 -0
  33. package/es5/components/VDataTable/VDataTableHeaderDesktop.js.map +1 -1
  34. package/es5/components/VDataTable/VDataTableHeaderMobile.js +28 -37
  35. package/es5/components/VDataTable/VDataTableHeaderMobile.js.map +1 -1
  36. package/es5/components/VDataTable/VEditDialog.js +3 -4
  37. package/es5/components/VDataTable/VEditDialog.js.map +1 -1
  38. package/es5/components/VDataTable/VSimpleTable.js +1 -1
  39. package/es5/components/VDataTable/VSimpleTable.js.map +1 -1
  40. package/es5/components/VDataTable/VVirtualTable.js +5 -5
  41. package/es5/components/VDataTable/VVirtualTable.js.map +1 -1
  42. package/es5/components/VDataTable/mixins/header.js +1 -1
  43. package/es5/components/VDataTable/mixins/header.js.map +1 -1
  44. package/es5/components/VDatePicker/VDatePicker.js +21 -9
  45. package/es5/components/VDatePicker/VDatePicker.js.map +1 -1
  46. package/es5/components/VDatePicker/VDatePickerHeader.js +24 -8
  47. package/es5/components/VDatePicker/VDatePickerHeader.js.map +1 -1
  48. package/es5/components/VDatePicker/VDatePickerTitle.js +33 -8
  49. package/es5/components/VDatePicker/VDatePickerTitle.js.map +1 -1
  50. package/es5/components/VDatePicker/VDatePickerYears.js +38 -13
  51. package/es5/components/VDatePicker/VDatePickerYears.js.map +1 -1
  52. package/es5/components/VDatePicker/mixins/date-picker-table.js +33 -17
  53. package/es5/components/VDatePicker/mixins/date-picker-table.js.map +1 -1
  54. package/es5/components/VInput/VInput.js +36 -8
  55. package/es5/components/VInput/VInput.js.map +1 -1
  56. package/es5/components/VList/VListGroup.js +47 -21
  57. package/es5/components/VList/VListGroup.js.map +1 -1
  58. package/es5/components/VList/VListItem.js +29 -4
  59. package/es5/components/VList/VListItem.js.map +1 -1
  60. package/es5/components/VMenu/VMenu.js +55 -30
  61. package/es5/components/VMenu/VMenu.js.map +1 -1
  62. package/es5/components/VMessages/VMessages.js +30 -7
  63. package/es5/components/VMessages/VMessages.js.map +1 -1
  64. package/es5/components/VNavigationDrawer/VNavigationDrawer.js +36 -9
  65. package/es5/components/VNavigationDrawer/VNavigationDrawer.js.map +1 -1
  66. package/es5/components/VOverlay/VOverlay.js +28 -0
  67. package/es5/components/VOverlay/VOverlay.js.map +1 -1
  68. package/es5/components/VPagination/VPagination.js +30 -6
  69. package/es5/components/VPagination/VPagination.js.map +1 -1
  70. package/es5/components/VProgressLinear/VProgressLinear.js +28 -0
  71. package/es5/components/VProgressLinear/VProgressLinear.js.map +1 -1
  72. package/es5/components/VRadioGroup/VRadioGroup.js +28 -0
  73. package/es5/components/VRadioGroup/VRadioGroup.js.map +1 -1
  74. package/es5/components/VRating/VRating.js +45 -17
  75. package/es5/components/VRating/VRating.js.map +1 -1
  76. package/es5/components/VSelect/VSelect.js +112 -84
  77. package/es5/components/VSelect/VSelect.js.map +1 -1
  78. package/es5/components/VSelect/VSelectList.js +58 -17
  79. package/es5/components/VSelect/VSelectList.js.map +1 -1
  80. package/es5/components/VSlider/VSlider.js +42 -16
  81. package/es5/components/VSlider/VSlider.js.map +1 -1
  82. package/es5/components/VSpeedDial/VSpeedDial.js +10 -8
  83. package/es5/components/VSpeedDial/VSpeedDial.js.map +1 -1
  84. package/es5/components/VTabs/VTabs.js +45 -17
  85. package/es5/components/VTabs/VTabs.js.map +1 -1
  86. package/es5/framework.js +1 -1
  87. package/es5/mixins/validatable/index.js +24 -0
  88. package/es5/mixins/validatable/index.js.map +1 -1
  89. package/es5/util/console.js +49 -18
  90. package/es5/util/console.js.map +1 -1
  91. package/es5/util/helpers.js +5 -1
  92. package/es5/util/helpers.js.map +1 -1
  93. package/lib/components/VAlert/VAlert.js +12 -6
  94. package/lib/components/VAlert/VAlert.js.map +1 -1
  95. package/lib/components/VAutocomplete/VAutocomplete.js +1 -0
  96. package/lib/components/VAutocomplete/VAutocomplete.js.map +1 -1
  97. package/lib/components/VBadge/VBadge.js +11 -0
  98. package/lib/components/VBadge/VBadge.js.map +1 -1
  99. package/lib/components/VBanner/VBanner.js +11 -0
  100. package/lib/components/VBanner/VBanner.js.map +1 -1
  101. package/lib/components/VBottomNavigation/VBottomNavigation.js +7 -0
  102. package/lib/components/VBottomNavigation/VBottomNavigation.js.map +1 -1
  103. package/lib/components/VCarousel/VCarousel.js +7 -0
  104. package/lib/components/VCarousel/VCarousel.js.map +1 -1
  105. package/lib/components/VCheckbox/VSimpleCheckbox.js +11 -0
  106. package/lib/components/VCheckbox/VSimpleCheckbox.js.map +1 -1
  107. package/lib/components/VColorPicker/VColorPicker.js +12 -1
  108. package/lib/components/VColorPicker/VColorPicker.js.map +1 -1
  109. package/lib/components/VCombobox/VCombobox.js +1 -0
  110. package/lib/components/VCombobox/VCombobox.js.map +1 -1
  111. package/lib/components/VDataIterator/VDataFooter.js +14 -7
  112. package/lib/components/VDataIterator/VDataFooter.js.map +1 -1
  113. package/lib/components/VDataIterator/VDataIterator.js +26 -31
  114. package/lib/components/VDataIterator/VDataIterator.js.map +1 -1
  115. package/lib/components/VDataTable/RowGroup.js +30 -14
  116. package/lib/components/VDataTable/RowGroup.js.map +1 -1
  117. package/lib/components/VDataTable/VDataTable.js +8 -15
  118. package/lib/components/VDataTable/VDataTable.js.map +1 -1
  119. package/lib/components/VDataTable/VDataTableHeader.js +1 -1
  120. package/lib/components/VDataTable/VDataTableHeader.js.map +1 -1
  121. package/lib/components/VDataTable/VDataTableHeaderDesktop.js +3 -0
  122. package/lib/components/VDataTable/VDataTableHeaderDesktop.js.map +1 -1
  123. package/lib/components/VDataTable/VDataTableHeaderMobile.js +17 -25
  124. package/lib/components/VDataTable/VDataTableHeaderMobile.js.map +1 -1
  125. package/lib/components/VDataTable/VEditDialog.js +3 -4
  126. package/lib/components/VDataTable/VEditDialog.js.map +1 -1
  127. package/lib/components/VDataTable/VSimpleTable.js +1 -1
  128. package/lib/components/VDataTable/VSimpleTable.js.map +1 -1
  129. package/lib/components/VDataTable/VVirtualTable.js +1 -2
  130. package/lib/components/VDataTable/VVirtualTable.js.map +1 -1
  131. package/lib/components/VDataTable/mixins/header.js +1 -1
  132. package/lib/components/VDataTable/mixins/header.js.map +1 -1
  133. package/lib/components/VDatePicker/VDatePicker.js +7 -1
  134. package/lib/components/VDatePicker/VDatePicker.js.map +1 -1
  135. package/lib/components/VDatePicker/VDatePickerHeader.js +12 -1
  136. package/lib/components/VDatePicker/VDatePickerHeader.js.map +1 -1
  137. package/lib/components/VDatePicker/VDatePickerTitle.js +11 -0
  138. package/lib/components/VDatePicker/VDatePickerTitle.js.map +1 -1
  139. package/lib/components/VDatePicker/VDatePickerYears.js +11 -1
  140. package/lib/components/VDatePicker/VDatePickerYears.js.map +1 -1
  141. package/lib/components/VDatePicker/mixins/date-picker-table.js +12 -1
  142. package/lib/components/VDatePicker/mixins/date-picker-table.js.map +1 -1
  143. package/lib/components/VInput/VInput.js +13 -3
  144. package/lib/components/VInput/VInput.js.map +1 -1
  145. package/lib/components/VList/VListGroup.js +16 -8
  146. package/lib/components/VList/VListGroup.js.map +1 -1
  147. package/lib/components/VList/VListItem.js +8 -1
  148. package/lib/components/VList/VListItem.js.map +1 -1
  149. package/lib/components/VMenu/VMenu.js +14 -3
  150. package/lib/components/VMenu/VMenu.js.map +1 -1
  151. package/lib/components/VMessages/VMessages.js +13 -2
  152. package/lib/components/VMessages/VMessages.js.map +1 -1
  153. package/lib/components/VNavigationDrawer/VNavigationDrawer.js +11 -2
  154. package/lib/components/VNavigationDrawer/VNavigationDrawer.js.map +1 -1
  155. package/lib/components/VOverlay/VOverlay.js +11 -0
  156. package/lib/components/VOverlay/VOverlay.js.map +1 -1
  157. package/lib/components/VPagination/VPagination.js +11 -0
  158. package/lib/components/VPagination/VPagination.js.map +1 -1
  159. package/lib/components/VProgressLinear/VProgressLinear.js +11 -0
  160. package/lib/components/VProgressLinear/VProgressLinear.js.map +1 -1
  161. package/lib/components/VRadioGroup/VRadioGroup.js +11 -0
  162. package/lib/components/VRadioGroup/VRadioGroup.js.map +1 -1
  163. package/lib/components/VRating/VRating.js +11 -0
  164. package/lib/components/VRating/VRating.js.map +1 -1
  165. package/lib/components/VSelect/VSelect.js +52 -36
  166. package/lib/components/VSelect/VSelect.js.map +1 -1
  167. package/lib/components/VSelect/VSelectList.js +21 -3
  168. package/lib/components/VSelect/VSelectList.js.map +1 -1
  169. package/lib/components/VSlider/VSlider.js +11 -1
  170. package/lib/components/VSlider/VSlider.js.map +1 -1
  171. package/lib/components/VSpeedDial/VSpeedDial.js +7 -7
  172. package/lib/components/VSpeedDial/VSpeedDial.js.map +1 -1
  173. package/lib/components/VTabs/VTabs.js +11 -0
  174. package/lib/components/VTabs/VTabs.js.map +1 -1
  175. package/lib/framework.js +1 -1
  176. package/lib/mixins/validatable/index.js +7 -1
  177. package/lib/mixins/validatable/index.js.map +1 -1
  178. package/lib/util/console.js +47 -17
  179. package/lib/util/console.js.map +1 -1
  180. package/lib/util/helpers.js +5 -1
  181. package/lib/util/helpers.js.map +1 -1
  182. package/package.json +1 -1
  183. package/src/components/VAlert/VAlert.ts +17 -7
  184. package/src/components/VAlert/__tests__/VAlert.spec.ts +78 -50
  185. package/src/components/VAlert/__tests__/__snapshots__/VAlert.spec.ts.snap +16 -18
  186. package/src/components/VAutocomplete/VAutocomplete.ts +22 -0
  187. package/src/components/VAutocomplete/__tests__/VAutocomplete.spec.ts +51 -53
  188. package/src/components/VAutocomplete/__tests__/VAutocomplete2.spec.ts +77 -48
  189. package/src/components/VAutocomplete/__tests__/VAutocomplete3.spec.ts +101 -39
  190. package/src/components/VBadge/VBadge.ts +13 -0
  191. package/src/components/VBanner/VBanner.ts +13 -0
  192. package/src/components/VBottomNavigation/VBottomNavigation.ts +10 -0
  193. package/src/components/VCarousel/VCarousel.ts +11 -0
  194. package/src/components/VCheckbox/VSimpleCheckbox.ts +13 -0
  195. package/src/components/VColorPicker/VColorPicker.ts +13 -0
  196. package/src/components/VCombobox/VCombobox.ts +23 -0
  197. package/src/components/VCombobox/__tests__/VCombobox-multiple.spec.ts +118 -110
  198. package/src/components/VCombobox/__tests__/VCombobox.spec.ts +119 -93
  199. package/src/components/VDataIterator/VDataFooter.ts +14 -9
  200. package/src/components/VDataIterator/VDataIterator.ts +46 -34
  201. package/src/components/VDataIterator/__tests__/VDataFooter.spec.ts +38 -39
  202. package/src/components/VDataIterator/__tests__/VDataIterator.spec.ts +90 -122
  203. package/src/components/VDataIterator/__tests__/__snapshots__/VDataFooter.spec.ts.snap +92 -82
  204. package/src/components/VDataIterator/__tests__/__snapshots__/VDataIterator.spec.ts.snap +79 -69
  205. package/src/components/VDataTable/RowGroup.ts +33 -16
  206. package/src/components/VDataTable/VDataTable.ts +8 -15
  207. package/src/components/VDataTable/VDataTableHeader.ts +2 -2
  208. package/src/components/VDataTable/VDataTableHeaderDesktop.ts +4 -0
  209. package/src/components/VDataTable/VDataTableHeaderMobile.ts +16 -25
  210. package/src/components/VDataTable/VEditDialog.ts +3 -3
  211. package/src/components/VDataTable/VSimpleTable.ts +2 -3
  212. package/src/components/VDataTable/VVirtualTable.ts +1 -2
  213. package/src/components/VDataTable/__tests__/VDataTable.spec.ts +18 -22
  214. package/src/components/VDataTable/__tests__/VDataTableHeader.spec.ts +39 -29
  215. package/src/components/VDataTable/__tests__/VEditDialog.spec.ts +7 -2
  216. package/src/components/VDataTable/__tests__/VSimpleTable.spec.ts +11 -16
  217. package/src/components/VDataTable/__tests__/__snapshots__/VDataTable.spec.ts.snap +2543 -2086
  218. package/src/components/VDataTable/__tests__/__snapshots__/VDataTableHeader.spec.ts.snap +115 -144
  219. package/src/components/VDataTable/__tests__/__snapshots__/VEditDialog.spec.ts.snap +4 -12
  220. package/src/components/VDataTable/__tests__/__snapshots__/VSimpleTable.spec.ts.snap +22 -18
  221. package/src/components/VDataTable/mixins/__tests__/__snapshots__/header.spec.ts.snap +9 -12
  222. package/src/components/VDataTable/mixins/__tests__/header.spec.ts +15 -15
  223. package/src/components/VDataTable/mixins/header.ts +1 -1
  224. package/src/components/VDatePicker/VDatePicker.ts +11 -1
  225. package/src/components/VDatePicker/VDatePickerHeader.ts +13 -0
  226. package/src/components/VDatePicker/VDatePickerTitle.ts +12 -0
  227. package/src/components/VDatePicker/VDatePickerYears.ts +13 -0
  228. package/src/components/VDatePicker/mixins/date-picker-table.ts +13 -0
  229. package/src/components/VInput/VInput.ts +18 -5
  230. package/src/components/VList/VListGroup.ts +22 -10
  231. package/src/components/VList/VListItem.ts +10 -1
  232. package/src/components/VMenu/VMenu.ts +21 -3
  233. package/src/components/VMenu/__tests__/VMenu.spec.ts +90 -69
  234. package/src/components/VMenu/__tests__/__snapshots__/VMenu.spec.ts.snap +3 -5
  235. package/src/components/VMessages/VMessages.ts +15 -4
  236. package/src/components/VMessages/__tests__/VMessages.spec.ts +43 -5
  237. package/src/components/VMessages/__tests__/__snapshots__/VMessages.spec.ts.snap +16 -25
  238. package/src/components/VNavigationDrawer/VNavigationDrawer.ts +21 -11
  239. package/src/components/VOverlay/VOverlay.ts +12 -0
  240. package/src/components/VPagination/VPagination.ts +23 -9
  241. package/src/components/VProgressLinear/VProgressLinear.ts +13 -0
  242. package/src/components/VRadioGroup/VRadioGroup.ts +14 -0
  243. package/src/components/VRating/VRating.ts +13 -0
  244. package/src/components/VSelect/VSelect.ts +60 -43
  245. package/src/components/VSelect/VSelectList.ts +29 -8
  246. package/src/components/VSlider/VSlider.ts +14 -1
  247. package/src/components/VSpeedDial/VSpeedDial.ts +7 -8
  248. package/src/components/VSpeedDial/__tests__/VSpeedDial.spec.ts +21 -13
  249. package/src/components/VSpeedDial/__tests__/__snapshots__/VSpeedDial.spec.ts.snap +6 -6
  250. package/src/components/VTabs/VTabs.ts +14 -0
  251. package/src/mixins/validatable/index.ts +11 -1
  252. package/src/util/__tests__/console.spec.ts +124 -11
  253. package/src/util/__tests__/helpers.spec.ts +59 -31
  254. package/src/util/console.ts +43 -24
  255. package/src/util/helpers.ts +8 -4
@@ -13,6 +13,7 @@ import VColorPickerSwatches from './VColorPickerSwatches'
13
13
  // Helpers
14
14
  import { VColorPickerColor, parseColor, fromRGBA, extractColor, hasAlpha } from './util'
15
15
  import { deepEqual } from '../../util/helpers'
16
+ import { breaking } from '../../util/console'
16
17
 
17
18
  // Mixins
18
19
  import Elevatable from '../../mixins/elevatable'
@@ -76,6 +77,18 @@ export default defineComponent({
76
77
  },
77
78
  },
78
79
 
80
+ created () {
81
+ const breakingProps = [
82
+ ['value', 'modelValue'],
83
+ ['onInput', 'onUpdate:modelValue'],
84
+ ]
85
+
86
+ /* istanbul ignore next */
87
+ breakingProps.forEach(([original, replacement]) => {
88
+ if (this.$attrs.hasOwnProperty(original)) breaking(original, replacement, this)
89
+ })
90
+ },
91
+
79
92
  watch: {
80
93
  modelValue: {
81
94
  handler (color: any) {
@@ -29,6 +29,29 @@ export default defineComponent({
29
29
  },
30
30
  },
31
31
 
32
+ emits: [
33
+ 'update:search-input',
34
+ 'update:modelValue',
35
+ 'change',
36
+ 'focus',
37
+ 'blur',
38
+ 'keydown',
39
+ 'click',
40
+ 'update:list-index',
41
+ 'mousedown',
42
+ 'mouseup',
43
+ 'touchstart',
44
+ 'touchend',
45
+ 'click:prepend',
46
+ 'click:append',
47
+ 'click:append-outer',
48
+ 'click:prepend-inner',
49
+ 'click:clear',
50
+ 'input',
51
+ 'update:error',
52
+ 'paste',
53
+ ],
54
+
32
55
  data: () => ({
33
56
  editingIndex: -1,
34
57
  }),
@@ -6,6 +6,7 @@ import VCombobox from '../VCombobox'
6
6
  import {
7
7
  mount,
8
8
  Wrapper,
9
+ enableAutoUnmount,
9
10
  } from '@vue/test-utils'
10
11
  import { keyCodes } from '../../../util/helpers'
11
12
 
@@ -13,21 +14,27 @@ describe('VCombobox.ts', () => {
13
14
  type Instance = InstanceType<typeof VCombobox>
14
15
  let mountFunction: (options?: object) => Wrapper<Instance>
15
16
 
17
+ enableAutoUnmount(afterEach)
18
+
16
19
  beforeEach(() => {
17
20
  document.body.setAttribute('data-app', 'true')
18
21
 
19
22
  mountFunction = (options = {}) => {
20
23
  return mount(VCombobox, {
21
- // https://github.com/vuejs/vue-test-utils/issues/1130
22
- sync: false,
23
- mocks: {
24
- $vuetify: {
25
- lang: {
26
- t: (val: string) => val,
27
- },
28
- theme: {
29
- dark: false,
24
+ global: {
25
+ mocks: {
26
+ $vuetify: {
27
+ lang: {
28
+ t: (val: string) => val,
29
+ },
30
+ theme: {
31
+ dark: false,
32
+ },
33
+ icons: {
34
+ component: null,
35
+ },
30
36
  },
37
+ onScroll: jest.fn(),
31
38
  },
32
39
  },
33
40
  ...options,
@@ -38,19 +45,18 @@ describe('VCombobox.ts', () => {
38
45
  function createMultipleCombobox (propsData) {
39
46
  const change = jest.fn()
40
47
  const wrapper = mountFunction({
41
- attachToDocument: true,
42
- propsData: Object.assign({
48
+ attachTo: document.body,
49
+ props: Object.assign({
43
50
  multiple: true,
44
- value: [],
51
+ modelValue: [],
45
52
  }, propsData),
46
53
  })
47
54
 
48
- wrapper.vm.$on('input', change)
49
55
  return { wrapper, change }
50
56
  }
51
57
 
52
58
  it('should create new values when tagging', async () => {
53
- const { wrapper, change } = createMultipleCombobox({})
59
+ const { wrapper } = createMultipleCombobox({})
54
60
 
55
61
  const input = wrapper.find('input')
56
62
  const element = input.element as HTMLInputElement
@@ -62,12 +68,13 @@ describe('VCombobox.ts', () => {
62
68
 
63
69
  await wrapper.vm.$nextTick()
64
70
 
65
- expect(change).toHaveBeenCalledWith(['foo'])
71
+ expect(wrapper.emitted('update:modelValue')).toBeTruthy()
72
+ expect(wrapper.emitted('update:modelValue')[0]).toEqual([['foo']])
66
73
  })
67
74
 
68
75
  it('should change selectedIndex with keyboard', async () => {
69
76
  const { wrapper } = createMultipleCombobox({
70
- value: ['foo', 'bar'],
77
+ modelValue: ['foo', 'bar'],
71
78
  })
72
79
 
73
80
  const input = wrapper.find('input')
@@ -83,8 +90,8 @@ describe('VCombobox.ts', () => {
83
90
  })
84
91
 
85
92
  it('should delete a tagged item when selected and backspace/delete is pressed', async () => {
86
- const { wrapper, change } = createMultipleCombobox({
87
- value: ['foo', 'bar'],
93
+ const { wrapper } = createMultipleCombobox({
94
+ modelValue: ['foo', 'bar'],
88
95
  })
89
96
 
90
97
  const input = wrapper.find('input')
@@ -95,7 +102,8 @@ describe('VCombobox.ts', () => {
95
102
 
96
103
  input.trigger('keydown.delete')
97
104
  await wrapper.vm.$nextTick()
98
- expect(change).toHaveBeenCalledWith(['foo'])
105
+ expect(wrapper.emitted('update:modelValue')).toBeTruthy()
106
+ expect(wrapper.emitted('update:modelValue')[0]).toEqual([['foo']])
99
107
  expect(wrapper.vm.selectedIndex).toBe(0)
100
108
 
101
109
  const backspace = new Event('keydown')
@@ -103,12 +111,12 @@ describe('VCombobox.ts', () => {
103
111
 
104
112
  input.element.dispatchEvent(backspace) // Avoriaz doesn't wrap keydown.backspace
105
113
  await wrapper.vm.$nextTick()
106
- expect(change).toHaveBeenCalledWith([])
114
+ expect(wrapper.emitted('update:modelValue')[1]).toEqual([[]])
107
115
  expect(wrapper.vm.selectedIndex).toBe(-1)
108
116
  })
109
117
 
110
118
  it('should add a tag on enter using the current searchValue', async () => {
111
- const { wrapper, change } = createMultipleCombobox({
119
+ const { wrapper } = createMultipleCombobox({
112
120
  items: ['bar'],
113
121
  })
114
122
 
@@ -124,12 +132,13 @@ describe('VCombobox.ts', () => {
124
132
  input.trigger('keydown.enter')
125
133
  await wrapper.vm.$nextTick()
126
134
 
127
- expect(change).toHaveBeenCalledWith(['ba'])
135
+ expect(wrapper.emitted('update:modelValue')).toBeTruthy()
136
+ expect(wrapper.emitted('update:modelValue')[0]).toEqual([['ba']])
128
137
  })
129
138
 
130
139
  it.skip('should add a tag on left arrow and select the previous tag', async () => {
131
- const { wrapper, change } = createMultipleCombobox({
132
- value: ['foo'],
140
+ const { wrapper } = createMultipleCombobox({
141
+ modelValue: ['foo'],
133
142
  items: ['foo', 'bar'],
134
143
  })
135
144
 
@@ -141,13 +150,14 @@ describe('VCombobox.ts', () => {
141
150
  input.trigger('input')
142
151
  input.trigger('keydown.left')
143
152
 
144
- expect(change).toHaveBeenCalledWith(['foo', 'b'])
153
+ expect(wrapper.emitted('update:modelValue')).toBeTruthy()
154
+ expect(wrapper.emitted('update:modelValue')[0]).toEqual([['foo', 'b']])
145
155
  expect(wrapper.vm.selectedIndex).toBe(0)
146
156
  })
147
157
 
148
158
  it('should remove a duplicate tag and add it to the end', async () => {
149
- const { wrapper, change } = createMultipleCombobox({
150
- value: ['foo', 'bar'],
159
+ const { wrapper } = createMultipleCombobox({
160
+ modelValue: ['foo', 'bar'],
151
161
  })
152
162
 
153
163
  const input = wrapper.find('input')
@@ -161,11 +171,12 @@ describe('VCombobox.ts', () => {
161
171
  input.trigger('keydown.enter')
162
172
  await wrapper.vm.$nextTick()
163
173
 
164
- expect(change).toHaveBeenCalledWith(['bar', 'foo'])
174
+ expect(wrapper.emitted('update:modelValue')).toBeTruthy()
175
+ expect(wrapper.emitted('update:modelValue')[0]).toEqual([['foo', 'bar']])
165
176
  })
166
177
 
167
178
  it('should add tag with valid search value on blur', async () => {
168
- const { wrapper, change } = createMultipleCombobox({})
179
+ const { wrapper } = createMultipleCombobox({})
169
180
 
170
181
  const input = wrapper.find('input')
171
182
  const element = input.element as HTMLInputElement
@@ -177,13 +188,14 @@ describe('VCombobox.ts', () => {
177
188
 
178
189
  await wrapper.vm.$nextTick()
179
190
 
180
- expect(change).toHaveBeenCalledWith(['bar'])
191
+ expect(wrapper.emitted('update:modelValue')).toBeTruthy()
192
+ expect(wrapper.emitted('update:modelValue')[0]).toEqual([['bar']])
181
193
  })
182
194
 
183
195
  it('should be able to add a tag from user input after deleting a tag with delete', async () => {
184
- const { wrapper, change } = createMultipleCombobox({
196
+ const { wrapper } = createMultipleCombobox({
185
197
  multiple: true,
186
- value: ['foo', 'bar'],
198
+ modelValue: ['foo', 'bar'],
187
199
  })
188
200
 
189
201
  const input = wrapper.find('input')
@@ -193,7 +205,8 @@ describe('VCombobox.ts', () => {
193
205
  input.trigger('keydown.left')
194
206
  expect(wrapper.vm.selectedIndex).toBe(1)
195
207
  input.trigger('keydown.delete')
196
- expect(change).toHaveBeenCalledWith(['foo'])
208
+ expect(wrapper.emitted('update:modelValue')).toBeTruthy()
209
+ expect(wrapper.emitted('update:modelValue')[0]).toEqual([['foo']])
197
210
  expect(wrapper.vm.selectedIndex).toBe(0)
198
211
 
199
212
  // Must be reset for input to update
@@ -207,28 +220,29 @@ describe('VCombobox.ts', () => {
207
220
 
208
221
  await wrapper.vm.$nextTick()
209
222
 
210
- expect(change).toHaveBeenCalledWith(['foo', 'baz'])
223
+ expect(wrapper.emitted('update:modelValue')[1]).toEqual([['foo', 'baz']])
211
224
  expect(wrapper.vm.selectedIndex).toBe(-1)
212
225
  })
213
226
 
214
227
  it('should be able to add a tag from user input after clicking a deletable chip', async () => {
215
- const { wrapper, change } = createMultipleCombobox({
228
+ const { wrapper } = createMultipleCombobox({
216
229
  chips: true,
217
230
  clearable: true,
218
231
  deletableChips: true,
219
232
  multiple: true,
220
- value: ['foo', 'bar'],
233
+ modelValue: ['foo', 'bar'],
221
234
  })
222
235
 
223
236
  const input = wrapper.find('input')
224
237
  const element = input.element as HTMLInputElement
225
- const chip = wrapper.findAll('.v-chip').at(1)
238
+ const chip = wrapper.findAll('.v-chip')[1]
226
239
  const close = chip.find('.v-chip__close')
227
240
 
228
241
  input.trigger('focus')
229
242
  chip.trigger('click')
230
243
  close.trigger('click')
231
- expect(change).toHaveBeenCalledWith(['foo'])
244
+ expect(wrapper.emitted('update:modelValue')).toBeTruthy()
245
+ expect(wrapper.emitted('update:modelValue')[0]).toEqual([['foo']])
232
246
  expect(wrapper.vm.selectedIndex).toBe(-1)
233
247
 
234
248
  element.value = 'baz'
@@ -238,7 +252,7 @@ describe('VCombobox.ts', () => {
238
252
 
239
253
  await wrapper.vm.$nextTick()
240
254
 
241
- expect(change).toHaveBeenCalledWith(['foo', 'baz'])
255
+ expect(wrapper.emitted('update:modelValue')[1]).toEqual([['foo', 'baz']])
242
256
  expect(wrapper.vm.selectedIndex).toBe(-1)
243
257
  })
244
258
 
@@ -247,7 +261,7 @@ describe('VCombobox.ts', () => {
247
261
  const { wrapper } = createMultipleCombobox({
248
262
  chips: true,
249
263
  multiple: true,
250
- value: ['foo', 'bar'],
264
+ modelValue: ['foo', 'bar'],
251
265
  })
252
266
 
253
267
  const input = wrapper.find('input')
@@ -270,7 +284,7 @@ describe('VCombobox.ts', () => {
270
284
 
271
285
  // eslint-disable-next-line max-statements
272
286
  it('should create new items when a delimiter is entered', async () => {
273
- const { wrapper, change } = createMultipleCombobox({
287
+ const { wrapper } = createMultipleCombobox({
274
288
  delimiters: [', ', 'baz'],
275
289
  })
276
290
 
@@ -284,46 +298,41 @@ describe('VCombobox.ts', () => {
284
298
  input.trigger('input')
285
299
 
286
300
  await wrapper.vm.$nextTick()
287
- expect(change).toHaveBeenCalledTimes(0)
301
+ expect(wrapper.emitted('update:modelValue')).toBeFalsy()
288
302
 
289
303
  element.value += ' '
290
304
  input.trigger('input')
291
305
 
292
306
  await wrapper.vm.$nextTick()
293
- expect(change).toHaveBeenCalledTimes(1)
294
- expect(change).toHaveBeenCalledWith(['foo'])
307
+ expect(wrapper.emitted('update:modelValue')).toBeTruthy()
308
+ expect(wrapper.emitted('update:modelValue')[0]).toEqual([['foo']])
295
309
  expect(element.value).toBe('')
296
310
 
297
311
  element.value = 'foo,barba'
298
312
  input.trigger('input')
299
313
 
300
314
  await wrapper.vm.$nextTick()
301
- expect(change).toHaveBeenCalledTimes(1)
315
+ expect(wrapper.emitted('update:modelValue')).toHaveLength(1)
302
316
 
303
317
  element.value += 'z'
304
318
  input.trigger('input')
305
319
 
306
320
  await wrapper.vm.$nextTick()
307
- expect(change).toHaveBeenCalledTimes(2)
308
- expect(change).toHaveBeenCalledWith(['foo', 'foo,bar'])
321
+ expect(wrapper.emitted('update:modelValue')).toHaveLength(2)
322
+ expect(wrapper.emitted('update:modelValue')[1]).toEqual([['foo', 'foo,bar']])
309
323
  expect(element.value).toBe('')
310
324
  })
311
325
 
312
326
  it('should allow the editing of an existing value', async () => {
313
327
  const { wrapper } = createMultipleCombobox({
314
328
  chips: true,
315
- value: ['foo'],
329
+ modelValue: ['foo'],
316
330
  })
317
331
 
318
- const change = jest.fn()
319
- const internal = jest.fn()
320
332
  const chip = wrapper.find('.v-chip')
321
333
  const input = wrapper.find('input')
322
334
  const element = input.element as HTMLInputElement
323
335
 
324
- wrapper.vm.$on('change', change)
325
- wrapper.vm.$watch('internalValue', internal)
326
-
327
336
  expect(wrapper.vm.editingIndex).toBe(-1)
328
337
  expect(wrapper.vm.internalSearch).toBeUndefined()
329
338
 
@@ -338,12 +347,12 @@ describe('VCombobox.ts', () => {
338
347
 
339
348
  await wrapper.vm.$nextTick()
340
349
 
341
- expect(change).toHaveBeenCalledWith(['foobar'])
342
- expect(internal).toHaveBeenCalledWith(['foobar'], ['foo'])
350
+ expect(wrapper.emitted('update:modelValue')).toBeTruthy()
351
+ expect(wrapper.emitted('update:modelValue')[0]).toEqual([['foobar']])
343
352
  })
344
353
 
345
354
  it('should paste as item if source of pasted text is item in another v-combobox/v-autocomplete', async () => {
346
- const { wrapper, change } = createMultipleCombobox({
355
+ const { wrapper } = createMultipleCombobox({
347
356
  items: ['aaa', 'bbb'],
348
357
  })
349
358
 
@@ -358,13 +367,12 @@ describe('VCombobox.ts', () => {
358
367
  input.trigger('focus')
359
368
  input.trigger('paste', event)
360
369
 
361
- expect(getData).toHaveBeenCalledTimes(1)
362
- expect(getData).toHaveBeenCalledWith('text/vnd.vuetify.autocomplete.item+plain')
363
- expect(change).toHaveBeenCalledWith(['ccc'])
370
+ expect(wrapper.emitted('update:modelValue')).toBeTruthy()
371
+ expect(wrapper.emitted('update:modelValue')[0]).toEqual([['ccc']])
364
372
  })
365
373
 
366
374
  it('should paste as text if source of pasted text is not item in another v-combobox/v-autocomplete', async () => {
367
- const { wrapper, change } = createMultipleCombobox({
375
+ const { wrapper } = createMultipleCombobox({
368
376
  items: ['aaa', 'bbb'],
369
377
  })
370
378
 
@@ -379,12 +387,12 @@ describe('VCombobox.ts', () => {
379
387
  input.trigger('focus')
380
388
  input.trigger('paste', event)
381
389
 
382
- expect(change).not.toHaveBeenCalled()
390
+ expect(wrapper.emitted('update:modelValue')).toBeFalsy()
383
391
  // expect(input.element.value).toBe('ccc') // can be checked only in browser environment
384
392
  })
385
393
 
386
394
  it('should not add search to list when selecting items with keyboard', async () => {
387
- const { wrapper, change } = createMultipleCombobox({
395
+ const { wrapper } = createMultipleCombobox({
388
396
  chips: true,
389
397
  multiple: true,
390
398
  items: ['aaa', 'bbb'],
@@ -405,16 +413,17 @@ describe('VCombobox.ts', () => {
405
413
  await wrapper.vm.$nextTick()
406
414
 
407
415
  expect(wrapper.vm.internalSearch).toBeNull()
408
- expect(change).toHaveBeenCalledWith(['aaa'])
416
+ expect(wrapper.emitted('update:modelValue')).toBeTruthy()
417
+ expect(wrapper.emitted('update:modelValue')[0]).toEqual([['aaa']])
409
418
  })
410
419
 
411
420
  // https://github.com/vuetifyjs/vuetify/issues/12781
412
421
  // eslint-disable-next-line max-statements
413
422
  it('should correctly add items after deletion and blur', async () => {
414
- const { wrapper, change } = createMultipleCombobox({
423
+ const { wrapper } = createMultipleCombobox({
415
424
  multiple: true,
416
425
  chips: true,
417
- value: ['foo', 'bar'],
426
+ modelValue: ['foo', 'bar'],
418
427
  items: ['foo', 'bar'],
419
428
  })
420
429
 
@@ -427,13 +436,14 @@ describe('VCombobox.ts', () => {
427
436
  expect(wrapper.vm.selectedIndex).toBe(1)
428
437
  input.trigger('keydown.delete')
429
438
  await wrapper.vm.$nextTick()
430
- expect(change).toHaveBeenCalledWith(['foo'])
439
+ expect(wrapper.emitted('update:modelValue')).toBeTruthy()
440
+ expect(wrapper.emitted('update:modelValue')[0]).toEqual([['foo']])
431
441
  expect(wrapper.vm.selectedIndex).toBe(0)
432
442
 
433
443
  // Lose focus
434
444
  input.trigger('keydown.tab')
435
445
  await wrapper.vm.$nextTick()
436
- expect(change).toHaveBeenCalledWith(['foo'])
446
+ expect(wrapper.emitted('update:modelValue')).toHaveLength(1)
437
447
 
438
448
  // Add 'bar' again
439
449
  input.trigger('focus')
@@ -443,7 +453,7 @@ describe('VCombobox.ts', () => {
443
453
  await wrapper.vm.$nextTick()
444
454
  input.trigger('keydown.enter')
445
455
  await wrapper.vm.$nextTick()
446
- expect(change).toHaveBeenLastCalledWith(['foo', 'bar'])
456
+ expect(wrapper.emitted('update:modelValue')[1]).toEqual([['foo', 'bar']])
447
457
 
448
458
  // Set 'bar' as search input
449
459
  element.value = 'bar'
@@ -454,16 +464,17 @@ describe('VCombobox.ts', () => {
454
464
  // Lose focus
455
465
  input.trigger('keydown.tab')
456
466
  await wrapper.vm.$nextTick()
457
- expect(change).toHaveBeenLastCalledWith(['foo', 'bar'])
467
+ expect(wrapper.emitted('update:modelValue')).toBeTruthy()
468
+ expect(wrapper.emitted('update:modelValue').length).toBeGreaterThanOrEqual(2)
458
469
  })
459
470
 
460
471
  // https://github.com/vuetifyjs/vuetify/issues/13274
461
472
  it('should not add empty values', async () => {
462
- const { wrapper, change } = createMultipleCombobox({
473
+ const { wrapper } = createMultipleCombobox({
463
474
  chips: true,
464
475
  multiple: true,
465
476
  items: ['foo'],
466
- value: ['foo'],
477
+ modelValue: ['foo'],
467
478
  })
468
479
 
469
480
  const input = wrapper.find('input')
@@ -482,24 +493,24 @@ describe('VCombobox.ts', () => {
482
493
  input.trigger('keydown.tab')
483
494
  await wrapper.vm.$nextTick()
484
495
 
485
- expect(change).not.toHaveBeenCalled()
496
+ expect(wrapper.emitted('update:modelValue')).toBeFalsy()
486
497
  })
487
498
 
488
499
  // https://github.com/vuetifyjs/vuetify/issues/10827
489
500
  it('should not add empty chips after clear and re-select', async () => {
490
- const { wrapper, change } = createMultipleCombobox({
501
+ const { wrapper } = createMultipleCombobox({
491
502
  chips: true,
492
503
  multiple: true,
493
504
  clearable: true,
494
505
  items: ['foo', 'bar'],
495
- value: ['foo', 'bar'],
506
+ modelValue: ['foo', 'bar'],
496
507
  })
497
508
 
498
509
  const input = wrapper.find('input')
499
510
  const element = input.element as HTMLInputElement
500
511
 
501
512
  // Dbl click chip at index 1
502
- const chip = wrapper.findAll('.v-chip').at(1)
513
+ const chip = wrapper.findAll('.v-chip')[1]
503
514
  chip.trigger('dblclick')
504
515
  expect(wrapper.vm.editingIndex).toBe(1)
505
516
  expect(wrapper.vm.internalSearch).toBe('bar')
@@ -508,7 +519,8 @@ describe('VCombobox.ts', () => {
508
519
  const clear = wrapper.find('.v-input__icon--clear .v-icon')
509
520
  clear.trigger('click')
510
521
  await wrapper.vm.$nextTick()
511
- expect(change).toHaveBeenCalledWith([])
522
+ expect(wrapper.emitted('update:modelValue')).toBeTruthy()
523
+ expect(wrapper.emitted('update:modelValue')[0]).toEqual([[]])
512
524
  await wrapper.vm.$nextTick()
513
525
 
514
526
  // Add 'foo'
@@ -519,19 +531,19 @@ describe('VCombobox.ts', () => {
519
531
  input.trigger('keydown.enter')
520
532
  await wrapper.vm.$nextTick()
521
533
 
522
- expect(change).toHaveBeenLastCalledWith(['foo'])
534
+ expect(wrapper.emitted('update:modelValue')[1]).toEqual([['foo']])
523
535
  })
524
536
 
525
537
  // https://github.com/vuetifyjs/vuetify/issues/12351
526
538
  it('should correctly handle duplicate items', async () => {
527
- const { wrapper, change } = createMultipleCombobox({
539
+ const { wrapper } = createMultipleCombobox({
528
540
  chips: true,
529
541
  multiple: true,
530
542
  items: [
531
543
  { text: 'foo', value: 'foo' },
532
544
  { text: 'bar', value: 'bar' },
533
545
  ],
534
- value: [
546
+ modelValue: [
535
547
  { text: 'foo', value: 'foo' },
536
548
  ],
537
549
  })
@@ -547,24 +559,24 @@ describe('VCombobox.ts', () => {
547
559
  input.trigger('keydown.tab')
548
560
  await wrapper.vm.$nextTick()
549
561
 
550
- expect(change).toHaveBeenLastCalledWith([{ text: 'foo', value: 'foo' }])
562
+ expect(wrapper.emitted('update:modelValue')).toBeFalsy()
551
563
  })
552
564
 
553
565
  // https://github.com/vuetifyjs/vuetify/issues/6364
554
566
  it('should not add duplicate chip after edit', async () => {
555
- const { wrapper, change } = createMultipleCombobox({
567
+ const { wrapper } = createMultipleCombobox({
556
568
  chips: true,
557
569
  multiple: true,
558
570
  clearable: true,
559
571
  items: ['foo', 'bar'],
560
- value: ['foo', 'bar'],
572
+ modelValue: ['foo', 'bar'],
561
573
  })
562
574
 
563
575
  const input = wrapper.find('input')
564
576
  const element = input.element as HTMLInputElement
565
577
 
566
578
  // Dbl click chip at index 1
567
- const chip = wrapper.findAll('.v-chip').at(1)
579
+ const chip = wrapper.findAll('.v-chip')[1]
568
580
  chip.trigger('dblclick')
569
581
  expect(wrapper.vm.editingIndex).toBe(1)
570
582
  expect(wrapper.vm.internalSearch).toBe('bar')
@@ -577,7 +589,8 @@ describe('VCombobox.ts', () => {
577
589
  input.trigger('keydown.enter')
578
590
  await wrapper.vm.$nextTick()
579
591
 
580
- expect(change).toHaveBeenLastCalledWith(['bar', 'foo'])
592
+ expect(wrapper.emitted('update:modelValue')).toBeTruthy()
593
+ expect(wrapper.emitted('update:modelValue')[0]).toEqual([['bar', 'foo']])
581
594
  })
582
595
 
583
596
  // example 1 in https://github.com/vuetifyjs/vuetify/issues/14194
@@ -589,9 +602,6 @@ describe('VCombobox.ts', () => {
589
602
  const input = wrapper.find('input')
590
603
  const element = input.element as HTMLInputElement
591
604
 
592
- const listIndexUpdate = jest.fn()
593
- wrapper.vm.$on('update:list-index', listIndexUpdate)
594
-
595
605
  input.trigger('focus')
596
606
  await wrapper.vm.$nextTick()
597
607
  element.value = 'a'
@@ -613,13 +623,15 @@ describe('VCombobox.ts', () => {
613
623
  element.value = 'aa'
614
624
  input.trigger('input')
615
625
  await wrapper.vm.$nextTick()
616
- expect(listIndexUpdate.mock.calls.length === 6).toBe(true)
617
- expect(listIndexUpdate.mock.calls[0][0]).toBe(-1)
618
- expect(listIndexUpdate.mock.calls[1][0]).toBe(0)
619
- expect(listIndexUpdate.mock.calls[2][0]).toBe(1)
620
- expect(listIndexUpdate.mock.calls[3][0]).toBe(2)
621
- expect(listIndexUpdate.mock.calls[4][0]).toBe(3)
622
- expect(listIndexUpdate.mock.calls[5][0]).toBe(-1)
626
+
627
+ const emitted = wrapper.emitted('update:list-index')
628
+ expect(emitted).toHaveLength(6)
629
+ expect(emitted[0]).toEqual([-1])
630
+ expect(emitted[1]).toEqual([0])
631
+ expect(emitted[2]).toEqual([1])
632
+ expect(emitted[3]).toEqual([2])
633
+ expect(emitted[4]).toEqual([3])
634
+ expect(emitted[5]).toEqual([-1])
623
635
  })
624
636
 
625
637
  // example 2 in https://github.com/vuetifyjs/vuetify/issues/14194
@@ -631,9 +643,6 @@ describe('VCombobox.ts', () => {
631
643
  const input = wrapper.find('input')
632
644
  const element = input.element as HTMLInputElement
633
645
 
634
- const listIndexUpdate = jest.fn()
635
- wrapper.vm.$on('update:list-index', listIndexUpdate)
636
-
637
646
  input.trigger('focus')
638
647
  await wrapper.vm.$nextTick()
639
648
  element.value = 'a'
@@ -653,12 +662,13 @@ describe('VCombobox.ts', () => {
653
662
  input.trigger('input')
654
663
  await wrapper.vm.$nextTick()
655
664
 
656
- expect(listIndexUpdate.mock.calls.length === 5).toBe(true)
657
- expect(listIndexUpdate.mock.calls[0][0]).toBe(-1)
658
- expect(listIndexUpdate.mock.calls[1][0]).toBe(0)
659
- expect(listIndexUpdate.mock.calls[2][0]).toBe(1)
660
- expect(listIndexUpdate.mock.calls[3][0]).toBe(2)
661
- expect(listIndexUpdate.mock.calls[4][0]).toBe(1)
665
+ const emitted = wrapper.emitted('update:list-index')
666
+ expect(emitted).toHaveLength(5)
667
+ expect(emitted[0]).toEqual([-1])
668
+ expect(emitted[1]).toEqual([0])
669
+ expect(emitted[2]).toEqual([1])
670
+ expect(emitted[3]).toEqual([2])
671
+ expect(emitted[4]).toEqual([1])
662
672
  })
663
673
 
664
674
  // example 3 in https://github.com/vuetifyjs/vuetify/issues/14194
@@ -670,9 +680,6 @@ describe('VCombobox.ts', () => {
670
680
  const input = wrapper.find('input')
671
681
  const element = input.element as HTMLInputElement
672
682
 
673
- const listIndexUpdate = jest.fn()
674
- wrapper.vm.$on('update:list-index', listIndexUpdate)
675
-
676
683
  input.trigger('focus')
677
684
  await wrapper.vm.$nextTick()
678
685
  element.value = 'a'
@@ -686,9 +693,10 @@ describe('VCombobox.ts', () => {
686
693
  input.trigger('input')
687
694
  await wrapper.vm.$nextTick()
688
695
 
689
- expect(listIndexUpdate.mock.calls.length === 3).toBe(true)
690
- expect(listIndexUpdate.mock.calls[0][0]).toBe(-1)
691
- expect(listIndexUpdate.mock.calls[1][0]).toBe(0)
692
- expect(listIndexUpdate.mock.calls[2][0]).toBe(-1)
696
+ const emitted = wrapper.emitted('update:list-index')
697
+ expect(emitted).toHaveLength(3)
698
+ expect(emitted[0]).toEqual([-1])
699
+ expect(emitted[1]).toEqual([0])
700
+ expect(emitted[2]).toEqual([-1])
693
701
  })
694
702
  })