@gitlab/ui 114.1.0 → 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 +7 -26
  2. package/CHANGELOG.md +0 -13139
  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,53 +0,0 @@
1
- import { mount } from '@vue/test-utils'
2
- import { waitNT } from '../../tests/utils'
3
- import { focusInMixin } from './focus-in'
4
-
5
- describe('mixins/focus-in', () => {
6
- it('works', async () => {
7
- let count = 0
8
- const App = {
9
- mixins: [focusInMixin],
10
- // listenForFocusIn comes from the mixin
11
- created() {
12
- this.listenForFocusIn = true
13
- },
14
- methods: {
15
- focusInHandler() {
16
- count++
17
- }
18
- },
19
- render(h) {
20
- return h('div', [h('button', 'button')])
21
- }
22
- }
23
-
24
- const wrapper = mount(App, {
25
- attachTo: document.body
26
- })
27
-
28
- const focusinEvent = new FocusEvent('focusin')
29
-
30
- expect(wrapper).toBeDefined()
31
- expect(count).toBe(0)
32
- expect(wrapper.vm.listenForFocusIn).toBe(true)
33
-
34
- // When this.listenForFocusIn is true
35
- expect(count).toBe(0)
36
- await wrapper.find('button').trigger('focusin')
37
- expect(count).toBe(1)
38
- document.dispatchEvent(focusinEvent)
39
- await waitNT(wrapper.vm)
40
- expect(count).toBe(2)
41
-
42
- // When this.listenForFocusIn is false
43
- await wrapper.setData({ listenForFocusIn: false })
44
- expect(count).toBe(2)
45
- await wrapper.find('button').trigger('focusin')
46
- expect(count).toBe(2)
47
- document.dispatchEvent(focusinEvent)
48
- await waitNT(wrapper.vm)
49
- expect(count).toBe(2)
50
-
51
- wrapper.destroy()
52
- })
53
- })
@@ -1,117 +0,0 @@
1
- import { mount } from '@vue/test-utils'
2
- import { listenOnDocumentMixin } from './listen-on-document'
3
-
4
- describe('mixins/listen-on-document', () => {
5
- it('works', async () => {
6
- const spyClick1 = jest.fn()
7
- const spyClick2 = jest.fn()
8
- const spyFocusin = jest.fn()
9
-
10
- const TestComponent = {
11
- mixins: [listenOnDocumentMixin],
12
- props: {
13
- offClickOne: {
14
- type: Boolean,
15
- default: false
16
- }
17
- },
18
- mounted() {
19
- this.listenOnDocument('click', spyClick1)
20
- this.listenOnDocument('focusin', spyFocusin)
21
- this.listenOnDocument('click', spyClick2)
22
- },
23
- watch: {
24
- offClickOne(newValue) {
25
- if (newValue) {
26
- this.listenOffDocument('click', spyClick1)
27
- }
28
- }
29
- },
30
- render(h) {
31
- return h('div', this.$slots.default)
32
- }
33
- }
34
-
35
- const App = {
36
- components: { TestComponent },
37
- props: {
38
- offClickOne: {
39
- type: Boolean,
40
- default: false
41
- },
42
- destroy: {
43
- type: Boolean,
44
- default: false
45
- }
46
- },
47
- render(h) {
48
- const props = {
49
- offClickOne: this.offClickOne
50
- }
51
- return h('div', [
52
- h('span', ''),
53
- h('input', { type: 'text' }),
54
- this.destroy ? h() : h(TestComponent, { props }, 'test-component')
55
- ])
56
- }
57
- }
58
-
59
- const wrapper = mount(App, {
60
- attachTo: document.body,
61
- propsData: {
62
- destroy: false
63
- }
64
- })
65
-
66
- expect(wrapper.vm).toBeDefined()
67
- expect(wrapper.text()).toEqual('test-component')
68
-
69
- expect(spyClick1).not.toHaveBeenCalled()
70
- expect(spyClick2).not.toHaveBeenCalled()
71
- expect(spyFocusin).not.toHaveBeenCalled()
72
-
73
- const $span = wrapper.find('span')
74
- expect($span.exists()).toBe(true)
75
-
76
- const $input = wrapper.find('input')
77
- expect($input.exists()).toBe(true)
78
-
79
- await $input.trigger('focusin')
80
- expect(spyClick1).not.toHaveBeenCalled()
81
- expect(spyClick2).not.toHaveBeenCalled()
82
- expect(spyFocusin).toHaveBeenCalledTimes(1)
83
-
84
- await $span.trigger('click')
85
- expect(spyClick1).toHaveBeenCalledTimes(1)
86
- expect(spyClick2).toHaveBeenCalledTimes(1)
87
- expect(spyFocusin).toHaveBeenCalledTimes(1)
88
-
89
- await wrapper.setProps({ offClickOne: true })
90
- await $span.trigger('click')
91
- expect(spyClick1).toHaveBeenCalledTimes(1)
92
- expect(spyClick2).toHaveBeenCalledTimes(2)
93
- expect(spyFocusin).toHaveBeenCalledTimes(1)
94
-
95
- await $input.trigger('focusin')
96
- expect(spyClick1).toHaveBeenCalledTimes(1)
97
- expect(spyClick2).toHaveBeenCalledTimes(2)
98
- expect(spyFocusin).toHaveBeenCalledTimes(2)
99
-
100
- await wrapper.setProps({ destroy: true })
101
- expect(spyClick1).toHaveBeenCalledTimes(1)
102
- expect(spyClick2).toHaveBeenCalledTimes(2)
103
- expect(spyFocusin).toHaveBeenCalledTimes(2)
104
-
105
- await $input.trigger('focusin')
106
- expect(spyClick1).toHaveBeenCalledTimes(1)
107
- expect(spyClick2).toHaveBeenCalledTimes(2)
108
- expect(spyFocusin).toHaveBeenCalledTimes(2)
109
-
110
- await $span.trigger('click')
111
- expect(spyClick1).toHaveBeenCalledTimes(1)
112
- expect(spyClick2).toHaveBeenCalledTimes(2)
113
- expect(spyFocusin).toHaveBeenCalledTimes(2)
114
-
115
- wrapper.destroy()
116
- })
117
- })
@@ -1,77 +0,0 @@
1
- import { mount } from '@vue/test-utils'
2
- import { listenOnRootMixin } from './listen-on-root'
3
-
4
- describe('mixins/listen-on-root', () => {
5
- it('works', async () => {
6
- const spyOn = jest.fn()
7
- const spyOnce = jest.fn()
8
-
9
- const TestComponent = {
10
- mixins: [listenOnRootMixin],
11
- created() {
12
- this.listenOnRoot('root-on', spyOn)
13
- this.listenOnRootOnce('root-once', spyOnce)
14
- },
15
- render(h) {
16
- return h('div', this.$slots.default)
17
- }
18
- }
19
-
20
- const App = {
21
- components: { TestComponent },
22
- props: {
23
- destroy: {
24
- type: Boolean,
25
- default: false
26
- }
27
- },
28
- render(h) {
29
- return h('div', [this.destroy ? h() : h(TestComponent, 'test-component')])
30
- }
31
- }
32
-
33
- const wrapper = mount(App, {
34
- propsData: {
35
- destroy: false
36
- }
37
- })
38
-
39
- expect(wrapper.vm).toBeDefined()
40
- expect(wrapper.text()).toEqual('test-component')
41
-
42
- expect(spyOn).not.toHaveBeenCalled()
43
- expect(spyOnce).not.toHaveBeenCalled()
44
-
45
- const $root = wrapper.vm.$root
46
-
47
- $root.$emit('root-on')
48
- expect(spyOn).toHaveBeenCalledTimes(1)
49
- expect(spyOnce).not.toHaveBeenCalled()
50
-
51
- $root.$emit('root-once')
52
- expect(spyOn).toHaveBeenCalledTimes(1)
53
- expect(spyOnce).toHaveBeenCalledTimes(1)
54
-
55
- $root.$emit('root-on')
56
- expect(spyOn).toHaveBeenCalledTimes(2)
57
- expect(spyOnce).toHaveBeenCalledTimes(1)
58
-
59
- $root.$emit('root-once')
60
- expect(spyOn).toHaveBeenCalledTimes(2)
61
- expect(spyOnce).toHaveBeenCalledTimes(1)
62
-
63
- await wrapper.setProps({ destroy: true })
64
- expect(spyOn).toHaveBeenCalledTimes(2)
65
- expect(spyOnce).toHaveBeenCalledTimes(1)
66
-
67
- $root.$emit('root-on')
68
- expect(spyOn).toHaveBeenCalledTimes(2)
69
- expect(spyOnce).toHaveBeenCalledTimes(1)
70
-
71
- $root.$emit('root-once')
72
- expect(spyOn).toHaveBeenCalledTimes(2)
73
- expect(spyOnce).toHaveBeenCalledTimes(1)
74
-
75
- wrapper.destroy()
76
- })
77
- })
@@ -1,115 +0,0 @@
1
- import { mount } from '@vue/test-utils'
2
- import { listenOnWindowMixin } from './listen-on-window'
3
-
4
- describe('mixins/listen-on-window', () => {
5
- it('works', async () => {
6
- const spyResize1 = jest.fn()
7
- const spyResize2 = jest.fn()
8
- const spyScroll = jest.fn()
9
-
10
- const TestComponent = {
11
- mixins: [listenOnWindowMixin],
12
- props: {
13
- offResizeOne: {
14
- type: Boolean,
15
- default: false
16
- }
17
- },
18
- mounted() {
19
- this.listenOnWindow('resize', spyResize1)
20
- this.listenOnWindow('scroll', spyScroll)
21
- this.listenOnWindow('resize', spyResize2)
22
- },
23
- watch: {
24
- offResizeOne(newValue) {
25
- if (newValue) {
26
- this.listenOffWindow('resize', spyResize1)
27
- }
28
- }
29
- },
30
- render(h) {
31
- return h('div', this.$slots.default)
32
- }
33
- }
34
-
35
- const App = {
36
- components: { TestComponent },
37
- props: {
38
- offResizeOne: {
39
- type: Boolean,
40
- default: false
41
- },
42
- destroy: {
43
- type: Boolean,
44
- default: false
45
- }
46
- },
47
- render(h) {
48
- const props = {
49
- offResizeOne: this.offResizeOne
50
- }
51
- return h('div', [this.destroy ? h() : h(TestComponent, { props }, 'test-component')])
52
- }
53
- }
54
-
55
- const wrapper = mount(App, {
56
- attachTo: document.body,
57
- propsData: {
58
- destroy: false
59
- }
60
- })
61
-
62
- expect(wrapper.vm).toBeDefined()
63
- expect(wrapper.text()).toEqual('test-component')
64
-
65
- expect(spyResize1).not.toHaveBeenCalled()
66
- expect(spyResize2).not.toHaveBeenCalled()
67
- expect(spyScroll).not.toHaveBeenCalled()
68
-
69
- window.dispatchEvent(new Event('scroll'))
70
-
71
- expect(spyResize1).not.toHaveBeenCalled()
72
- expect(spyResize2).not.toHaveBeenCalled()
73
- expect(spyScroll).toHaveBeenCalledTimes(1)
74
-
75
- window.dispatchEvent(new Event('resize'))
76
-
77
- expect(spyResize1).toHaveBeenCalledTimes(1)
78
- expect(spyResize2).toHaveBeenCalledTimes(1)
79
- expect(spyScroll).toHaveBeenCalledTimes(1)
80
-
81
- await wrapper.setProps({ offResizeOne: true })
82
-
83
- window.dispatchEvent(new Event('resize'))
84
-
85
- expect(spyResize1).toHaveBeenCalledTimes(1)
86
- expect(spyResize2).toHaveBeenCalledTimes(2)
87
- expect(spyScroll).toHaveBeenCalledTimes(1)
88
-
89
- window.dispatchEvent(new Event('scroll'))
90
-
91
- expect(spyResize1).toHaveBeenCalledTimes(1)
92
- expect(spyResize2).toHaveBeenCalledTimes(2)
93
- expect(spyScroll).toHaveBeenCalledTimes(2)
94
-
95
- await wrapper.setProps({ destroy: true })
96
-
97
- expect(spyResize1).toHaveBeenCalledTimes(1)
98
- expect(spyResize2).toHaveBeenCalledTimes(2)
99
- expect(spyScroll).toHaveBeenCalledTimes(2)
100
-
101
- window.dispatchEvent(new Event('scroll'))
102
-
103
- expect(spyResize1).toHaveBeenCalledTimes(1)
104
- expect(spyResize2).toHaveBeenCalledTimes(2)
105
- expect(spyScroll).toHaveBeenCalledTimes(2)
106
-
107
- window.dispatchEvent(new Event('resize'))
108
-
109
- expect(spyResize1).toHaveBeenCalledTimes(1)
110
- expect(spyResize2).toHaveBeenCalledTimes(2)
111
- expect(spyScroll).toHaveBeenCalledTimes(2)
112
-
113
- wrapper.destroy()
114
- })
115
- })
@@ -1,245 +0,0 @@
1
- import { isVue3 } from '../vue'
2
- import { mount } from '@vue/test-utils'
3
- import { listenersMixin } from './listeners'
4
-
5
- // Note: The following tests indirectly test `utils/cache`
6
-
7
- describe('mixins > listeners', () => {
8
- it('works', async () => {
9
- const BTest = {
10
- compatConfig: {
11
- MODE: 3,
12
- RENDER_FUNCTION: 'suppress-warning',
13
- INSTANCE_LISTENERS: 'suppress-warning'
14
- },
15
- name: 'BTest',
16
- mixins: [listenersMixin],
17
- inheritAttrs: false,
18
- render(h) {
19
- return h('button', { on: this.bvListeners })
20
- }
21
- }
22
- const App = {
23
- compatConfig: { MODE: 3, RENDER_FUNCTION: 'suppress-warning' },
24
- name: 'App',
25
- props: ['listenClick', 'listenFocus', 'listenBlur'],
26
- computed: {
27
- listeners() {
28
- const listeners = {}
29
- if (this.listenClick) {
30
- listeners.click = event => this.$emit('click', event)
31
- }
32
- if (this.listenFocus) {
33
- listeners.focus = event => this.$emit('focus', event)
34
- }
35
- if (this.listenBlur) {
36
- listeners.blur = event => this.$emit('blur', event)
37
- }
38
- return listeners
39
- }
40
- },
41
- render(h) {
42
- return h(BTest, { on: this.listeners })
43
- }
44
- }
45
-
46
- const wrapper = mount(App)
47
-
48
- expect(wrapper).toBeDefined()
49
- expect(wrapper.vm).toBeDefined()
50
- expect(wrapper.element.tagName).toBe('BUTTON')
51
-
52
- const $test = wrapper.findComponent(BTest)
53
-
54
- expect($test.exists()).toBe(true)
55
- expect($test.vm).toBeDefined()
56
-
57
- expect($test.vm.bvListeners).toBeDefined()
58
- expect($test.vm.bvListeners.click).toBeUndefined()
59
- expect($test.vm.bvListeners.focus).toBeUndefined()
60
- expect($test.vm.bvListeners.blur).toBeUndefined()
61
-
62
- // Correctly adds new listeners
63
- await wrapper.setProps({
64
- listenClick: true,
65
- listenFocus: true
66
- })
67
-
68
- expect($test.vm.bvListeners.click).toBeDefined()
69
- expect($test.vm.bvListeners.focus).toBeDefined()
70
- expect($test.vm.bvListeners.blur).toBeUndefined()
71
-
72
- // Correctly updates listeners
73
- await wrapper.setProps({
74
- listenClick: false,
75
- listenBlur: true
76
- })
77
-
78
- expect($test.vm.bvListeners.click).toBeUndefined()
79
- expect($test.vm.bvListeners.focus).toBeDefined()
80
- expect($test.vm.bvListeners.blur).toBeDefined()
81
-
82
- // Correctly removes listeners
83
- await wrapper.setProps({
84
- listenClick: false,
85
- listenFocus: false,
86
- listenBlur: false
87
- })
88
-
89
- expect($test.vm.bvListeners.click).toBeUndefined()
90
- expect($test.vm.bvListeners.focus).toBeUndefined()
91
- expect($test.vm.bvListeners.blur).toBeUndefined()
92
-
93
- wrapper.destroy()
94
- })
95
-
96
- it('does not re-render parent child components', async () => {
97
- let input1RenderCount = 0
98
- let input2RenderCount = 0
99
-
100
- const Input1 = {
101
- compatConfig: {
102
- MODE: 3,
103
- RENDER_FUNCTION: 'suppress-warning',
104
- INSTANCE_LISTENERS: 'suppress-warning'
105
- },
106
- props: ['value'],
107
- render(h) {
108
- input1RenderCount++
109
- return h('input', {
110
- attrs: { value: this.value },
111
- domProps: { value: this.value },
112
- on: { ...this.$listeners, input: e => this.$emit('input', e.target.value) }
113
- })
114
- }
115
- }
116
- const Input2 = {
117
- compatConfig: {
118
- MODE: 3,
119
- RENDER_FUNCTION: 'suppress-warning',
120
- INSTANCE_LISTENERS: 'suppress-warning'
121
- },
122
- props: ['value'],
123
- mixins: [listenersMixin],
124
- render(h) {
125
- input2RenderCount++
126
- return h('input', {
127
- attrs: { value: this.value },
128
- domProps: { value: this.value },
129
- on: { ...this.bvListeners, input: e => this.$emit('input', e.target.value) }
130
- })
131
- }
132
- }
133
-
134
- const App1 = {
135
- components: { Input1 },
136
- props: ['listenFocus1', 'listenFocus2'],
137
- methods: {
138
- emit1($event) {
139
- if (this.listenFocus1) {
140
- this.$emit('focus1', $event)
141
- }
142
- },
143
- emit2($event) {
144
- if (this.listenFocus2) {
145
- this.$emit('focus2', $event)
146
- }
147
- }
148
- },
149
- template: `<div>
150
- <Input1 @focus="emit1" />
151
- <Input1 @focus="emit2" />
152
- </div>`
153
- }
154
- const App2 = {
155
- components: { Input2 },
156
- props: ['listenFocus1', 'listenFocus2'],
157
- methods: {
158
- emit1($event) {
159
- if (this.listenFocus1) {
160
- this.$emit('focus1', $event)
161
- }
162
- },
163
- emit2($event) {
164
- if (this.listenFocus2) {
165
- this.$emit('focus2', $event)
166
- }
167
- }
168
- },
169
- template: `<div>
170
- <Input2 @focus="emit1" />
171
- <Input2 @focus="emit2" />
172
- </div>`
173
- }
174
-
175
- const wrapper1 = mount(App1, { attachTo: document.body })
176
- const wrapper2 = mount(App2, { attachTo: document.body })
177
-
178
- // --- `Input1` tests ---
179
-
180
- const $inputs1 = wrapper1.findAllComponents(Input1)
181
- expect($inputs1.length).toBe(2)
182
- expect($inputs1.at(0)).toBeDefined()
183
- expect($inputs1.at(1)).toBeDefined()
184
- expect(wrapper1.emitted().focus1).not.toBeTruthy()
185
- expect(wrapper1.emitted().focus2).not.toBeTruthy()
186
- expect(input1RenderCount).toBe(2)
187
-
188
- await $inputs1.at(0).trigger('focus')
189
- expect(wrapper1.emitted().focus1).not.toBeTruthy()
190
- await $inputs1.at(1).trigger('focus')
191
- expect(wrapper1.emitted().focus2).not.toBeTruthy()
192
- expect(input1RenderCount).toBe(2)
193
-
194
- // Enable focus events for the first input and trigger it
195
- await wrapper1.setProps({ listenFocus1: true })
196
- await $inputs1.at(0).trigger('focus')
197
- expect(wrapper1.emitted().focus1).toBeTruthy()
198
- expect(wrapper1.emitted().focus2).not.toBeTruthy()
199
- // Both `Input1`'s are re-rendered (See: https://github.com/vuejs/vue/issues/7257)
200
- expect(input1RenderCount).toBe(isVue3 ? 2 : 4)
201
-
202
- // Enable focus events for the second input and trigger it
203
- await wrapper1.setProps({ listenFocus2: true })
204
- await $inputs1.at(1).trigger('focus')
205
- expect(wrapper1.emitted().focus1).toBeTruthy()
206
- expect(wrapper1.emitted().focus2).toBeTruthy()
207
- // Both `Input1`'s are re-rendered (See: https://github.com/vuejs/vue/issues/7257)
208
- expect(input1RenderCount).toBe(isVue3 ? 2 : 6)
209
-
210
- // --- `Input2` tests ---
211
-
212
- const $inputs2 = wrapper2.findAllComponents(Input2)
213
- expect($inputs2.length).toBe(2)
214
- expect($inputs2.at(0)).toBeDefined()
215
- expect($inputs2.at(1)).toBeDefined()
216
- expect(wrapper2.emitted().focus1).not.toBeTruthy()
217
- expect(wrapper2.emitted().focus2).not.toBeTruthy()
218
- expect(input2RenderCount).toBe(2)
219
-
220
- await $inputs2.at(0).trigger('focus')
221
- expect(wrapper2.emitted().focus1).not.toBeTruthy()
222
- await $inputs2.at(1).trigger('focus')
223
- expect(wrapper2.emitted().focus2).not.toBeTruthy()
224
- expect(input2RenderCount).toBe(2)
225
-
226
- // Enable focus events for the first input and trigger it
227
- await wrapper2.setProps({ listenFocus1: true })
228
- await $inputs2.at(0).trigger('focus')
229
- expect(wrapper2.emitted().focus1).toBeTruthy()
230
- expect(wrapper2.emitted().focus2).not.toBeTruthy()
231
- // With `listenersMixin` only the affected `Input2` is re-rendered
232
- expect(input2RenderCount).toBe(2)
233
-
234
- // Enable focus events for the second input and trigger it
235
- await wrapper2.setProps({ listenFocus2: true })
236
- await $inputs2.at(1).trigger('focus')
237
- expect(wrapper2.emitted().focus1).toBeTruthy()
238
- expect(wrapper2.emitted().focus2).toBeTruthy()
239
- // With `listenersMixin` only the affected `Input2` is re-rendered
240
- expect(input2RenderCount).toBe(2)
241
-
242
- wrapper1.destroy()
243
- wrapper2.destroy()
244
- })
245
- })
@@ -1,66 +0,0 @@
1
- import { BvEvent } from './bv-event.class'
2
-
3
- describe('utils/BvEvent class', () => {
4
- it('works', async () => {
5
- const event = new BvEvent('foobar')
6
- expect(event).toBeInstanceOf(BvEvent)
7
- expect(event.type).toBe('foobar')
8
- })
9
-
10
- it('throws exception if no type given', async () => {
11
- let event = null
12
- let failed = false
13
- try {
14
- event = new BvEvent()
15
- } catch (e) {
16
- failed = true
17
- }
18
- expect(event).not.toBeInstanceOf(BvEvent)
19
- expect(event).toBe(null)
20
- expect(failed).toBe(true)
21
- })
22
-
23
- it('supports cancelable events', async () => {
24
- const event = new BvEvent('foobar', {
25
- cancelable: true
26
- })
27
- expect(event).toBeInstanceOf(BvEvent)
28
- expect(event.type).toBe('foobar')
29
- expect(event.cancelable).toBe(true)
30
- expect(event.defaultPrevented).toBe(false)
31
- event.preventDefault()
32
- expect(event.defaultPrevented).toBe(true)
33
- })
34
-
35
- it('supports non cancelable events', async () => {
36
- const event = new BvEvent('foobar', {
37
- cancelable: false
38
- })
39
- expect(event).toBeInstanceOf(BvEvent)
40
- expect(event.type).toBe('foobar')
41
- expect(event.cancelable).toBe(false)
42
- expect(event.defaultPrevented).toBe(false)
43
- event.preventDefault()
44
- expect(event.defaultPrevented).toBe(false)
45
- })
46
-
47
- it('supports built in properties', async () => {
48
- const event = new BvEvent('foobar', {
49
- target: 'baz'
50
- })
51
- expect(event).toBeInstanceOf(BvEvent)
52
- expect(event.type).toBe('foobar')
53
- expect(event.cancelable).toBe(true)
54
- expect(event.target).toBe('baz')
55
- })
56
-
57
- it('supports custom properties', async () => {
58
- const event = new BvEvent('foobar', {
59
- custom: 123
60
- })
61
- expect(event).toBeInstanceOf(BvEvent)
62
- expect(event.type).toBe('foobar')
63
- expect(event.cancelable).toBe(true)
64
- expect(event.custom).toBe(123)
65
- })
66
- })