@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.
- package/package.json +7 -26
- package/CHANGELOG.md +0 -13139
- package/src/vendor/bootstrap/LICENSE +0 -11
- package/src/vendor/bootstrap-vue/LICENSE +0 -11
- package/src/vendor/bootstrap-vue/package.json +0 -144
- package/src/vendor/bootstrap-vue/src/components/button/MODIFICATIONS.md +0 -16
- package/src/vendor/bootstrap-vue/src/components/button/README.md +0 -240
- package/src/vendor/bootstrap-vue/src/components/button/button-close.spec.js +0 -210
- package/src/vendor/bootstrap-vue/src/components/button/button.spec.js +0 -349
- package/src/vendor/bootstrap-vue/src/components/button/package.json +0 -105
- package/src/vendor/bootstrap-vue/src/components/dropdown/README.md +0 -730
- package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-divider.spec.js +0 -58
- package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-form.spec.js +0 -110
- package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-group.spec.js +0 -94
- package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-header.spec.js +0 -73
- package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-item-button.spec.js +0 -117
- package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-item.spec.js +0 -147
- package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-text.spec.js +0 -59
- package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown.spec.js +0 -1121
- package/src/vendor/bootstrap-vue/src/components/dropdown/package.json +0 -368
- package/src/vendor/bootstrap-vue/src/components/form/README.md +0 -365
- package/src/vendor/bootstrap-vue/src/components/form/form-invalid-feedback.spec.js +0 -170
- package/src/vendor/bootstrap-vue/src/components/form/form-text.spec.js +0 -93
- package/src/vendor/bootstrap-vue/src/components/form/form-valid-feedback.spec.js +0 -157
- package/src/vendor/bootstrap-vue/src/components/form/form.spec.js +0 -97
- package/src/vendor/bootstrap-vue/src/components/form/package.json +0 -112
- package/src/vendor/bootstrap-vue/src/components/form-checkbox/README.md +0 -691
- package/src/vendor/bootstrap-vue/src/components/form-checkbox/form-checkbox-group.spec.js +0 -525
- package/src/vendor/bootstrap-vue/src/components/form-checkbox/form-checkbox.spec.js +0 -922
- package/src/vendor/bootstrap-vue/src/components/form-checkbox/package.json +0 -172
- package/src/vendor/bootstrap-vue/src/components/form-group/README.md +0 -339
- package/src/vendor/bootstrap-vue/src/components/form-group/form-group.spec.js +0 -477
- package/src/vendor/bootstrap-vue/src/components/form-group/package.json +0 -183
- package/src/vendor/bootstrap-vue/src/components/form-radio/README.md +0 -437
- package/src/vendor/bootstrap-vue/src/components/form-radio/form-radio-group.spec.js +0 -357
- package/src/vendor/bootstrap-vue/src/components/form-radio/form-radio.spec.js +0 -587
- package/src/vendor/bootstrap-vue/src/components/form-radio/package.json +0 -162
- package/src/vendor/bootstrap-vue/src/components/form-select/README.md +0 -504
- package/src/vendor/bootstrap-vue/src/components/form-select/form-select-option-group.spec.js +0 -138
- package/src/vendor/bootstrap-vue/src/components/form-select/form-select-option.spec.js +0 -75
- package/src/vendor/bootstrap-vue/src/components/form-select/form-select.spec.js +0 -723
- package/src/vendor/bootstrap-vue/src/components/form-select/package.json +0 -132
- package/src/vendor/bootstrap-vue/src/components/form-textarea/README.md +0 -453
- package/src/vendor/bootstrap-vue/src/components/form-textarea/form-textarea.spec.js +0 -1000
- package/src/vendor/bootstrap-vue/src/components/form-textarea/package.json +0 -122
- package/src/vendor/bootstrap-vue/src/components/layout/README.md +0 -791
- package/src/vendor/bootstrap-vue/src/components/layout/col.spec.js +0 -192
- package/src/vendor/bootstrap-vue/src/components/layout/form-row.spec.js +0 -45
- package/src/vendor/bootstrap-vue/src/components/layout/package.json +0 -99
- package/src/vendor/bootstrap-vue/src/components/link/README.md +0 -76
- package/src/vendor/bootstrap-vue/src/components/link/link.spec.js +0 -434
- package/src/vendor/bootstrap-vue/src/components/link/package.json +0 -57
- package/src/vendor/bootstrap-vue/src/components/modal/MODIFICATIONS.md +0 -30
- package/src/vendor/bootstrap-vue/src/components/modal/README.md +0 -1067
- package/src/vendor/bootstrap-vue/src/components/modal/helpers/bv-modal-event.class.spec.js +0 -82
- package/src/vendor/bootstrap-vue/src/components/modal/modal.spec.js +0 -1418
- package/src/vendor/bootstrap-vue/src/components/modal/package.json +0 -544
- package/src/vendor/bootstrap-vue/src/components/nav/README.md +0 -362
- package/src/vendor/bootstrap-vue/src/components/nav/nav-item.spec.js +0 -127
- package/src/vendor/bootstrap-vue/src/components/nav/nav.spec.js +0 -177
- package/src/vendor/bootstrap-vue/src/components/nav/package.json +0 -73
- package/src/vendor/bootstrap-vue/src/components/popover/README.md +0 -919
- package/src/vendor/bootstrap-vue/src/components/popover/package.json +0 -261
- package/src/vendor/bootstrap-vue/src/components/popover/popover.spec.js +0 -198
- package/src/vendor/bootstrap-vue/src/components/table/README.md +0 -3157
- package/src/vendor/bootstrap-vue/src/components/table/helpers/default-sort-compare.spec.js +0 -112
- package/src/vendor/bootstrap-vue/src/components/table/helpers/normalize-fields.spec.js +0 -93
- package/src/vendor/bootstrap-vue/src/components/table/package.json +0 -1763
- package/src/vendor/bootstrap-vue/src/components/table/table-busy.spec.js +0 -150
- package/src/vendor/bootstrap-vue/src/components/table/table-caption.spec.js +0 -176
- package/src/vendor/bootstrap-vue/src/components/table/table-colgroup.spec.js +0 -81
- package/src/vendor/bootstrap-vue/src/components/table/table-filtering.spec.js +0 -409
- package/src/vendor/bootstrap-vue/src/components/table/table-item-formatter.spec.js +0 -56
- package/src/vendor/bootstrap-vue/src/components/table/table-lite.spec.js +0 -682
- package/src/vendor/bootstrap-vue/src/components/table/table-pagination.spec.js +0 -133
- package/src/vendor/bootstrap-vue/src/components/table/table-primarykey.spec.js +0 -83
- package/src/vendor/bootstrap-vue/src/components/table/table-provider.spec.js +0 -411
- package/src/vendor/bootstrap-vue/src/components/table/table-row-details.spec.js +0 -459
- package/src/vendor/bootstrap-vue/src/components/table/table-selectable.spec.js +0 -1182
- package/src/vendor/bootstrap-vue/src/components/table/table-simple.spec.js +0 -206
- package/src/vendor/bootstrap-vue/src/components/table/table-sorting.spec.js +0 -858
- package/src/vendor/bootstrap-vue/src/components/table/table-sticky-column.spec.js +0 -377
- package/src/vendor/bootstrap-vue/src/components/table/table-tbody-bottom-row.spec.js +0 -94
- package/src/vendor/bootstrap-vue/src/components/table/table-tbody-row-events.spec.js +0 -529
- package/src/vendor/bootstrap-vue/src/components/table/table-tbody-top-row.spec.js +0 -88
- package/src/vendor/bootstrap-vue/src/components/table/table-tbody-transition.spec.js +0 -83
- package/src/vendor/bootstrap-vue/src/components/table/table-tfoot-custom.spec.js +0 -91
- package/src/vendor/bootstrap-vue/src/components/table/table-tfoot-events.spec.js +0 -137
- package/src/vendor/bootstrap-vue/src/components/table/table-thead-events.spec.js +0 -155
- package/src/vendor/bootstrap-vue/src/components/table/table-thead-top.spec.js +0 -96
- package/src/vendor/bootstrap-vue/src/components/table/table.spec.js +0 -692
- package/src/vendor/bootstrap-vue/src/components/tabs/README.md +0 -433
- package/src/vendor/bootstrap-vue/src/components/tabs/package.json +0 -205
- package/src/vendor/bootstrap-vue/src/components/tabs/tab.spec.js +0 -330
- package/src/vendor/bootstrap-vue/src/components/tabs/tabs.spec.js +0 -778
- package/src/vendor/bootstrap-vue/src/components/toast/README.md +0 -655
- package/src/vendor/bootstrap-vue/src/components/toast/helpers/bv-toast.spec.js +0 -117
- package/src/vendor/bootstrap-vue/src/components/toast/package.json +0 -184
- package/src/vendor/bootstrap-vue/src/components/toast/toast.spec.js +0 -294
- package/src/vendor/bootstrap-vue/src/components/toast/toaster.spec.js +0 -77
- package/src/vendor/bootstrap-vue/src/components/tooltip/README.md +0 -559
- package/src/vendor/bootstrap-vue/src/components/tooltip/package.json +0 -258
- package/src/vendor/bootstrap-vue/src/components/tooltip/tooltip.spec.js +0 -1240
- package/src/vendor/bootstrap-vue/src/components/transition/package.json +0 -5
- package/src/vendor/bootstrap-vue/src/components/transporter/package.json +0 -5
- package/src/vendor/bootstrap-vue/src/components/transporter/transporter.spec.js +0 -85
- package/src/vendor/bootstrap-vue/src/directives/modal/modal.spec.js +0 -191
- package/src/vendor/bootstrap-vue/src/directives/tooltip/README.md +0 -521
- package/src/vendor/bootstrap-vue/src/directives/tooltip/package.json +0 -131
- package/src/vendor/bootstrap-vue/src/directives/tooltip/tooltip.spec.js +0 -190
- package/src/vendor/bootstrap-vue/src/directives/visible/README.md +0 -244
- package/src/vendor/bootstrap-vue/src/directives/visible/package.json +0 -24
- package/src/vendor/bootstrap-vue/src/mixins/attrs.spec.js +0 -194
- package/src/vendor/bootstrap-vue/src/mixins/click-out.spec.js +0 -52
- package/src/vendor/bootstrap-vue/src/mixins/focus-in.spec.js +0 -53
- package/src/vendor/bootstrap-vue/src/mixins/listen-on-document.spec.js +0 -117
- package/src/vendor/bootstrap-vue/src/mixins/listen-on-root.spec.js +0 -77
- package/src/vendor/bootstrap-vue/src/mixins/listen-on-window.spec.js +0 -115
- package/src/vendor/bootstrap-vue/src/mixins/listeners.spec.js +0 -245
- package/src/vendor/bootstrap-vue/src/utils/bv-event.class.spec.js +0 -66
- package/src/vendor/bootstrap-vue/src/utils/clone-deep.spec.js +0 -70
- package/src/vendor/bootstrap-vue/src/utils/config.spec.js +0 -169
- package/src/vendor/bootstrap-vue/src/utils/css-escape.spec.js +0 -82
- package/src/vendor/bootstrap-vue/src/utils/dom.spec.js +0 -291
- package/src/vendor/bootstrap-vue/src/utils/events.spec.js +0 -41
- package/src/vendor/bootstrap-vue/src/utils/get.spec.js +0 -109
- package/src/vendor/bootstrap-vue/src/utils/inspect.spec.js +0 -251
- package/src/vendor/bootstrap-vue/src/utils/loose-equal.spec.js +0 -203
- package/src/vendor/bootstrap-vue/src/utils/normalize-slot.spec.js +0 -63
- package/src/vendor/bootstrap-vue/src/utils/number.spec.js +0 -72
- package/src/vendor/bootstrap-vue/src/utils/object.spec.js +0 -61
- package/src/vendor/bootstrap-vue/src/utils/props.spec.js +0 -112
- package/src/vendor/bootstrap-vue/src/utils/router.spec.js +0 -248
- package/src/vendor/bootstrap-vue/src/utils/string.spec.js +0 -65
- package/src/vendor/bootstrap-vue/src/utils/stringify-object-values.spec.js +0 -47
- package/src/vendor/bootstrap-vue/src/utils/warn.spec.js +0 -54
|
@@ -1,1121 +0,0 @@
|
|
|
1
|
-
import { mount } from '@vue/test-utils'
|
|
2
|
-
import { waitNT, waitRAF } from '../../../tests/utils'
|
|
3
|
-
import { BDropdown } from './dropdown'
|
|
4
|
-
import { BDropdownItem } from './dropdown-item'
|
|
5
|
-
|
|
6
|
-
describe('dropdown', () => {
|
|
7
|
-
const originalCreateRange = document.createRange
|
|
8
|
-
const origGetBCR = Element.prototype.getBoundingClientRect
|
|
9
|
-
|
|
10
|
-
beforeEach(() => {
|
|
11
|
-
// https://github.com/FezVrasta/popper.js/issues/478#issuecomment-407422016
|
|
12
|
-
// Hack to make Popper not bork out during tests
|
|
13
|
-
// Note popper still does not do any positioning calculation in JSDOM though
|
|
14
|
-
// So we cannot test actual positioning of the menu, just detect when it is open
|
|
15
|
-
document.createRange = () => ({
|
|
16
|
-
setStart: () => {},
|
|
17
|
-
setEnd: () => {},
|
|
18
|
-
commonAncestorContainer: {
|
|
19
|
-
nodeName: 'BODY',
|
|
20
|
-
ownerDocument: document
|
|
21
|
-
}
|
|
22
|
-
})
|
|
23
|
-
// Mock `getBoundingClientRect()` so that the `isVisible(el)` test returns `true`
|
|
24
|
-
// Needed for keyboard navigation testing
|
|
25
|
-
Element.prototype.getBoundingClientRect = jest.fn(() => ({
|
|
26
|
-
width: 24,
|
|
27
|
-
height: 24,
|
|
28
|
-
top: 0,
|
|
29
|
-
left: 0,
|
|
30
|
-
bottom: 0,
|
|
31
|
-
right: 0
|
|
32
|
-
}))
|
|
33
|
-
})
|
|
34
|
-
|
|
35
|
-
afterEach(() => {
|
|
36
|
-
// Reset overrides
|
|
37
|
-
document.createRange = originalCreateRange
|
|
38
|
-
Element.prototype.getBoundingClientRect = origGetBCR
|
|
39
|
-
})
|
|
40
|
-
|
|
41
|
-
it('has expected default structure', async () => {
|
|
42
|
-
const wrapper = mount(BDropdown, {
|
|
43
|
-
attachTo: document.body
|
|
44
|
-
})
|
|
45
|
-
|
|
46
|
-
expect(wrapper.element.tagName).toBe('DIV')
|
|
47
|
-
expect(wrapper.vm).toBeDefined()
|
|
48
|
-
|
|
49
|
-
// Wait for auto ID to be generated
|
|
50
|
-
await waitNT(wrapper.vm)
|
|
51
|
-
|
|
52
|
-
expect(wrapper.classes()).toContain('dropdown')
|
|
53
|
-
expect(wrapper.classes()).toContain('btn-group')
|
|
54
|
-
expect(wrapper.classes()).toContain('b-dropdown')
|
|
55
|
-
expect(wrapper.classes().length).toBe(3)
|
|
56
|
-
expect(wrapper.attributes('id')).toBeDefined()
|
|
57
|
-
const wrapperId = wrapper.attributes('id')
|
|
58
|
-
|
|
59
|
-
expect(wrapper.findAll('button').length).toBe(1)
|
|
60
|
-
const $button = wrapper.find('button')
|
|
61
|
-
expect($button.classes()).toContain('btn')
|
|
62
|
-
expect($button.classes()).toContain('btn-secondary')
|
|
63
|
-
expect($button.classes()).toContain('dropdown-toggle')
|
|
64
|
-
expect($button.classes().length).toBe(3)
|
|
65
|
-
expect($button.attributes('aria-haspopup')).toBeDefined()
|
|
66
|
-
expect($button.attributes('aria-haspopup')).toEqual('menu')
|
|
67
|
-
expect($button.attributes('aria-expanded')).toBeDefined()
|
|
68
|
-
expect($button.attributes('aria-expanded')).toEqual('false')
|
|
69
|
-
expect($button.attributes('id')).toBeDefined()
|
|
70
|
-
expect($button.attributes('id')).toEqual(`${wrapperId}__BV_toggle_`)
|
|
71
|
-
expect($button.text()).toEqual('')
|
|
72
|
-
|
|
73
|
-
expect(wrapper.findAll('.dropdown-menu').length).toBe(1)
|
|
74
|
-
const $menu = wrapper.find('.dropdown-menu')
|
|
75
|
-
expect($menu.element.tagName).toBe('UL')
|
|
76
|
-
expect($menu.classes().length).toBe(1)
|
|
77
|
-
expect($menu.attributes('role')).toBeDefined()
|
|
78
|
-
expect($menu.attributes('role')).toEqual('menu')
|
|
79
|
-
expect($menu.attributes('tabindex')).toBeDefined()
|
|
80
|
-
expect($menu.attributes('tabindex')).toEqual('-1')
|
|
81
|
-
expect($menu.attributes('aria-labelledby')).toBeDefined()
|
|
82
|
-
expect($menu.attributes('aria-labelledby')).toEqual(`${wrapperId}__BV_toggle_`)
|
|
83
|
-
expect($menu.text()).toEqual('')
|
|
84
|
-
|
|
85
|
-
wrapper.destroy()
|
|
86
|
-
})
|
|
87
|
-
|
|
88
|
-
it('split mode has expected default structure', async () => {
|
|
89
|
-
const wrapper = mount(BDropdown, {
|
|
90
|
-
attachTo: document.body,
|
|
91
|
-
propsData: {
|
|
92
|
-
split: true
|
|
93
|
-
}
|
|
94
|
-
})
|
|
95
|
-
|
|
96
|
-
expect(wrapper.element.tagName).toBe('DIV')
|
|
97
|
-
expect(wrapper.vm).toBeDefined()
|
|
98
|
-
|
|
99
|
-
// Wait for auto ID to be generated
|
|
100
|
-
await waitNT(wrapper.vm)
|
|
101
|
-
|
|
102
|
-
expect(wrapper.classes()).toContain('dropdown')
|
|
103
|
-
expect(wrapper.classes()).toContain('btn-group')
|
|
104
|
-
expect(wrapper.classes()).toContain('b-dropdown')
|
|
105
|
-
expect(wrapper.classes().length).toBe(3)
|
|
106
|
-
expect(wrapper.attributes('id')).toBeDefined()
|
|
107
|
-
const wrapperId = wrapper.attributes('id')
|
|
108
|
-
|
|
109
|
-
expect(wrapper.findAll('button').length).toBe(2)
|
|
110
|
-
const $buttons = wrapper.findAll('button')
|
|
111
|
-
const $split = $buttons.at(0)
|
|
112
|
-
const $toggle = $buttons.at(1)
|
|
113
|
-
|
|
114
|
-
expect($split.classes()).toContain('btn')
|
|
115
|
-
expect($split.classes()).toContain('btn-secondary')
|
|
116
|
-
expect($split.attributes('id')).toBeDefined()
|
|
117
|
-
expect($split.attributes('id')).toEqual(`${wrapperId}__BV_button_`)
|
|
118
|
-
expect($split.attributes('type')).toBeDefined()
|
|
119
|
-
expect($split.attributes('type')).toEqual('button')
|
|
120
|
-
expect($split.text()).toEqual('')
|
|
121
|
-
|
|
122
|
-
expect($toggle.classes()).toContain('btn')
|
|
123
|
-
expect($toggle.classes()).toContain('btn-secondary')
|
|
124
|
-
expect($toggle.classes()).toContain('dropdown-toggle')
|
|
125
|
-
expect($toggle.classes()).toContain('dropdown-toggle-split')
|
|
126
|
-
expect($toggle.classes().length).toBe(4)
|
|
127
|
-
expect($toggle.attributes('aria-haspopup')).toBeDefined()
|
|
128
|
-
expect($toggle.attributes('aria-haspopup')).toEqual('menu')
|
|
129
|
-
expect($toggle.attributes('aria-expanded')).toBeDefined()
|
|
130
|
-
expect($toggle.attributes('aria-expanded')).toEqual('false')
|
|
131
|
-
expect($toggle.attributes('id')).toBeDefined()
|
|
132
|
-
expect($toggle.attributes('id')).toEqual(`${wrapperId}__BV_toggle_`)
|
|
133
|
-
expect($toggle.attributes('type')).toBeDefined()
|
|
134
|
-
expect($toggle.attributes('type')).toEqual('button')
|
|
135
|
-
expect($toggle.findAll('span.gl-sr-only').length).toBe(1)
|
|
136
|
-
expect($toggle.find('span.gl-sr-only').text()).toEqual('Toggle dropdown')
|
|
137
|
-
expect($toggle.text()).toEqual('Toggle dropdown')
|
|
138
|
-
|
|
139
|
-
expect(wrapper.findAll('.dropdown-menu').length).toBe(1)
|
|
140
|
-
const $menu = wrapper.find('.dropdown-menu')
|
|
141
|
-
expect($menu.element.tagName).toBe('UL')
|
|
142
|
-
expect($menu.classes().length).toBe(1)
|
|
143
|
-
expect($menu.attributes('role')).toBeDefined()
|
|
144
|
-
expect($menu.attributes('role')).toEqual('menu')
|
|
145
|
-
expect($menu.attributes('tabindex')).toBeDefined()
|
|
146
|
-
expect($menu.attributes('tabindex')).toEqual('-1')
|
|
147
|
-
expect($menu.attributes('aria-labelledby')).toBeDefined()
|
|
148
|
-
expect($menu.attributes('aria-labelledby')).toEqual(`${wrapperId}__BV_button_`)
|
|
149
|
-
expect($menu.text()).toEqual('')
|
|
150
|
-
|
|
151
|
-
wrapper.destroy()
|
|
152
|
-
})
|
|
153
|
-
|
|
154
|
-
it('split mode accepts split-button-type value', async () => {
|
|
155
|
-
const wrapper = mount(BDropdown, {
|
|
156
|
-
attachTo: document.body,
|
|
157
|
-
propsData: {
|
|
158
|
-
split: true,
|
|
159
|
-
splitButtonType: 'submit'
|
|
160
|
-
}
|
|
161
|
-
})
|
|
162
|
-
|
|
163
|
-
expect(wrapper.element.tagName).toBe('DIV')
|
|
164
|
-
expect(wrapper.vm).toBeDefined()
|
|
165
|
-
|
|
166
|
-
await waitNT(wrapper.vm)
|
|
167
|
-
|
|
168
|
-
expect(wrapper.classes()).toContain('dropdown')
|
|
169
|
-
|
|
170
|
-
expect(wrapper.findAll('button').length).toBe(2)
|
|
171
|
-
const $buttons = wrapper.findAll('button')
|
|
172
|
-
const $split = $buttons.at(0)
|
|
173
|
-
const $toggle = $buttons.at(1)
|
|
174
|
-
|
|
175
|
-
expect($split.attributes('type')).toBeDefined()
|
|
176
|
-
expect($split.attributes('type')).toEqual('submit')
|
|
177
|
-
|
|
178
|
-
expect($toggle.attributes('type')).toBeDefined()
|
|
179
|
-
expect($toggle.attributes('type')).toEqual('button')
|
|
180
|
-
|
|
181
|
-
wrapper.destroy()
|
|
182
|
-
})
|
|
183
|
-
|
|
184
|
-
it('renders default slot inside menu', async () => {
|
|
185
|
-
const wrapper = mount(BDropdown, {
|
|
186
|
-
attachTo: document.body,
|
|
187
|
-
slots: {
|
|
188
|
-
default: 'foobar'
|
|
189
|
-
}
|
|
190
|
-
})
|
|
191
|
-
|
|
192
|
-
expect(wrapper.element.tagName).toBe('DIV')
|
|
193
|
-
expect(wrapper.vm).toBeDefined()
|
|
194
|
-
|
|
195
|
-
expect(wrapper.findAll('.dropdown-menu').length).toBe(1)
|
|
196
|
-
const $menu = wrapper.find('.dropdown-menu')
|
|
197
|
-
expect($menu.text()).toEqual('foobar')
|
|
198
|
-
|
|
199
|
-
wrapper.destroy()
|
|
200
|
-
})
|
|
201
|
-
|
|
202
|
-
it('renders button-content slot inside toggle button', async () => {
|
|
203
|
-
const wrapper = mount(BDropdown, {
|
|
204
|
-
attachTo: document.body,
|
|
205
|
-
slots: {
|
|
206
|
-
'button-content': 'foobar'
|
|
207
|
-
}
|
|
208
|
-
})
|
|
209
|
-
|
|
210
|
-
expect(wrapper.element.tagName).toBe('DIV')
|
|
211
|
-
expect(wrapper.vm).toBeDefined()
|
|
212
|
-
|
|
213
|
-
expect(wrapper.findAll('button').length).toBe(1)
|
|
214
|
-
expect(wrapper.findAll('.dropdown-toggle').length).toBe(1)
|
|
215
|
-
const $toggle = wrapper.find('.dropdown-toggle')
|
|
216
|
-
expect($toggle.text()).toEqual('foobar')
|
|
217
|
-
|
|
218
|
-
wrapper.destroy()
|
|
219
|
-
})
|
|
220
|
-
|
|
221
|
-
it('renders button-content slot inside split button', async () => {
|
|
222
|
-
const wrapper = mount(BDropdown, {
|
|
223
|
-
attachTo: document.body,
|
|
224
|
-
propsData: {
|
|
225
|
-
split: true
|
|
226
|
-
},
|
|
227
|
-
slots: {
|
|
228
|
-
'button-content': 'foobar'
|
|
229
|
-
}
|
|
230
|
-
})
|
|
231
|
-
|
|
232
|
-
expect(wrapper.element.tagName).toBe('DIV')
|
|
233
|
-
expect(wrapper.vm).toBeDefined()
|
|
234
|
-
|
|
235
|
-
expect(wrapper.findAll('button').length).toBe(2)
|
|
236
|
-
const $buttons = wrapper.findAll('button')
|
|
237
|
-
const $split = $buttons.at(0)
|
|
238
|
-
const $toggle = $buttons.at(1)
|
|
239
|
-
|
|
240
|
-
expect($split.text()).toEqual('foobar')
|
|
241
|
-
expect($toggle.classes()).toContain('dropdown-toggle')
|
|
242
|
-
// Toggle has `gl-sr-only` hidden text
|
|
243
|
-
expect($toggle.text()).toEqual('Toggle dropdown')
|
|
244
|
-
|
|
245
|
-
wrapper.destroy()
|
|
246
|
-
})
|
|
247
|
-
|
|
248
|
-
it('does not render default slot inside menu when prop lazy set', async () => {
|
|
249
|
-
const wrapper = mount(BDropdown, {
|
|
250
|
-
attachTo: document.body,
|
|
251
|
-
propsData: {
|
|
252
|
-
lazy: true
|
|
253
|
-
},
|
|
254
|
-
slots: {
|
|
255
|
-
default: 'foobar'
|
|
256
|
-
}
|
|
257
|
-
})
|
|
258
|
-
|
|
259
|
-
expect(wrapper.element.tagName).toBe('DIV')
|
|
260
|
-
expect(wrapper.vm).toBeDefined()
|
|
261
|
-
|
|
262
|
-
expect(wrapper.findAll('.dropdown-menu').length).toBe(1)
|
|
263
|
-
const $menu = wrapper.find('.dropdown-menu')
|
|
264
|
-
expect($menu.text()).not.toEqual('foobar')
|
|
265
|
-
|
|
266
|
-
wrapper.destroy()
|
|
267
|
-
})
|
|
268
|
-
|
|
269
|
-
it('has user supplied ID', async () => {
|
|
270
|
-
const wrapper = mount(BDropdown, {
|
|
271
|
-
attachTo: document.body,
|
|
272
|
-
propsData: {
|
|
273
|
-
id: 'test'
|
|
274
|
-
}
|
|
275
|
-
})
|
|
276
|
-
|
|
277
|
-
expect(wrapper.element.tagName).toBe('DIV')
|
|
278
|
-
expect(wrapper.vm).toBeDefined()
|
|
279
|
-
|
|
280
|
-
expect(wrapper.attributes('id')).toBeDefined()
|
|
281
|
-
expect(wrapper.attributes('id')).toEqual('test')
|
|
282
|
-
const wrapperId = wrapper.attributes('id')
|
|
283
|
-
|
|
284
|
-
expect(wrapper.findAll('button').length).toBe(1)
|
|
285
|
-
const $button = wrapper.find('button')
|
|
286
|
-
expect($button.attributes('id')).toEqual(`${wrapperId}__BV_toggle_`)
|
|
287
|
-
|
|
288
|
-
expect(wrapper.findAll('.dropdown-menu').length).toBe(1)
|
|
289
|
-
const $menu = wrapper.find('.dropdown-menu')
|
|
290
|
-
expect($menu.attributes('aria-labelledby')).toBeDefined()
|
|
291
|
-
expect($menu.attributes('aria-labelledby')).toEqual(`${wrapperId}__BV_toggle_`)
|
|
292
|
-
|
|
293
|
-
wrapper.destroy()
|
|
294
|
-
})
|
|
295
|
-
|
|
296
|
-
it('should not have "btn-group" class when block is true', async () => {
|
|
297
|
-
const wrapper = mount(BDropdown, {
|
|
298
|
-
attachTo: document.body,
|
|
299
|
-
propsData: {
|
|
300
|
-
block: true
|
|
301
|
-
}
|
|
302
|
-
})
|
|
303
|
-
|
|
304
|
-
expect(wrapper.classes()).not.toContain('btn-group')
|
|
305
|
-
|
|
306
|
-
wrapper.destroy()
|
|
307
|
-
})
|
|
308
|
-
|
|
309
|
-
it('should have "btn-group" and "gl-flex" classes when block and split are true', async () => {
|
|
310
|
-
const wrapper = mount(BDropdown, {
|
|
311
|
-
attachTo: document.body,
|
|
312
|
-
propsData: {
|
|
313
|
-
block: true,
|
|
314
|
-
split: true
|
|
315
|
-
}
|
|
316
|
-
})
|
|
317
|
-
|
|
318
|
-
expect(wrapper.classes()).toContain('btn-group')
|
|
319
|
-
expect(wrapper.classes()).toContain('gl-flex')
|
|
320
|
-
|
|
321
|
-
wrapper.destroy()
|
|
322
|
-
})
|
|
323
|
-
|
|
324
|
-
it('should have "dropdown-toggle-no-caret" class when no-caret is true', async () => {
|
|
325
|
-
const wrapper = mount(BDropdown, {
|
|
326
|
-
attachTo: document.body,
|
|
327
|
-
propsData: {
|
|
328
|
-
noCaret: true
|
|
329
|
-
}
|
|
330
|
-
})
|
|
331
|
-
|
|
332
|
-
expect(wrapper.find('.dropdown-toggle').classes()).toContain('dropdown-toggle-no-caret')
|
|
333
|
-
|
|
334
|
-
wrapper.destroy()
|
|
335
|
-
})
|
|
336
|
-
|
|
337
|
-
it('should not have "dropdown-toggle-no-caret" class when no-caret and split are true', async () => {
|
|
338
|
-
const wrapper = mount(BDropdown, {
|
|
339
|
-
attachTo: document.body,
|
|
340
|
-
propsData: {
|
|
341
|
-
noCaret: true,
|
|
342
|
-
split: true
|
|
343
|
-
}
|
|
344
|
-
})
|
|
345
|
-
|
|
346
|
-
expect(wrapper.find('.dropdown-toggle').classes()).not.toContain('dropdown-toggle-no-caret')
|
|
347
|
-
|
|
348
|
-
wrapper.destroy()
|
|
349
|
-
})
|
|
350
|
-
|
|
351
|
-
it('should have a toggle with the given toggle tag', async () => {
|
|
352
|
-
const wrapper = mount(BDropdown, {
|
|
353
|
-
attachTo: document.body,
|
|
354
|
-
propsData: {
|
|
355
|
-
toggleTag: 'div'
|
|
356
|
-
}
|
|
357
|
-
})
|
|
358
|
-
|
|
359
|
-
expect(wrapper.find('.dropdown-toggle').element.tagName).toBe('DIV')
|
|
360
|
-
|
|
361
|
-
wrapper.destroy()
|
|
362
|
-
})
|
|
363
|
-
|
|
364
|
-
it('should have attributes on toggle when "toggle-attrs" prop is set', async () => {
|
|
365
|
-
const wrapper = mount(BDropdown, {
|
|
366
|
-
attachTo: document.body,
|
|
367
|
-
propsData: {
|
|
368
|
-
toggleAttrs: { 'data-foo-bar': 'foo-bar' }
|
|
369
|
-
}
|
|
370
|
-
})
|
|
371
|
-
|
|
372
|
-
expect(wrapper.find('.dropdown-toggle').attributes('data-foo-bar')).toBe('foo-bar')
|
|
373
|
-
|
|
374
|
-
wrapper.destroy()
|
|
375
|
-
})
|
|
376
|
-
|
|
377
|
-
it('should have class dropup when prop dropup set', async () => {
|
|
378
|
-
const wrapper = mount(BDropdown, {
|
|
379
|
-
attachTo: document.body,
|
|
380
|
-
propsData: {
|
|
381
|
-
dropup: true
|
|
382
|
-
}
|
|
383
|
-
})
|
|
384
|
-
|
|
385
|
-
expect(wrapper.classes()).toContain('dropdown')
|
|
386
|
-
expect(wrapper.classes()).toContain('dropup')
|
|
387
|
-
expect(wrapper.classes()).not.toContain('show')
|
|
388
|
-
expect(wrapper.find('.dropdown-menu').classes()).not.toContain('show')
|
|
389
|
-
|
|
390
|
-
wrapper.vm.show()
|
|
391
|
-
await waitNT(wrapper.vm)
|
|
392
|
-
await waitRAF()
|
|
393
|
-
|
|
394
|
-
expect(wrapper.classes()).toContain('dropdown')
|
|
395
|
-
expect(wrapper.classes()).toContain('dropup')
|
|
396
|
-
expect(wrapper.classes()).toContain('show')
|
|
397
|
-
expect(wrapper.find('.dropdown-menu').classes()).toContain('show')
|
|
398
|
-
|
|
399
|
-
wrapper.destroy()
|
|
400
|
-
})
|
|
401
|
-
|
|
402
|
-
it('should have class dropright when prop dropright set', async () => {
|
|
403
|
-
const wrapper = mount(BDropdown, {
|
|
404
|
-
attachTo: document.body,
|
|
405
|
-
propsData: {
|
|
406
|
-
dropright: true
|
|
407
|
-
}
|
|
408
|
-
})
|
|
409
|
-
|
|
410
|
-
expect(wrapper.classes()).toContain('dropdown')
|
|
411
|
-
expect(wrapper.classes()).toContain('dropright')
|
|
412
|
-
expect(wrapper.classes()).not.toContain('show')
|
|
413
|
-
expect(wrapper.find('.dropdown-menu').classes()).not.toContain('show')
|
|
414
|
-
|
|
415
|
-
wrapper.vm.show()
|
|
416
|
-
await waitNT(wrapper.vm)
|
|
417
|
-
await waitRAF()
|
|
418
|
-
|
|
419
|
-
expect(wrapper.classes()).toContain('dropdown')
|
|
420
|
-
expect(wrapper.classes()).toContain('dropright')
|
|
421
|
-
expect(wrapper.classes()).toContain('show')
|
|
422
|
-
expect(wrapper.find('.dropdown-menu').classes()).toContain('show')
|
|
423
|
-
|
|
424
|
-
wrapper.destroy()
|
|
425
|
-
})
|
|
426
|
-
|
|
427
|
-
it('should have class dropleft when prop dropleft set', async () => {
|
|
428
|
-
const wrapper = mount(BDropdown, {
|
|
429
|
-
attachTo: document.body,
|
|
430
|
-
propsData: {
|
|
431
|
-
dropleft: true
|
|
432
|
-
}
|
|
433
|
-
})
|
|
434
|
-
|
|
435
|
-
expect(wrapper.classes()).toContain('dropdown')
|
|
436
|
-
expect(wrapper.classes()).toContain('dropleft')
|
|
437
|
-
expect(wrapper.classes()).not.toContain('show')
|
|
438
|
-
expect(wrapper.find('.dropdown-menu').classes()).not.toContain('show')
|
|
439
|
-
|
|
440
|
-
wrapper.vm.show()
|
|
441
|
-
await waitNT(wrapper.vm)
|
|
442
|
-
await waitRAF()
|
|
443
|
-
|
|
444
|
-
expect(wrapper.classes()).toContain('dropdown')
|
|
445
|
-
expect(wrapper.classes()).toContain('dropleft')
|
|
446
|
-
expect(wrapper.classes()).toContain('show')
|
|
447
|
-
expect(wrapper.find('.dropdown-menu').classes()).toContain('show')
|
|
448
|
-
|
|
449
|
-
wrapper.destroy()
|
|
450
|
-
})
|
|
451
|
-
|
|
452
|
-
it('split should have class specified in split class property', () => {
|
|
453
|
-
const splitClass = 'custom-button-class'
|
|
454
|
-
const wrapper = mount(BDropdown, {
|
|
455
|
-
attachTo: document.body,
|
|
456
|
-
propsData: {
|
|
457
|
-
splitClass,
|
|
458
|
-
split: true
|
|
459
|
-
}
|
|
460
|
-
})
|
|
461
|
-
|
|
462
|
-
const $buttons = wrapper.findAll('button')
|
|
463
|
-
const $split = $buttons.at(0)
|
|
464
|
-
expect($split.classes()).toContain(splitClass)
|
|
465
|
-
|
|
466
|
-
wrapper.destroy()
|
|
467
|
-
})
|
|
468
|
-
|
|
469
|
-
it('menu should have class dropdown-menu-right when prop right set', async () => {
|
|
470
|
-
const wrapper = mount(BDropdown, {
|
|
471
|
-
attachTo: document.body,
|
|
472
|
-
propsData: {
|
|
473
|
-
right: true
|
|
474
|
-
}
|
|
475
|
-
})
|
|
476
|
-
|
|
477
|
-
expect(wrapper.classes()).toContain('dropdown')
|
|
478
|
-
expect(wrapper.classes()).not.toContain('show')
|
|
479
|
-
expect(wrapper.find('.dropdown-menu').classes()).toContain('dropdown-menu-right')
|
|
480
|
-
expect(wrapper.find('.dropdown-menu').classes()).not.toContain('show')
|
|
481
|
-
|
|
482
|
-
wrapper.vm.show()
|
|
483
|
-
await waitNT(wrapper.vm)
|
|
484
|
-
await waitRAF()
|
|
485
|
-
|
|
486
|
-
expect(wrapper.classes()).toContain('dropdown')
|
|
487
|
-
expect(wrapper.classes()).toContain('show')
|
|
488
|
-
expect(wrapper.find('.dropdown-menu').classes()).toContain('dropdown-menu-right')
|
|
489
|
-
expect(wrapper.find('.dropdown-menu').classes()).toContain('show')
|
|
490
|
-
|
|
491
|
-
wrapper.destroy()
|
|
492
|
-
})
|
|
493
|
-
|
|
494
|
-
it('split mode emits click event when split button clicked', async () => {
|
|
495
|
-
const wrapper = mount(BDropdown, {
|
|
496
|
-
attachTo: document.body,
|
|
497
|
-
propsData: {
|
|
498
|
-
split: true
|
|
499
|
-
}
|
|
500
|
-
})
|
|
501
|
-
|
|
502
|
-
expect(wrapper.element.tagName).toBe('DIV')
|
|
503
|
-
expect(wrapper.vm).toBeDefined()
|
|
504
|
-
expect(wrapper.emitted('click')).toBeUndefined()
|
|
505
|
-
|
|
506
|
-
expect(wrapper.findAll('button').length).toBe(2)
|
|
507
|
-
const $buttons = wrapper.findAll('button')
|
|
508
|
-
const $split = $buttons.at(0)
|
|
509
|
-
|
|
510
|
-
await $split.trigger('click')
|
|
511
|
-
|
|
512
|
-
expect(wrapper.emitted('click')).toBeDefined()
|
|
513
|
-
expect(wrapper.emitted('click').length).toBe(1)
|
|
514
|
-
|
|
515
|
-
wrapper.destroy()
|
|
516
|
-
})
|
|
517
|
-
|
|
518
|
-
it('dropdown opens and closes', async () => {
|
|
519
|
-
const App = {
|
|
520
|
-
props: {
|
|
521
|
-
disabled: { type: Boolean, default: false }
|
|
522
|
-
},
|
|
523
|
-
render(h) {
|
|
524
|
-
const { disabled } = this
|
|
525
|
-
|
|
526
|
-
return h('div', { attrs: { id: 'container' } }, [
|
|
527
|
-
h(BDropdown, { props: { id: 'test', disabled } }, [h(BDropdownItem, 'item')]),
|
|
528
|
-
h('input', { attrs: { id: 'input' } })
|
|
529
|
-
])
|
|
530
|
-
}
|
|
531
|
-
}
|
|
532
|
-
|
|
533
|
-
const wrapper = mount(App, {
|
|
534
|
-
attachTo: document.body
|
|
535
|
-
})
|
|
536
|
-
|
|
537
|
-
expect(wrapper.vm).toBeDefined()
|
|
538
|
-
|
|
539
|
-
expect(wrapper.findAll('.dropdown').length).toBe(1)
|
|
540
|
-
expect(wrapper.findAll('.dropdown-toggle').length).toBe(1)
|
|
541
|
-
expect(wrapper.findAll('.dropdown-menu').length).toBe(1)
|
|
542
|
-
expect(wrapper.findAll('.dropdown-menu .dropdown-item').length).toBe(1)
|
|
543
|
-
|
|
544
|
-
const $container = wrapper.find('#container')
|
|
545
|
-
const $dropdown = wrapper.findComponent('.dropdown')
|
|
546
|
-
const $toggle = wrapper.find('.dropdown-toggle')
|
|
547
|
-
const $menu = wrapper.find('.dropdown-menu')
|
|
548
|
-
const $item = wrapper.find('.dropdown-item')
|
|
549
|
-
const $input = wrapper.find('#input')
|
|
550
|
-
|
|
551
|
-
expect($dropdown.vm).toBeDefined()
|
|
552
|
-
|
|
553
|
-
expect($toggle.attributes('aria-haspopup')).toBeDefined()
|
|
554
|
-
expect($toggle.attributes('aria-haspopup')).toEqual('menu')
|
|
555
|
-
expect($toggle.attributes('aria-expanded')).toBeDefined()
|
|
556
|
-
expect($toggle.attributes('aria-expanded')).toEqual('false')
|
|
557
|
-
expect($dropdown.classes()).not.toContain('show')
|
|
558
|
-
|
|
559
|
-
// Open menu by clicking toggle
|
|
560
|
-
await $toggle.trigger('click')
|
|
561
|
-
await waitRAF()
|
|
562
|
-
await waitNT(wrapper.vm)
|
|
563
|
-
await waitRAF()
|
|
564
|
-
await waitNT(wrapper.vm)
|
|
565
|
-
|
|
566
|
-
expect($toggle.attributes('aria-haspopup')).toBeDefined()
|
|
567
|
-
expect($toggle.attributes('aria-haspopup')).toEqual('menu')
|
|
568
|
-
expect($toggle.attributes('aria-expanded')).toBeDefined()
|
|
569
|
-
expect($toggle.attributes('aria-expanded')).toEqual('true')
|
|
570
|
-
expect($dropdown.classes()).toContain('show')
|
|
571
|
-
expect(document.activeElement).toBe($menu.element)
|
|
572
|
-
|
|
573
|
-
// Close menu by clicking toggle again
|
|
574
|
-
await $toggle.trigger('click')
|
|
575
|
-
await waitRAF()
|
|
576
|
-
await waitNT(wrapper.vm)
|
|
577
|
-
await waitRAF()
|
|
578
|
-
await waitNT(wrapper.vm)
|
|
579
|
-
expect($toggle.attributes('aria-expanded')).toEqual('false')
|
|
580
|
-
expect($dropdown.classes()).not.toContain('show')
|
|
581
|
-
|
|
582
|
-
// Open menu again
|
|
583
|
-
await $toggle.trigger('click')
|
|
584
|
-
await waitRAF()
|
|
585
|
-
await waitNT(wrapper.vm)
|
|
586
|
-
await waitRAF()
|
|
587
|
-
await waitNT(wrapper.vm)
|
|
588
|
-
expect($toggle.attributes('aria-expanded')).toEqual('true')
|
|
589
|
-
expect(document.activeElement).toBe($menu.element)
|
|
590
|
-
expect($dropdown.classes()).toContain('show')
|
|
591
|
-
|
|
592
|
-
// Close by clicking dropdown-item
|
|
593
|
-
await $item.trigger('click')
|
|
594
|
-
await waitRAF()
|
|
595
|
-
await waitNT(wrapper.vm)
|
|
596
|
-
await waitRAF()
|
|
597
|
-
await waitNT(wrapper.vm)
|
|
598
|
-
expect($toggle.attributes('aria-expanded')).toEqual('false')
|
|
599
|
-
expect($dropdown.classes()).not.toContain('show')
|
|
600
|
-
|
|
601
|
-
// Open menu via ´.show()´ method
|
|
602
|
-
$dropdown.vm.show()
|
|
603
|
-
await waitRAF()
|
|
604
|
-
await waitNT(wrapper.vm)
|
|
605
|
-
await waitRAF()
|
|
606
|
-
await waitNT(wrapper.vm)
|
|
607
|
-
expect($toggle.attributes('aria-expanded')).toEqual('true')
|
|
608
|
-
expect($dropdown.classes()).toContain('show')
|
|
609
|
-
|
|
610
|
-
// Close menu via ´.hide()´ method
|
|
611
|
-
$dropdown.vm.hide()
|
|
612
|
-
await waitNT(wrapper.vm)
|
|
613
|
-
await waitRAF()
|
|
614
|
-
await waitNT(wrapper.vm)
|
|
615
|
-
await waitRAF()
|
|
616
|
-
await waitNT(wrapper.vm)
|
|
617
|
-
expect($toggle.attributes('aria-expanded')).toEqual('false')
|
|
618
|
-
expect($dropdown.classes()).not.toContain('show')
|
|
619
|
-
|
|
620
|
-
// Open menu via ´.show()´ method again
|
|
621
|
-
$dropdown.vm.show()
|
|
622
|
-
await waitNT(wrapper.vm)
|
|
623
|
-
await waitRAF()
|
|
624
|
-
await waitNT(wrapper.vm)
|
|
625
|
-
await waitRAF()
|
|
626
|
-
await waitNT(wrapper.vm)
|
|
627
|
-
expect($toggle.attributes('aria-expanded')).toEqual('true')
|
|
628
|
-
expect($dropdown.classes()).toContain('show')
|
|
629
|
-
expect(document.activeElement).toBe($menu.element)
|
|
630
|
-
|
|
631
|
-
// Close menu by moving focus away from menu
|
|
632
|
-
await $input.trigger('focusin')
|
|
633
|
-
await waitRAF()
|
|
634
|
-
await waitNT(wrapper.vm)
|
|
635
|
-
await waitRAF()
|
|
636
|
-
await waitNT(wrapper.vm)
|
|
637
|
-
expect($dropdown.classes()).not.toContain('show')
|
|
638
|
-
expect($toggle.attributes('aria-expanded')).toEqual('false')
|
|
639
|
-
|
|
640
|
-
// Open menu via keydown.down event on toggle button
|
|
641
|
-
await $toggle.trigger('keydown.down')
|
|
642
|
-
await waitRAF()
|
|
643
|
-
await waitNT(wrapper.vm)
|
|
644
|
-
await waitRAF()
|
|
645
|
-
await waitNT(wrapper.vm)
|
|
646
|
-
expect($dropdown.classes()).toContain('show')
|
|
647
|
-
expect($toggle.attributes('aria-expanded')).toEqual('true')
|
|
648
|
-
expect(document.activeElement).toBe($menu.element)
|
|
649
|
-
|
|
650
|
-
// Close menu by clicking outside
|
|
651
|
-
await $container.trigger('click')
|
|
652
|
-
await waitRAF()
|
|
653
|
-
await waitNT(wrapper.vm)
|
|
654
|
-
await waitRAF()
|
|
655
|
-
await waitNT(wrapper.vm)
|
|
656
|
-
expect($dropdown.classes()).not.toContain('show')
|
|
657
|
-
expect($toggle.attributes('aria-expanded')).toEqual('false')
|
|
658
|
-
|
|
659
|
-
// Open menu via ´.show()´ method again
|
|
660
|
-
$dropdown.vm.show()
|
|
661
|
-
await waitNT(wrapper.vm)
|
|
662
|
-
await waitRAF()
|
|
663
|
-
await waitNT(wrapper.vm)
|
|
664
|
-
await waitRAF()
|
|
665
|
-
await waitNT(wrapper.vm)
|
|
666
|
-
expect($dropdown.classes()).toContain('show')
|
|
667
|
-
expect($toggle.attributes('aria-expanded')).toEqual('true')
|
|
668
|
-
|
|
669
|
-
// Close menu by keydown.esc event on dropdown item
|
|
670
|
-
await $item.trigger('keydown.esc')
|
|
671
|
-
await waitRAF()
|
|
672
|
-
await waitNT(wrapper.vm)
|
|
673
|
-
await waitRAF()
|
|
674
|
-
await waitNT(wrapper.vm)
|
|
675
|
-
expect($dropdown.classes()).not.toContain('show')
|
|
676
|
-
expect($toggle.attributes('aria-expanded')).toEqual('false')
|
|
677
|
-
|
|
678
|
-
// Open menu via ´.show()´ method again
|
|
679
|
-
$dropdown.vm.show()
|
|
680
|
-
await waitNT(wrapper.vm)
|
|
681
|
-
await waitRAF()
|
|
682
|
-
await waitNT(wrapper.vm)
|
|
683
|
-
await waitRAF()
|
|
684
|
-
await waitNT(wrapper.vm)
|
|
685
|
-
expect($dropdown.classes()).toContain('show')
|
|
686
|
-
expect($toggle.attributes('aria-expanded')).toEqual('true')
|
|
687
|
-
|
|
688
|
-
// When disabled changes to true, menu should close
|
|
689
|
-
await wrapper.setProps({ disabled: true })
|
|
690
|
-
await waitRAF()
|
|
691
|
-
await waitNT(wrapper.vm)
|
|
692
|
-
await waitRAF()
|
|
693
|
-
await waitNT(wrapper.vm)
|
|
694
|
-
expect($dropdown.classes()).not.toContain('show')
|
|
695
|
-
expect($toggle.attributes('aria-expanded')).toEqual('false')
|
|
696
|
-
|
|
697
|
-
// When disabled, show() wont open menu
|
|
698
|
-
$dropdown.vm.show()
|
|
699
|
-
await waitNT(wrapper.vm)
|
|
700
|
-
await waitRAF()
|
|
701
|
-
await waitNT(wrapper.vm)
|
|
702
|
-
await waitRAF()
|
|
703
|
-
await waitNT(wrapper.vm)
|
|
704
|
-
expect($dropdown.classes()).not.toContain('show')
|
|
705
|
-
expect($toggle.attributes('aria-expanded')).toEqual('false')
|
|
706
|
-
|
|
707
|
-
// Re-enable dropdown and open it
|
|
708
|
-
await wrapper.setProps({ disabled: false })
|
|
709
|
-
await waitRAF()
|
|
710
|
-
$dropdown.vm.show()
|
|
711
|
-
await waitNT(wrapper.vm)
|
|
712
|
-
await waitRAF()
|
|
713
|
-
await waitNT(wrapper.vm)
|
|
714
|
-
await waitRAF()
|
|
715
|
-
await waitNT(wrapper.vm)
|
|
716
|
-
expect($dropdown.classes()).toContain('show')
|
|
717
|
-
expect($toggle.attributes('aria-expanded')).toEqual('true')
|
|
718
|
-
|
|
719
|
-
// Should close on root emit when argument is not self
|
|
720
|
-
wrapper.vm.$root.$emit('bv::dropdown::shown')
|
|
721
|
-
await waitRAF()
|
|
722
|
-
await waitNT(wrapper.vm)
|
|
723
|
-
await waitRAF()
|
|
724
|
-
await waitNT(wrapper.vm)
|
|
725
|
-
expect($dropdown.classes()).not.toContain('show')
|
|
726
|
-
expect($toggle.attributes('aria-expanded')).toEqual('false')
|
|
727
|
-
|
|
728
|
-
wrapper.destroy()
|
|
729
|
-
})
|
|
730
|
-
|
|
731
|
-
it('preventDefault() works on show event', async () => {
|
|
732
|
-
let prevent = true
|
|
733
|
-
const wrapper = mount(BDropdown, {
|
|
734
|
-
attachTo: document.body,
|
|
735
|
-
listeners: {
|
|
736
|
-
show: bvEvent => {
|
|
737
|
-
if (prevent) {
|
|
738
|
-
bvEvent.preventDefault()
|
|
739
|
-
}
|
|
740
|
-
}
|
|
741
|
-
}
|
|
742
|
-
})
|
|
743
|
-
|
|
744
|
-
expect(wrapper.element.tagName).toBe('DIV')
|
|
745
|
-
expect(wrapper.vm).toBeDefined()
|
|
746
|
-
await waitNT(wrapper.vm)
|
|
747
|
-
await waitRAF()
|
|
748
|
-
|
|
749
|
-
expect(wrapper.emitted('show')).toBeUndefined()
|
|
750
|
-
|
|
751
|
-
expect(wrapper.findAll('button').length).toBe(1)
|
|
752
|
-
expect(wrapper.findAll('.dropdown').length).toBe(1)
|
|
753
|
-
const $toggle = wrapper.find('button')
|
|
754
|
-
const $dropdown = wrapper.find('.dropdown')
|
|
755
|
-
|
|
756
|
-
expect($toggle.attributes('aria-haspopup')).toBeDefined()
|
|
757
|
-
expect($toggle.attributes('aria-haspopup')).toEqual('menu')
|
|
758
|
-
expect($toggle.attributes('aria-expanded')).toBeDefined()
|
|
759
|
-
expect($toggle.attributes('aria-expanded')).toEqual('false')
|
|
760
|
-
expect($dropdown.classes()).not.toContain('show')
|
|
761
|
-
|
|
762
|
-
// Should prevent menu from opening
|
|
763
|
-
await $toggle.trigger('click')
|
|
764
|
-
await waitRAF()
|
|
765
|
-
expect(wrapper.emitted('show')).toBeDefined()
|
|
766
|
-
expect(wrapper.emitted('show').length).toBe(1)
|
|
767
|
-
expect($toggle.attributes('aria-haspopup')).toBeDefined()
|
|
768
|
-
expect($toggle.attributes('aria-haspopup')).toEqual('menu')
|
|
769
|
-
expect($toggle.attributes('aria-expanded')).toBeDefined()
|
|
770
|
-
expect($toggle.attributes('aria-expanded')).toEqual('false')
|
|
771
|
-
expect($dropdown.classes()).not.toContain('show')
|
|
772
|
-
|
|
773
|
-
// Allow menu to open
|
|
774
|
-
prevent = false
|
|
775
|
-
await $toggle.trigger('click')
|
|
776
|
-
await waitRAF()
|
|
777
|
-
expect(wrapper.emitted('show')).toBeDefined()
|
|
778
|
-
expect(wrapper.emitted('show').length).toBe(2)
|
|
779
|
-
expect($toggle.attributes('aria-haspopup')).toBeDefined()
|
|
780
|
-
expect($toggle.attributes('aria-haspopup')).toEqual('menu')
|
|
781
|
-
expect($toggle.attributes('aria-expanded')).toBeDefined()
|
|
782
|
-
expect($toggle.attributes('aria-expanded')).toEqual('true')
|
|
783
|
-
expect($dropdown.classes()).toContain('show')
|
|
784
|
-
|
|
785
|
-
wrapper.destroy()
|
|
786
|
-
})
|
|
787
|
-
|
|
788
|
-
it('Keyboard navigation works when open', async () => {
|
|
789
|
-
const App = {
|
|
790
|
-
render(h) {
|
|
791
|
-
return h('div', [
|
|
792
|
-
h(BDropdown, { props: { id: 'test' } }, [
|
|
793
|
-
h(BDropdownItem, { attrs: { id: 'item-1' } }, 'item'),
|
|
794
|
-
h(BDropdownItem, { attrs: { id: 'item-2' } }, 'item'),
|
|
795
|
-
h(BDropdownItem, { attrs: { id: 'item-3' }, props: { disabled: true } }, 'item'),
|
|
796
|
-
h(BDropdownItem, { attrs: { id: 'item-4' } }, 'item')
|
|
797
|
-
])
|
|
798
|
-
])
|
|
799
|
-
}
|
|
800
|
-
}
|
|
801
|
-
|
|
802
|
-
const wrapper = mount(App, {
|
|
803
|
-
attachTo: document.body
|
|
804
|
-
})
|
|
805
|
-
|
|
806
|
-
expect(wrapper.vm).toBeDefined()
|
|
807
|
-
await waitNT(wrapper.vm)
|
|
808
|
-
await waitRAF()
|
|
809
|
-
await waitNT(wrapper.vm)
|
|
810
|
-
await waitRAF()
|
|
811
|
-
|
|
812
|
-
expect(wrapper.findAll('.dropdown').length).toBe(1)
|
|
813
|
-
expect(wrapper.findAll('.dropdown-toggle').length).toBe(1)
|
|
814
|
-
expect(wrapper.findAll('.dropdown-menu').length).toBe(1)
|
|
815
|
-
expect(wrapper.findAll('.dropdown-menu .dropdown-item').length).toBe(4)
|
|
816
|
-
|
|
817
|
-
const $toggle = wrapper.find('.dropdown-toggle')
|
|
818
|
-
const $menu = wrapper.find('.dropdown-menu')
|
|
819
|
-
const $items = wrapper.findAll('.dropdown-item')
|
|
820
|
-
|
|
821
|
-
// Expect menu to be closed
|
|
822
|
-
expect($toggle.attributes('aria-expanded')).toBeDefined()
|
|
823
|
-
expect($toggle.attributes('aria-expanded')).toEqual('false')
|
|
824
|
-
|
|
825
|
-
// Trigger keydown.down on toggle to open menu
|
|
826
|
-
await $toggle.trigger('keydown.down')
|
|
827
|
-
await waitRAF()
|
|
828
|
-
await waitNT(wrapper.vm)
|
|
829
|
-
await waitRAF()
|
|
830
|
-
await waitNT(wrapper.vm)
|
|
831
|
-
await waitRAF()
|
|
832
|
-
expect($toggle.attributes('aria-expanded')).toEqual('true')
|
|
833
|
-
expect(document.activeElement).toBe($menu.element)
|
|
834
|
-
|
|
835
|
-
// Move to first menu item
|
|
836
|
-
await $menu.trigger('keydown.down')
|
|
837
|
-
await waitRAF()
|
|
838
|
-
await waitNT(wrapper.vm)
|
|
839
|
-
await waitRAF()
|
|
840
|
-
await waitNT(wrapper.vm)
|
|
841
|
-
await waitRAF()
|
|
842
|
-
expect(document.activeElement).toBe($items.at(0).element)
|
|
843
|
-
|
|
844
|
-
// Move to second menu item
|
|
845
|
-
await $items.at(0).trigger('keydown.down')
|
|
846
|
-
await waitRAF()
|
|
847
|
-
await waitNT(wrapper.vm)
|
|
848
|
-
await waitRAF()
|
|
849
|
-
await waitNT(wrapper.vm)
|
|
850
|
-
await waitRAF()
|
|
851
|
-
expect(document.activeElement).toBe($items.at(1).element)
|
|
852
|
-
|
|
853
|
-
// Move down to next menu item (should skip disabled item)
|
|
854
|
-
await $items.at(1).trigger('keydown.down')
|
|
855
|
-
await waitRAF()
|
|
856
|
-
await waitNT(wrapper.vm)
|
|
857
|
-
await waitRAF()
|
|
858
|
-
await waitNT(wrapper.vm)
|
|
859
|
-
await waitRAF()
|
|
860
|
-
expect(document.activeElement).toBe($items.at(3).element)
|
|
861
|
-
|
|
862
|
-
// Move down to next menu item (should remain on same item)
|
|
863
|
-
await $items.at(3).trigger('keydown.down')
|
|
864
|
-
await waitRAF()
|
|
865
|
-
await waitNT(wrapper.vm)
|
|
866
|
-
await waitRAF()
|
|
867
|
-
await waitNT(wrapper.vm)
|
|
868
|
-
await waitRAF()
|
|
869
|
-
expect(document.activeElement).toBe($items.at(3).element)
|
|
870
|
-
|
|
871
|
-
// Move up to previous menu item (should skip disabled item)
|
|
872
|
-
await $items.at(3).trigger('keydown.up')
|
|
873
|
-
await waitRAF()
|
|
874
|
-
await waitNT(wrapper.vm)
|
|
875
|
-
await waitRAF()
|
|
876
|
-
await waitNT(wrapper.vm)
|
|
877
|
-
await waitRAF()
|
|
878
|
-
expect(document.activeElement).toBe($items.at(1).element)
|
|
879
|
-
|
|
880
|
-
// Move up to previous menu item
|
|
881
|
-
await $items.at(1).trigger('keydown.up')
|
|
882
|
-
await waitRAF()
|
|
883
|
-
await waitNT(wrapper.vm)
|
|
884
|
-
await waitRAF()
|
|
885
|
-
await waitNT(wrapper.vm)
|
|
886
|
-
await waitRAF()
|
|
887
|
-
expect(document.activeElement).toBe($items.at(0).element)
|
|
888
|
-
|
|
889
|
-
// Move up to previous menu item (should remain on first item)
|
|
890
|
-
await $items.at(0).trigger('keydown.up')
|
|
891
|
-
await waitRAF()
|
|
892
|
-
await waitNT(wrapper.vm)
|
|
893
|
-
await waitRAF()
|
|
894
|
-
await waitNT(wrapper.vm)
|
|
895
|
-
await waitRAF()
|
|
896
|
-
expect(document.activeElement).toBe($items.at(0).element)
|
|
897
|
-
|
|
898
|
-
wrapper.destroy()
|
|
899
|
-
})
|
|
900
|
-
|
|
901
|
-
it('when boundary not set should not have class position-static', async () => {
|
|
902
|
-
const wrapper = mount(BDropdown, {
|
|
903
|
-
attachTo: document.body
|
|
904
|
-
})
|
|
905
|
-
expect(wrapper.element.tagName).toBe('DIV')
|
|
906
|
-
expect(wrapper.vm).toBeDefined()
|
|
907
|
-
await waitNT(wrapper.vm)
|
|
908
|
-
expect(wrapper.classes()).not.toContain('gl-static')
|
|
909
|
-
wrapper.destroy()
|
|
910
|
-
})
|
|
911
|
-
|
|
912
|
-
it('when boundary set to viewport should have class position-static', async () => {
|
|
913
|
-
const wrapper = mount(BDropdown, {
|
|
914
|
-
attachTo: document.body,
|
|
915
|
-
propsData: {
|
|
916
|
-
boundary: 'viewport'
|
|
917
|
-
}
|
|
918
|
-
})
|
|
919
|
-
expect(wrapper.element.tagName).toBe('DIV')
|
|
920
|
-
expect(wrapper.vm).toBeDefined()
|
|
921
|
-
await waitNT(wrapper.vm)
|
|
922
|
-
expect(wrapper.classes()).toContain('gl-static')
|
|
923
|
-
wrapper.destroy()
|
|
924
|
-
})
|
|
925
|
-
|
|
926
|
-
it('toggle button size works', async () => {
|
|
927
|
-
const wrapper = mount(BDropdown, {
|
|
928
|
-
attachTo: document.body,
|
|
929
|
-
propsData: {
|
|
930
|
-
size: 'lg'
|
|
931
|
-
}
|
|
932
|
-
})
|
|
933
|
-
|
|
934
|
-
expect(wrapper.element.tagName).toBe('DIV')
|
|
935
|
-
expect(wrapper.vm).toBeDefined()
|
|
936
|
-
|
|
937
|
-
expect(wrapper.findAll('.btn').length).toBe(1)
|
|
938
|
-
const $toggle = wrapper.find('.btn')
|
|
939
|
-
|
|
940
|
-
expect($toggle.element.tagName).toBe('BUTTON')
|
|
941
|
-
expect($toggle.classes()).toContain('btn-lg')
|
|
942
|
-
|
|
943
|
-
wrapper.destroy()
|
|
944
|
-
})
|
|
945
|
-
|
|
946
|
-
it('split button size works', async () => {
|
|
947
|
-
const wrapper = mount(BDropdown, {
|
|
948
|
-
attachTo: document.body,
|
|
949
|
-
propsData: {
|
|
950
|
-
split: true,
|
|
951
|
-
size: 'lg'
|
|
952
|
-
}
|
|
953
|
-
})
|
|
954
|
-
|
|
955
|
-
expect(wrapper.element.tagName).toBe('DIV')
|
|
956
|
-
expect(wrapper.vm).toBeDefined()
|
|
957
|
-
|
|
958
|
-
expect(wrapper.findAll('.btn').length).toBe(2)
|
|
959
|
-
const $split = wrapper.findAll('.btn').at(0)
|
|
960
|
-
const $toggle = wrapper.findAll('.btn').at(1)
|
|
961
|
-
|
|
962
|
-
expect($split.element.tagName).toBe('BUTTON')
|
|
963
|
-
expect($split.classes()).toContain('btn-lg')
|
|
964
|
-
expect($toggle.element.tagName).toBe('BUTTON')
|
|
965
|
-
expect($toggle.classes()).toContain('btn-lg')
|
|
966
|
-
|
|
967
|
-
wrapper.destroy()
|
|
968
|
-
})
|
|
969
|
-
|
|
970
|
-
it('toggle button content works', async () => {
|
|
971
|
-
const wrapper = mount(BDropdown, {
|
|
972
|
-
attachTo: document.body,
|
|
973
|
-
propsData: {
|
|
974
|
-
text: 'foobar'
|
|
975
|
-
}
|
|
976
|
-
})
|
|
977
|
-
|
|
978
|
-
expect(wrapper.element.tagName).toBe('DIV')
|
|
979
|
-
expect(wrapper.vm).toBeDefined()
|
|
980
|
-
|
|
981
|
-
expect(wrapper.findAll('.btn').length).toBe(1)
|
|
982
|
-
const $toggle = wrapper.find('.btn')
|
|
983
|
-
|
|
984
|
-
expect($toggle.element.tagName).toBe('BUTTON')
|
|
985
|
-
expect($toggle.text()).toEqual('foobar')
|
|
986
|
-
|
|
987
|
-
wrapper.destroy()
|
|
988
|
-
})
|
|
989
|
-
|
|
990
|
-
it('split button content works', async () => {
|
|
991
|
-
const wrapper = mount(BDropdown, {
|
|
992
|
-
attachTo: document.body,
|
|
993
|
-
propsData: {
|
|
994
|
-
split: true,
|
|
995
|
-
text: 'foobar'
|
|
996
|
-
}
|
|
997
|
-
})
|
|
998
|
-
|
|
999
|
-
expect(wrapper.element.tagName).toBe('DIV')
|
|
1000
|
-
expect(wrapper.vm).toBeDefined()
|
|
1001
|
-
|
|
1002
|
-
expect(wrapper.findAll('.btn').length).toBe(2)
|
|
1003
|
-
const $split = wrapper.findAll('.btn').at(0)
|
|
1004
|
-
|
|
1005
|
-
expect($split.element.tagName).toBe('BUTTON')
|
|
1006
|
-
expect($split.text()).toEqual('foobar')
|
|
1007
|
-
|
|
1008
|
-
wrapper.destroy()
|
|
1009
|
-
})
|
|
1010
|
-
|
|
1011
|
-
it('variant works on non-split button', async () => {
|
|
1012
|
-
const wrapper = mount(BDropdown, {
|
|
1013
|
-
attachTo: document.body,
|
|
1014
|
-
propsData: {
|
|
1015
|
-
variant: 'primary'
|
|
1016
|
-
}
|
|
1017
|
-
})
|
|
1018
|
-
|
|
1019
|
-
expect(wrapper.element.tagName).toBe('DIV')
|
|
1020
|
-
expect(wrapper.vm).toBeDefined()
|
|
1021
|
-
|
|
1022
|
-
expect(wrapper.findAll('.btn').length).toBe(1)
|
|
1023
|
-
const $toggle = wrapper.find('.btn')
|
|
1024
|
-
|
|
1025
|
-
expect($toggle.element.tagName).toBe('BUTTON')
|
|
1026
|
-
expect($toggle.classes()).toContain('btn-primary')
|
|
1027
|
-
expect($toggle.classes()).not.toContain('btn-secondary')
|
|
1028
|
-
|
|
1029
|
-
wrapper.destroy()
|
|
1030
|
-
})
|
|
1031
|
-
|
|
1032
|
-
it('variant works on split button', async () => {
|
|
1033
|
-
const wrapper = mount(BDropdown, {
|
|
1034
|
-
attachTo: document.body,
|
|
1035
|
-
propsData: {
|
|
1036
|
-
split: true,
|
|
1037
|
-
variant: 'primary'
|
|
1038
|
-
}
|
|
1039
|
-
})
|
|
1040
|
-
|
|
1041
|
-
expect(wrapper.element.tagName).toBe('DIV')
|
|
1042
|
-
expect(wrapper.vm).toBeDefined()
|
|
1043
|
-
|
|
1044
|
-
expect(wrapper.findAll('.btn').length).toBe(2)
|
|
1045
|
-
const $split = wrapper.findAll('.btn').at(0)
|
|
1046
|
-
const $toggle = wrapper.findAll('.btn').at(1)
|
|
1047
|
-
|
|
1048
|
-
expect($split.element.tagName).toBe('BUTTON')
|
|
1049
|
-
expect($split.classes()).toContain('btn-primary')
|
|
1050
|
-
expect($split.classes()).not.toContain('btn-secondary')
|
|
1051
|
-
|
|
1052
|
-
expect($toggle.element.tagName).toBe('BUTTON')
|
|
1053
|
-
expect($toggle.classes()).toContain('btn-primary')
|
|
1054
|
-
expect($toggle.classes()).not.toContain('btn-secondary')
|
|
1055
|
-
|
|
1056
|
-
// Change split button variant
|
|
1057
|
-
await wrapper.setProps({
|
|
1058
|
-
splitVariant: 'danger'
|
|
1059
|
-
})
|
|
1060
|
-
expect($split.classes()).toContain('btn-danger')
|
|
1061
|
-
expect($toggle.classes()).toContain('btn-primary')
|
|
1062
|
-
|
|
1063
|
-
wrapper.destroy()
|
|
1064
|
-
})
|
|
1065
|
-
|
|
1066
|
-
it('split mode has href when prop split-href set', async () => {
|
|
1067
|
-
const wrapper = mount(BDropdown, {
|
|
1068
|
-
attachTo: document.body,
|
|
1069
|
-
propsData: {
|
|
1070
|
-
split: true,
|
|
1071
|
-
splitHref: '/foo'
|
|
1072
|
-
}
|
|
1073
|
-
})
|
|
1074
|
-
|
|
1075
|
-
expect(wrapper.element.tagName).toBe('DIV')
|
|
1076
|
-
expect(wrapper.vm).toBeDefined()
|
|
1077
|
-
|
|
1078
|
-
expect(wrapper.findAll('.btn').length).toBe(2)
|
|
1079
|
-
const $buttons = wrapper.findAll('.btn')
|
|
1080
|
-
const $split = $buttons.at(0)
|
|
1081
|
-
const $toggle = $buttons.at(1)
|
|
1082
|
-
|
|
1083
|
-
expect($toggle.element.tagName).toBe('BUTTON')
|
|
1084
|
-
|
|
1085
|
-
expect($split.element.tagName).toBe('A')
|
|
1086
|
-
expect($split.classes()).toContain('btn')
|
|
1087
|
-
expect($split.classes()).toContain('btn-secondary')
|
|
1088
|
-
expect($split.attributes('href')).toBeDefined()
|
|
1089
|
-
expect($split.attributes('href')).toEqual('/foo')
|
|
1090
|
-
|
|
1091
|
-
wrapper.destroy()
|
|
1092
|
-
})
|
|
1093
|
-
|
|
1094
|
-
it('split mode has href when prop split-to set', async () => {
|
|
1095
|
-
const wrapper = mount(BDropdown, {
|
|
1096
|
-
attachTo: document.body,
|
|
1097
|
-
propsData: {
|
|
1098
|
-
split: true,
|
|
1099
|
-
splitTo: '/foo'
|
|
1100
|
-
}
|
|
1101
|
-
})
|
|
1102
|
-
|
|
1103
|
-
expect(wrapper.element.tagName).toBe('DIV')
|
|
1104
|
-
expect(wrapper.vm).toBeDefined()
|
|
1105
|
-
|
|
1106
|
-
expect(wrapper.findAll('.btn').length).toBe(2)
|
|
1107
|
-
const $buttons = wrapper.findAll('.btn')
|
|
1108
|
-
const $split = $buttons.at(0)
|
|
1109
|
-
const $toggle = $buttons.at(1)
|
|
1110
|
-
|
|
1111
|
-
expect($toggle.element.tagName).toBe('BUTTON')
|
|
1112
|
-
|
|
1113
|
-
expect($split.element.tagName).toBe('A')
|
|
1114
|
-
expect($split.classes()).toContain('btn')
|
|
1115
|
-
expect($split.classes()).toContain('btn-secondary')
|
|
1116
|
-
expect($split.attributes('href')).toBeDefined()
|
|
1117
|
-
expect($split.attributes('href')).toEqual('/foo')
|
|
1118
|
-
|
|
1119
|
-
wrapper.destroy()
|
|
1120
|
-
})
|
|
1121
|
-
})
|