@gitlab/ui 114.0.1 → 114.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/package.json +9 -28
  2. package/CHANGELOG.md +0 -13132
  3. package/src/vendor/bootstrap/LICENSE +0 -11
  4. package/src/vendor/bootstrap-vue/LICENSE +0 -11
  5. package/src/vendor/bootstrap-vue/package.json +0 -144
  6. package/src/vendor/bootstrap-vue/src/components/button/MODIFICATIONS.md +0 -16
  7. package/src/vendor/bootstrap-vue/src/components/button/README.md +0 -240
  8. package/src/vendor/bootstrap-vue/src/components/button/button-close.spec.js +0 -210
  9. package/src/vendor/bootstrap-vue/src/components/button/button.spec.js +0 -349
  10. package/src/vendor/bootstrap-vue/src/components/button/package.json +0 -105
  11. package/src/vendor/bootstrap-vue/src/components/dropdown/README.md +0 -730
  12. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-divider.spec.js +0 -58
  13. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-form.spec.js +0 -110
  14. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-group.spec.js +0 -94
  15. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-header.spec.js +0 -73
  16. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-item-button.spec.js +0 -117
  17. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-item.spec.js +0 -147
  18. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-text.spec.js +0 -59
  19. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown.spec.js +0 -1121
  20. package/src/vendor/bootstrap-vue/src/components/dropdown/package.json +0 -368
  21. package/src/vendor/bootstrap-vue/src/components/form/README.md +0 -365
  22. package/src/vendor/bootstrap-vue/src/components/form/form-invalid-feedback.spec.js +0 -170
  23. package/src/vendor/bootstrap-vue/src/components/form/form-text.spec.js +0 -93
  24. package/src/vendor/bootstrap-vue/src/components/form/form-valid-feedback.spec.js +0 -157
  25. package/src/vendor/bootstrap-vue/src/components/form/form.spec.js +0 -97
  26. package/src/vendor/bootstrap-vue/src/components/form/package.json +0 -112
  27. package/src/vendor/bootstrap-vue/src/components/form-checkbox/README.md +0 -691
  28. package/src/vendor/bootstrap-vue/src/components/form-checkbox/form-checkbox-group.spec.js +0 -525
  29. package/src/vendor/bootstrap-vue/src/components/form-checkbox/form-checkbox.spec.js +0 -922
  30. package/src/vendor/bootstrap-vue/src/components/form-checkbox/package.json +0 -172
  31. package/src/vendor/bootstrap-vue/src/components/form-group/README.md +0 -339
  32. package/src/vendor/bootstrap-vue/src/components/form-group/form-group.spec.js +0 -477
  33. package/src/vendor/bootstrap-vue/src/components/form-group/package.json +0 -183
  34. package/src/vendor/bootstrap-vue/src/components/form-radio/README.md +0 -437
  35. package/src/vendor/bootstrap-vue/src/components/form-radio/form-radio-group.spec.js +0 -357
  36. package/src/vendor/bootstrap-vue/src/components/form-radio/form-radio.spec.js +0 -587
  37. package/src/vendor/bootstrap-vue/src/components/form-radio/package.json +0 -162
  38. package/src/vendor/bootstrap-vue/src/components/form-select/README.md +0 -504
  39. package/src/vendor/bootstrap-vue/src/components/form-select/form-select-option-group.spec.js +0 -138
  40. package/src/vendor/bootstrap-vue/src/components/form-select/form-select-option.spec.js +0 -75
  41. package/src/vendor/bootstrap-vue/src/components/form-select/form-select.spec.js +0 -723
  42. package/src/vendor/bootstrap-vue/src/components/form-select/package.json +0 -132
  43. package/src/vendor/bootstrap-vue/src/components/form-textarea/README.md +0 -453
  44. package/src/vendor/bootstrap-vue/src/components/form-textarea/form-textarea.spec.js +0 -1000
  45. package/src/vendor/bootstrap-vue/src/components/form-textarea/package.json +0 -122
  46. package/src/vendor/bootstrap-vue/src/components/layout/README.md +0 -791
  47. package/src/vendor/bootstrap-vue/src/components/layout/col.spec.js +0 -192
  48. package/src/vendor/bootstrap-vue/src/components/layout/form-row.spec.js +0 -45
  49. package/src/vendor/bootstrap-vue/src/components/layout/package.json +0 -99
  50. package/src/vendor/bootstrap-vue/src/components/link/README.md +0 -76
  51. package/src/vendor/bootstrap-vue/src/components/link/link.spec.js +0 -434
  52. package/src/vendor/bootstrap-vue/src/components/link/package.json +0 -57
  53. package/src/vendor/bootstrap-vue/src/components/modal/MODIFICATIONS.md +0 -30
  54. package/src/vendor/bootstrap-vue/src/components/modal/README.md +0 -1067
  55. package/src/vendor/bootstrap-vue/src/components/modal/helpers/bv-modal-event.class.spec.js +0 -82
  56. package/src/vendor/bootstrap-vue/src/components/modal/modal.spec.js +0 -1418
  57. package/src/vendor/bootstrap-vue/src/components/modal/package.json +0 -544
  58. package/src/vendor/bootstrap-vue/src/components/nav/README.md +0 -362
  59. package/src/vendor/bootstrap-vue/src/components/nav/nav-item.spec.js +0 -127
  60. package/src/vendor/bootstrap-vue/src/components/nav/nav.spec.js +0 -177
  61. package/src/vendor/bootstrap-vue/src/components/nav/package.json +0 -73
  62. package/src/vendor/bootstrap-vue/src/components/popover/README.md +0 -919
  63. package/src/vendor/bootstrap-vue/src/components/popover/package.json +0 -261
  64. package/src/vendor/bootstrap-vue/src/components/popover/popover.spec.js +0 -198
  65. package/src/vendor/bootstrap-vue/src/components/table/README.md +0 -3157
  66. package/src/vendor/bootstrap-vue/src/components/table/helpers/default-sort-compare.spec.js +0 -112
  67. package/src/vendor/bootstrap-vue/src/components/table/helpers/normalize-fields.spec.js +0 -93
  68. package/src/vendor/bootstrap-vue/src/components/table/package.json +0 -1763
  69. package/src/vendor/bootstrap-vue/src/components/table/table-busy.spec.js +0 -150
  70. package/src/vendor/bootstrap-vue/src/components/table/table-caption.spec.js +0 -176
  71. package/src/vendor/bootstrap-vue/src/components/table/table-colgroup.spec.js +0 -81
  72. package/src/vendor/bootstrap-vue/src/components/table/table-filtering.spec.js +0 -409
  73. package/src/vendor/bootstrap-vue/src/components/table/table-item-formatter.spec.js +0 -56
  74. package/src/vendor/bootstrap-vue/src/components/table/table-lite.spec.js +0 -682
  75. package/src/vendor/bootstrap-vue/src/components/table/table-pagination.spec.js +0 -133
  76. package/src/vendor/bootstrap-vue/src/components/table/table-primarykey.spec.js +0 -83
  77. package/src/vendor/bootstrap-vue/src/components/table/table-provider.spec.js +0 -411
  78. package/src/vendor/bootstrap-vue/src/components/table/table-row-details.spec.js +0 -459
  79. package/src/vendor/bootstrap-vue/src/components/table/table-selectable.spec.js +0 -1182
  80. package/src/vendor/bootstrap-vue/src/components/table/table-simple.spec.js +0 -206
  81. package/src/vendor/bootstrap-vue/src/components/table/table-sorting.spec.js +0 -858
  82. package/src/vendor/bootstrap-vue/src/components/table/table-sticky-column.spec.js +0 -377
  83. package/src/vendor/bootstrap-vue/src/components/table/table-tbody-bottom-row.spec.js +0 -94
  84. package/src/vendor/bootstrap-vue/src/components/table/table-tbody-row-events.spec.js +0 -529
  85. package/src/vendor/bootstrap-vue/src/components/table/table-tbody-top-row.spec.js +0 -88
  86. package/src/vendor/bootstrap-vue/src/components/table/table-tbody-transition.spec.js +0 -83
  87. package/src/vendor/bootstrap-vue/src/components/table/table-tfoot-custom.spec.js +0 -91
  88. package/src/vendor/bootstrap-vue/src/components/table/table-tfoot-events.spec.js +0 -137
  89. package/src/vendor/bootstrap-vue/src/components/table/table-thead-events.spec.js +0 -155
  90. package/src/vendor/bootstrap-vue/src/components/table/table-thead-top.spec.js +0 -96
  91. package/src/vendor/bootstrap-vue/src/components/table/table.spec.js +0 -692
  92. package/src/vendor/bootstrap-vue/src/components/tabs/README.md +0 -433
  93. package/src/vendor/bootstrap-vue/src/components/tabs/package.json +0 -205
  94. package/src/vendor/bootstrap-vue/src/components/tabs/tab.spec.js +0 -330
  95. package/src/vendor/bootstrap-vue/src/components/tabs/tabs.spec.js +0 -778
  96. package/src/vendor/bootstrap-vue/src/components/toast/README.md +0 -655
  97. package/src/vendor/bootstrap-vue/src/components/toast/helpers/bv-toast.spec.js +0 -117
  98. package/src/vendor/bootstrap-vue/src/components/toast/package.json +0 -184
  99. package/src/vendor/bootstrap-vue/src/components/toast/toast.spec.js +0 -294
  100. package/src/vendor/bootstrap-vue/src/components/toast/toaster.spec.js +0 -77
  101. package/src/vendor/bootstrap-vue/src/components/tooltip/README.md +0 -559
  102. package/src/vendor/bootstrap-vue/src/components/tooltip/package.json +0 -258
  103. package/src/vendor/bootstrap-vue/src/components/tooltip/tooltip.spec.js +0 -1240
  104. package/src/vendor/bootstrap-vue/src/components/transition/package.json +0 -5
  105. package/src/vendor/bootstrap-vue/src/components/transporter/package.json +0 -5
  106. package/src/vendor/bootstrap-vue/src/components/transporter/transporter.spec.js +0 -85
  107. package/src/vendor/bootstrap-vue/src/directives/modal/modal.spec.js +0 -191
  108. package/src/vendor/bootstrap-vue/src/directives/tooltip/README.md +0 -521
  109. package/src/vendor/bootstrap-vue/src/directives/tooltip/package.json +0 -131
  110. package/src/vendor/bootstrap-vue/src/directives/tooltip/tooltip.spec.js +0 -190
  111. package/src/vendor/bootstrap-vue/src/directives/visible/README.md +0 -244
  112. package/src/vendor/bootstrap-vue/src/directives/visible/package.json +0 -24
  113. package/src/vendor/bootstrap-vue/src/mixins/attrs.spec.js +0 -194
  114. package/src/vendor/bootstrap-vue/src/mixins/click-out.spec.js +0 -52
  115. package/src/vendor/bootstrap-vue/src/mixins/focus-in.spec.js +0 -53
  116. package/src/vendor/bootstrap-vue/src/mixins/listen-on-document.spec.js +0 -117
  117. package/src/vendor/bootstrap-vue/src/mixins/listen-on-root.spec.js +0 -77
  118. package/src/vendor/bootstrap-vue/src/mixins/listen-on-window.spec.js +0 -115
  119. package/src/vendor/bootstrap-vue/src/mixins/listeners.spec.js +0 -245
  120. package/src/vendor/bootstrap-vue/src/utils/bv-event.class.spec.js +0 -66
  121. package/src/vendor/bootstrap-vue/src/utils/clone-deep.spec.js +0 -70
  122. package/src/vendor/bootstrap-vue/src/utils/config.spec.js +0 -169
  123. package/src/vendor/bootstrap-vue/src/utils/css-escape.spec.js +0 -82
  124. package/src/vendor/bootstrap-vue/src/utils/dom.spec.js +0 -291
  125. package/src/vendor/bootstrap-vue/src/utils/events.spec.js +0 -41
  126. package/src/vendor/bootstrap-vue/src/utils/get.spec.js +0 -109
  127. package/src/vendor/bootstrap-vue/src/utils/inspect.spec.js +0 -251
  128. package/src/vendor/bootstrap-vue/src/utils/loose-equal.spec.js +0 -203
  129. package/src/vendor/bootstrap-vue/src/utils/normalize-slot.spec.js +0 -63
  130. package/src/vendor/bootstrap-vue/src/utils/number.spec.js +0 -72
  131. package/src/vendor/bootstrap-vue/src/utils/object.spec.js +0 -61
  132. package/src/vendor/bootstrap-vue/src/utils/props.spec.js +0 -112
  133. package/src/vendor/bootstrap-vue/src/utils/router.spec.js +0 -248
  134. package/src/vendor/bootstrap-vue/src/utils/string.spec.js +0 -65
  135. package/src/vendor/bootstrap-vue/src/utils/stringify-object-values.spec.js +0 -47
  136. package/src/vendor/bootstrap-vue/src/utils/warn.spec.js +0 -54
@@ -1,72 +0,0 @@
1
- import { toFixed, toFloat, toInteger } from './number'
2
-
3
- describe('utils/number', () => {
4
- it('toInteger works', async () => {
5
- expect(toInteger(1)).toBe(1)
6
- expect(toInteger('1')).toBe(1)
7
- expect(toInteger(1e5)).toBe(100000)
8
- expect(toInteger('1e5')).toBe(1)
9
- expect(toInteger('256 foobar')).toBe(256)
10
- expect(toInteger('foo 256bar')).toBe(NaN)
11
- expect(toInteger({})).toBe(NaN)
12
- expect(toInteger([])).toBe(NaN)
13
- expect(toInteger(new Date())).toBe(NaN)
14
- expect(toInteger(null)).toBe(NaN)
15
- expect(toInteger(undefined)).toBe(NaN)
16
- expect(toInteger(null, 0)).toBe(0)
17
- expect(toInteger(undefined, -1)).toBe(-1)
18
- })
19
-
20
- it('toFloat works', async () => {
21
- expect(toFloat(1)).toBe(1)
22
- expect(toFloat('1')).toBe(1)
23
- expect(toFloat(1.23)).toBe(1.23)
24
- expect(toFloat('1.23')).toBe(1.23)
25
- expect(toFloat(1e5)).toBe(100000)
26
- // `parseFloat()` works differently than `parseInt()` in this case
27
- expect(toFloat('1e5')).toBe(100000)
28
- expect(toFloat('256 foobar')).toBe(256)
29
- expect(toFloat('256.78 foobar')).toBe(256.78)
30
- expect(toFloat('foo 256bar')).toBe(NaN)
31
- expect(toFloat({})).toBe(NaN)
32
- expect(toFloat([])).toBe(NaN)
33
- expect(toFloat(new Date())).toBe(NaN)
34
- expect(toFloat(null)).toBe(NaN)
35
- expect(toFloat(undefined)).toBe(NaN)
36
- expect(toFloat(null, 0)).toBe(0)
37
- expect(toFloat(undefined, -1)).toBe(-1)
38
- })
39
-
40
- it('toFixed works', async () => {
41
- expect(toFixed(1)).toBe('1')
42
- expect(toFixed(1.23)).toBe('1')
43
- expect(toFixed(1.78)).toBe('2')
44
- expect(toFixed('1')).toBe('1')
45
- expect(toFixed('1.23')).toBe('1')
46
- expect(toFixed('1.78')).toBe('2')
47
- expect(toFixed(1, 2)).toBe('1.00')
48
- expect(toFixed('1', 2)).toBe('1.00')
49
- expect(toFixed('1 foo', 2)).toBe('1.00')
50
- expect(toFixed('foo 1 bar', 2)).toBe('NaN')
51
- expect(toFixed('1.23', 4)).toBe('1.2300')
52
- expect(toFixed('1.78', 2)).toBe('1.78')
53
- expect(toFixed({})).toBe('NaN')
54
- expect(toFixed([])).toBe('NaN')
55
- expect(toFixed(new Date())).toBe('NaN')
56
- expect(toFixed(null)).toBe('NaN')
57
- expect(toFixed(undefined)).toBe('NaN')
58
- expect(toFixed({}, 3)).toBe('NaN')
59
- expect(toFixed([], 2)).toBe('NaN')
60
- expect(toFixed(new Date(), 1)).toBe('NaN')
61
- expect(toFixed(null, 4)).toBe('NaN')
62
- expect(toFixed(undefined, 3)).toBe('NaN')
63
- expect(toFixed(1, '2')).toBe('1.00')
64
- expect(toFixed('1', '2')).toBe('1.00')
65
- expect(toFixed('1 foo', '2')).toBe('1.00')
66
- expect(toFixed('foo 1 bar', '2')).toBe('NaN')
67
- expect(toFixed(1, 'foo')).toBe('1')
68
- expect(toFixed('1', undefined)).toBe('1')
69
- expect(toFixed('1 foo', null)).toBe('1')
70
- expect(toFixed('foo 1 bar', {})).toBe('NaN')
71
- })
72
- })
@@ -1,61 +0,0 @@
1
- import { pick, omit, mergeDeep } from './object'
2
-
3
- describe('utils/object', () => {
4
- it('pick() works', async () => {
5
- const obj = { a: 1, b: 2, c: 3, d: null, e: [] }
6
-
7
- expect(pick(obj, ['a', 'b', 'c'])).toEqual({ a: 1, b: 2, c: 3 })
8
- expect(pick(obj, Object.keys(obj))).toEqual(obj)
9
- expect(pick(obj, [])).toEqual({})
10
- })
11
-
12
- it('omit() works', async () => {
13
- const obj = { a: 1, b: 2, c: 3, d: null, e: [] }
14
-
15
- expect(omit(obj, ['a', 'b', 'c'])).toEqual({ d: null, e: [] })
16
- expect(omit(obj, Object.keys(obj))).toEqual({})
17
- expect(omit(obj, [])).toEqual(obj)
18
- })
19
-
20
- it('mergeDeep() works', async () => {
21
- const A = {
22
- a: {
23
- loc: 'Earth',
24
- title: 'Hello World',
25
- type: 'Planet',
26
- deeper: {
27
- map: new Map([['a', 'AAA'], ['b', 'BBB']]),
28
- mapId: 15473
29
- }
30
- }
31
- }
32
- const B = {
33
- a: {
34
- type: 'Star',
35
- deeper: {
36
- mapId: 9999,
37
- alt_map: new Map([['x', 'XXXX'], ['y', 'YYYY']])
38
- }
39
- }
40
- }
41
-
42
- const C = mergeDeep(A, B)
43
- const D = mergeDeep({ a: 1 }, { b: { c: { d: { e: 12345 } } } })
44
- const E = mergeDeep({ b: { c: 'hallo' } }, { b: { c: { d: { e: 12345 } } } })
45
- const F = mergeDeep(
46
- { b: { c: { d: { e: 12345 } }, d: 'dag', f: 'one' } },
47
- { b: { c: 'hallo', e: 'ok', f: 'two' } }
48
- )
49
-
50
- expect(C.a.type).toEqual('Star')
51
- expect(C.a.deeper.alt_map.get('x')).toEqual('XXXX')
52
- expect(C.a.deeper.map.get('b')).toEqual('BBB')
53
- expect(D.a).toEqual(1)
54
- expect(D.b.c.d.e).toEqual(12345)
55
- expect(E.b.c.d.e).toEqual(12345)
56
- expect(F.b.c).toEqual('hallo')
57
- expect(F.b.d).toEqual('dag')
58
- expect(F.b.e).toEqual('ok')
59
- expect(F.b.f).toEqual('two')
60
- })
61
- })
@@ -1,112 +0,0 @@
1
- import { mount } from '@vue/test-utils'
2
- import { setConfig } from './config-set'
3
- import { copyProps, makeProp, makePropsConfigurable } from './props'
4
-
5
- describe('utils/props', () => {
6
- it('copyProps() works with array props', async () => {
7
- const props = ['a', 'b', 'c']
8
-
9
- expect(copyProps(props)).toEqual(props)
10
- // Should be a new array reference
11
- expect(copyProps(props)).not.toBe(props)
12
- })
13
-
14
- it('copyProps() works with object props', async () => {
15
- const props = {
16
- a: { type: String, default: 'foobar' },
17
- b: { type: [Object, Array], default: null },
18
- c: 'c'
19
- }
20
-
21
- expect(copyProps(props)).toEqual(props)
22
- // Should be a new object reference
23
- expect(copyProps(props)).not.toBe(props)
24
- // Properties should be new object references
25
- expect(copyProps(props).a).not.toBe(props.a)
26
- expect(copyProps(props).a).toEqual(props.a)
27
- expect(copyProps(props).b).not.toBe(props.b)
28
- expect(copyProps(props).b).toEqual(props.b)
29
- // Except for primatives
30
- expect(copyProps(props).c).toBe(props.c)
31
- expect(copyProps(props).c).toEqual(props.c)
32
- })
33
-
34
- it('makeProp() works', async () => {
35
- expect(makeProp()).toEqual({})
36
- expect(makeProp(undefined)).toEqual({})
37
- expect(makeProp(null)).toEqual({})
38
- expect(makeProp('')).toEqual({})
39
-
40
- expect(makeProp(Array)).toEqual({ type: Array })
41
- expect(makeProp(Boolean)).toEqual({ type: Boolean })
42
- expect(makeProp(Function)).toEqual({ type: Function })
43
- expect(makeProp(Number)).toEqual({ type: Number })
44
- expect(makeProp(Object)).toEqual({ type: Object })
45
- expect(makeProp(String)).toEqual({ type: String })
46
-
47
- expect(makeProp(Array, null)).toEqual({ type: Array, default: null })
48
- expect(makeProp(Boolean, false)).toEqual({ type: Boolean, default: false })
49
- expect(makeProp(Function, null)).toEqual({ type: Function, default: null })
50
- expect(makeProp(Number, 0)).toEqual({ type: Number, default: 0 })
51
- expect(makeProp(Object, null)).toEqual({ type: Object, default: null })
52
- expect(makeProp(String, '')).toEqual({ type: String, default: '' })
53
-
54
- expect(typeof makeProp(Array, []).default).toEqual('function')
55
- expect(makeProp(Array, []).default()).toEqual([])
56
-
57
- const fn = () => {}
58
- expect(typeof makeProp(Function, fn).default).toEqual('function')
59
- expect(makeProp(Function, fn).default).toEqual(fn)
60
-
61
- expect(typeof makeProp(Object, {}).default).toEqual('function')
62
- expect(makeProp(Object, {}).default()).toEqual({})
63
-
64
- expect(makeProp(Array, undefined, true)).toEqual({ type: Array, required: true })
65
- expect(makeProp(Boolean, undefined, true)).toEqual({ type: Boolean, required: true })
66
- expect(makeProp(Function, undefined, true)).toEqual({ type: Function, required: true })
67
- expect(makeProp(Number, undefined, true)).toEqual({ type: Number, required: true })
68
- expect(makeProp(Object, undefined, true)).toEqual({ type: Object, required: true })
69
- expect(makeProp(String, undefined, true)).toEqual({ type: String, required: true })
70
-
71
- const validator = value => !!value
72
- expect(makeProp(String, '', undefined)).toEqual({ type: String, default: '' })
73
- expect(makeProp(String, '', validator)).toEqual({ type: String, default: '', validator })
74
- expect(makeProp(String, undefined, validator)).toEqual({ type: String, validator })
75
- expect(makeProp(String, '', true, validator)).toEqual({
76
- type: String,
77
- required: true,
78
- validator
79
- })
80
- })
81
-
82
- it('makePropsConfigurable() works', async () => {
83
- const NAME = 'MyComponent'
84
- const props = {
85
- text: {
86
- type: String,
87
- default: 'foo'
88
- }
89
- }
90
- const config = {
91
- [NAME]: { text: 'bar' }
92
- }
93
- const ConfigurableComponent = {
94
- name: NAME,
95
- props: makePropsConfigurable(props, NAME),
96
- render(h) {
97
- return h('div', this.text)
98
- }
99
- }
100
-
101
- setConfig(config)
102
-
103
- const wrapper = mount(ConfigurableComponent)
104
-
105
- expect(wrapper.vm).toBeDefined()
106
- expect(wrapper.element.tagName).toBe('DIV')
107
- expect(wrapper.text()).toBe('bar')
108
-
109
- await wrapper.setProps({ text: 'baz' })
110
- expect(wrapper.text()).toBe('baz')
111
- })
112
- })
@@ -1,248 +0,0 @@
1
- import {
2
- stringifyQueryObj,
3
- parseQuery,
4
- computeHref,
5
- isRouterLink,
6
- computeRel,
7
- computeTag
8
- } from './router'
9
-
10
- describe('utils/router', () => {
11
- // stringifyQueryObject() utility method
12
- describe('stringifyQueryObj()', () => {
13
- it('returns empty string when noting passed', async () => {
14
- expect(stringifyQueryObj()).toEqual('')
15
- })
16
-
17
- it('handles special chars', async () => {
18
- expect(stringifyQueryObj({ foo: ", !'()*" })).toEqual('?foo=,%20%21%27%28%29%2a')
19
- expect(stringifyQueryObj({ ", !'()*": 'foo' })).toEqual('?,%20%21%27%28%29%2a=foo')
20
- })
21
-
22
- it('handles multiple keys', async () => {
23
- const obj = {
24
- foo: 1,
25
- bar: 'baz'
26
- }
27
- expect(stringifyQueryObj(obj)).toEqual('?foo=1&bar=baz')
28
- })
29
-
30
- it('handles array as values', async () => {
31
- const obj = {
32
- foo: 1,
33
- bar: ['a', 'b', 'c']
34
- }
35
- expect(stringifyQueryObj(obj)).toEqual('?foo=1&bar=a&bar=b&bar=c')
36
- })
37
-
38
- it('skips undefined values', async () => {
39
- const obj = {
40
- foo: 1,
41
- bar: undefined,
42
- baz: 2
43
- }
44
- expect(stringifyQueryObj(obj)).toEqual('?foo=1&baz=2')
45
- })
46
-
47
- it('skips undefined values in arrays', async () => {
48
- const obj = {
49
- foo: ['a', undefined, 'c']
50
- }
51
- expect(stringifyQueryObj(obj)).toEqual('?foo=a&foo=c')
52
- })
53
-
54
- it('leaves in null value keys', async () => {
55
- const obj = {
56
- foo: 1,
57
- bar: null,
58
- baz: 2
59
- }
60
- expect(stringifyQueryObj(obj)).toEqual('?foo=1&bar&baz=2')
61
- })
62
-
63
- it('leaves in null values in arrays', async () => {
64
- const obj = {
65
- foo: ['a', null, 'c']
66
- }
67
- expect(stringifyQueryObj(obj)).toEqual('?foo=a&foo&foo=c')
68
- })
69
- })
70
-
71
- describe('parseQuery()', () => {
72
- it('returns empty object when empty query', async () => {
73
- expect(parseQuery('')).toEqual({})
74
- expect(parseQuery('?')).toEqual({})
75
- })
76
-
77
- it('parses simple query', async () => {
78
- expect(parseQuery('?foo=bar')).toEqual({ foo: 'bar' })
79
- expect(parseQuery('?foo=bar&baz=buz')).toEqual({ foo: 'bar', baz: 'buz' })
80
- })
81
-
82
- it('parses empty values', async () => {
83
- expect(parseQuery('?foo')).toEqual({ foo: null })
84
- expect(parseQuery('?foo=bar&baz')).toEqual({ foo: 'bar', baz: null })
85
- expect(parseQuery('?foo=&baz')).toEqual({ foo: '', baz: null })
86
- })
87
-
88
- it('handles null key/value pairs values', async () => {
89
- expect(parseQuery('?foo=bar&&baz=fiz')).toEqual({ foo: 'bar', '': null, baz: 'fiz' })
90
- expect(parseQuery('?foo=bar&=&baz=fiz')).toEqual({ foo: 'bar', '': '', baz: 'fiz' })
91
- })
92
-
93
- it('handles values with = characters', async () => {
94
- expect(parseQuery('?foo=bar=baz')).toEqual({ foo: 'bar=baz' })
95
- })
96
-
97
- it('parses duplicate keys as arrays', async () => {
98
- expect(parseQuery('?foo=bar&foo=baz')).toEqual({ foo: ['bar', 'baz'] })
99
- expect(parseQuery('?foo=&foo=baz&foo')).toEqual({ foo: ['', 'baz', null] })
100
- expect(parseQuery('?foo=bar&baz=buz&baz=fiz')).toEqual({ foo: 'bar', baz: ['buz', 'fiz'] })
101
- })
102
- })
103
-
104
- // computeHref() utility method
105
- describe('computeHref()', () => {
106
- it('works with href', async () => {
107
- const obj = { href: '/foo/bar?baz=123' }
108
- expect(computeHref(obj)).toEqual(obj.href)
109
- })
110
-
111
- it('parses nothing to default', async () => {
112
- expect(computeHref()).toEqual('#')
113
- expect(computeHref(undefined, undefined, '/', '')).toEqual('/')
114
- expect(computeHref(undefined, undefined, '', '')).toEqual('')
115
- })
116
-
117
- it('returns null when tag is not `a`', async () => {
118
- expect(computeHref({}, 'div')).toEqual(null)
119
- expect(computeHref(undefined, 'div', '/', '')).toEqual(null)
120
- expect(computeHref(undefined, 'span', '', '/')).toEqual(null)
121
- })
122
-
123
- it('returns href when both href and to provided', async () => {
124
- const obj = {
125
- href: '/foo/bar?baz=123',
126
- to: '/baz/bar'
127
- }
128
- expect(computeHref(obj)).toEqual(obj.href)
129
- })
130
-
131
- it('parses empty `href` to default', async () => {
132
- expect(computeHref({ href: '' })).toEqual('#')
133
- expect(computeHref({ href: '' }, 'a', '/', '')).toEqual('/')
134
- expect(computeHref({ href: '' }, 'a', '', '')).toEqual('')
135
- })
136
-
137
- it('parses `to` when string', async () => {
138
- const obj = {
139
- to: '/baz/bar'
140
- }
141
- expect(computeHref(obj)).toEqual(obj.to)
142
- })
143
-
144
- it('parses `to` with only path', async () => {
145
- const obj = {
146
- to: {
147
- path: '/baz/bar'
148
- }
149
- }
150
- expect(computeHref(obj)).toEqual(obj.to.path)
151
- })
152
-
153
- it('parses `to` with only hash', async () => {
154
- const obj = {
155
- to: {
156
- hash: '#foobar'
157
- }
158
- }
159
- expect(computeHref(obj)).toEqual(obj.to.hash)
160
- })
161
-
162
- it('parses `to` with hash missing "#"', async () => {
163
- const obj = {
164
- to: {
165
- hash: 'foobar'
166
- }
167
- }
168
- expect(computeHref(obj)).toEqual('#foobar')
169
- })
170
-
171
- it('parses `to` with only query', async () => {
172
- const obj = {
173
- to: {
174
- query: { foo: 'bar' }
175
- }
176
- }
177
- expect(computeHref(obj)).toEqual('?foo=bar')
178
- })
179
-
180
- it('parses empty `to` to fallback default', async () => {
181
- expect(computeHref({ to: {} })).toEqual('#')
182
- expect(computeHref({ to: {} }, 'a', '#', '')).toEqual('#')
183
- expect(computeHref({ to: {} }, 'a', '/', '#')).toEqual('/')
184
- })
185
-
186
- it('parses complete `to`', async () => {
187
- const obj = {
188
- to: {
189
- path: '/foo',
190
- query: {
191
- bar: 1,
192
- baz: ['a', 'b', 'c'],
193
- bif: null,
194
- zap: undefined
195
- },
196
- hash: '#fizzlerocks'
197
- }
198
- }
199
- expect(computeHref(obj)).toEqual('/foo?bar=1&baz=a&baz=b&baz=c&bif#fizzlerocks')
200
- })
201
- })
202
-
203
- // isRouterLink() utility method
204
- describe('isRouterLink()', () => {
205
- it('works', async () => {
206
- expect(isRouterLink('a')).toBe(false)
207
- expect(isRouterLink('router-link')).toBe(true)
208
- expect(isRouterLink('nuxt-link')).toBe(true)
209
- expect(isRouterLink()).toBe(false)
210
- })
211
- })
212
-
213
- // computeRel() utility method
214
- describe('computeRel()', () => {
215
- it('works', async () => {
216
- expect(computeRel({ target: '_blank', rel: null })).toBe('noopener')
217
- expect(computeRel({ target: '_blank', rel: undefined })).toBe(null)
218
- expect(computeRel({ target: '_blank' })).toBe(null)
219
- expect(computeRel({ target: '_blank', rel: 'foo' })).toBe('foo')
220
- expect(computeRel({ target: '_notblank', rel: null })).toBe(null)
221
- expect(computeRel({ target: '_notblank', rel: undefined })).toBe(null)
222
- expect(computeRel({ target: '_notblank', rel: 'foo' })).toBe('foo')
223
- expect(computeRel({})).toBe(null)
224
- })
225
- })
226
-
227
- // computeTag() utility method
228
- describe('computeTag()', () => {
229
- it('works', async () => {
230
- const context1 = { $router: {} }
231
- const context2 = { $router: {}, $nuxt: {} }
232
- const context3 = {}
233
-
234
- expect(computeTag({ to: '/foo' }, context1)).toBe('router-link')
235
- expect(computeTag({ to: '/foo' }, context2)).toBe('nuxt-link')
236
- expect(computeTag({ to: '/foo' }, context3)).toBe('a')
237
- expect(computeTag({}, context1)).toBe('a')
238
- expect(computeTag({}, context2)).toBe('a')
239
- expect(computeTag({}, context3)).toBe('a')
240
- expect(computeTag({ to: '/foo', disabled: true }, context1)).toBe('a')
241
- expect(computeTag({ to: '/foo', disabled: true }, context2)).toBe('a')
242
- expect(computeTag({ to: '/foo', disabled: true }, context3)).toBe('a')
243
- expect(computeTag({ disabled: true }, context1)).toBe('a')
244
- expect(computeTag({ disabled: true }, context2)).toBe('a')
245
- expect(computeTag({ disabled: true }, context3)).toBe('a')
246
- })
247
- })
248
- })
@@ -1,65 +0,0 @@
1
- import { escapeRegExp, kebabCase, startCase, toString, upperFirst } from './string'
2
-
3
- describe('utils/string', () => {
4
- it('kebabCase() works', async () => {
5
- expect(kebabCase('foo')).toBe('foo')
6
- expect(kebabCase('Foo')).toBe('foo')
7
- expect(kebabCase('fooBar')).toBe('foo-bar')
8
- expect(kebabCase('FooBar')).toBe('foo-bar')
9
- expect(kebabCase('XFooBar')).toBe('x-foo-bar')
10
- })
11
-
12
- it('startCase() works', async () => {
13
- expect(startCase('foobar')).toBe('Foobar')
14
- expect(startCase('Foobar')).toBe('Foobar')
15
- expect(startCase('foo_bar')).toBe('Foo Bar')
16
- expect(startCase('foo bar')).toBe('Foo Bar')
17
- expect(startCase('fooBar')).toBe('Foo Bar')
18
- })
19
-
20
- it('upperFirst() works', async () => {
21
- expect(upperFirst('lower')).toBe('Lower')
22
- expect(upperFirst(' lower ')).toBe('Lower')
23
- expect(upperFirst('lower case')).toBe('Lower case')
24
- expect(upperFirst(null)).toBe('Null')
25
- expect(upperFirst(undefined)).toBe('Undefined')
26
- expect(upperFirst({})).toBe('[object Object]')
27
- expect(upperFirst([])).toBe('')
28
- expect(upperFirst(['foo', 'bar'])).toBe('Foo,bar')
29
- })
30
-
31
- it('escapeRegExp() works', async () => {
32
- expect(escapeRegExp('Hello?')).toBe('Hello\\?')
33
- expect(escapeRegExp('$100')).toBe('\\$100')
34
- expect(escapeRegExp('10 * 5')).toBe('10 \\* 5')
35
- expect(escapeRegExp('[-/\\^$*+?.()|[\\]{}]')).toBe(
36
- '\\[\\-\\/\\\\\\^\\$\\*\\+\\?\\.\\(\\)\\|\\[\\\\\\]\\{\\}\\]'
37
- )
38
- })
39
-
40
- it('toString() works', async () => {
41
- expect(toString(null)).toBe('')
42
- expect(toString(undefined)).toBe('')
43
- expect(toString(true)).toBe('true')
44
- expect(toString(false)).toBe('false')
45
- expect(toString({ a: 1, b: 2, c: { d: 'foo' } })).toBe(`{
46
- "a": 1,
47
- "b": 2,
48
- "c": {
49
- "d": "foo"
50
- }
51
- }`)
52
- expect(toString({ a: 1, b: 2, c: { d: 'foo' } }, 4)).toBe(`{
53
- "a": 1,
54
- "b": 2,
55
- "c": {
56
- "d": "foo"
57
- }
58
- }`)
59
- expect(toString([])).toBe('[]')
60
- expect(toString(['foo', 'bar'])).toBe(`[
61
- "foo",
62
- "bar"
63
- ]`)
64
- })
65
- })
@@ -1,47 +0,0 @@
1
- import { stringifyObjectValues } from './stringify-object-values'
2
-
3
- describe('stringifyObjectValues()', () => {
4
- it('handles `null` and `undefined`', async () => {
5
- expect(stringifyObjectValues(null)).toBe('')
6
- expect(stringifyObjectValues(undefined)).toBe('')
7
- expect(stringifyObjectValues()).toBe('')
8
- })
9
-
10
- it('returns strings as-is', async () => {
11
- expect(stringifyObjectValues('foo')).toBe('foo')
12
- expect(stringifyObjectValues('123')).toBe('123')
13
- expect(stringifyObjectValues(' bar ')).toBe(' bar ')
14
- })
15
-
16
- it('converts numbers to string', async () => {
17
- expect(stringifyObjectValues(0)).toBe('0')
18
- expect(stringifyObjectValues(1)).toBe('1')
19
- expect(stringifyObjectValues(-1)).toBe('-1')
20
- })
21
-
22
- it('converts dates to native string format', async () => {
23
- const date1 = new Date(2020, 1, 1)
24
- const date2 = new Date(2030, 1, 1)
25
- const date3 = new Date(1970, 1, 1)
26
-
27
- expect(stringifyObjectValues(date1)).toBe(date1.toString())
28
- expect(stringifyObjectValues(date2)).toBe(date2.toString())
29
- expect(stringifyObjectValues(date3)).toBe(date3.toString())
30
- })
31
-
32
- it('converts array values to a string', async () => {
33
- expect(stringifyObjectValues([])).toBe('')
34
- expect(stringifyObjectValues([1, 'foo'])).toBe('1 foo')
35
- expect(stringifyObjectValues([undefined, null])).toBe('')
36
- })
37
-
38
- it('converts object values to a string', async () => {
39
- expect(stringifyObjectValues({})).toBe('')
40
- expect(stringifyObjectValues({ a: 1, b: 'foo' })).toBe('1 foo')
41
- expect(stringifyObjectValues({ a: null, b: undefined })).toBe('')
42
- expect(stringifyObjectValues({ a: [undefined, null, { b: 1 }] })).toBe('1')
43
- expect(
44
- stringifyObjectValues({ b: 3, c: { z: 'zzz', d: null, e: 2 }, d: [10, 12, 11], a: 'one' })
45
- ).toBe('one 3 2 zzz 10 12 11')
46
- })
47
- })
@@ -1,54 +0,0 @@
1
- import { warn } from './warn'
2
-
3
- describe('utils/warn', () => {
4
- const dummyWarning = 'This is a dummy warning.'
5
- const dummySource = 'DummyComponent'
6
-
7
- let originalProcess
8
-
9
- beforeAll(() => {
10
- jest.spyOn(console, 'warn').mockImplementation(() => {})
11
- originalProcess = global.process
12
- })
13
-
14
- afterEach(() => {
15
- console.warn.mockClear()
16
- global.process = originalProcess
17
- })
18
-
19
- describe('with "BOOTSTRAP_VUE_NO_WARN" environment variable set', () => {
20
- beforeEach(() => {
21
- global.process = {
22
- env: {
23
- BOOTSTRAP_VUE_NO_WARN: true
24
- }
25
- }
26
- })
27
-
28
- it('does not call "console.warn()"', () => {
29
- warn(dummyWarning)
30
-
31
- expect(console.warn).not.toHaveBeenCalled()
32
- })
33
- })
34
-
35
- describe('without process object', () => {
36
- beforeEach(() => {
37
- delete global.process
38
- })
39
-
40
- it('calls "console.warn()" with warning', () => {
41
- warn(dummyWarning)
42
-
43
- expect(console.warn).toHaveBeenCalledWith(`[BootstrapVue warn]: ${dummyWarning}`)
44
- })
45
-
46
- it('calls "console.warn()" with warning and source', () => {
47
- warn(dummyWarning, dummySource)
48
-
49
- expect(console.warn).toHaveBeenCalledWith(
50
- `[BootstrapVue warn]: ${dummySource} - ${dummyWarning}`
51
- )
52
- })
53
- })
54
- })