@dimailn/vuetify 2.7.2-alpha24 → 2.7.2-alpha25
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/dist/vuetify.js +241 -230
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +1 -1
- package/dist/vuetify.min.js +2 -2
- package/es5/components/VBtn/VBtn.js +16 -16
- package/es5/components/VBtn/VBtn.js.map +1 -1
- package/es5/components/VColorPicker/VColorPicker.js +18 -31
- package/es5/components/VColorPicker/VColorPicker.js.map +1 -1
- package/es5/components/VColorPicker/VColorPickerCanvas.js +45 -46
- package/es5/components/VColorPicker/VColorPickerCanvas.js.map +1 -1
- package/es5/components/VColorPicker/VColorPickerEdit.js +27 -26
- package/es5/components/VColorPicker/VColorPickerEdit.js.map +1 -1
- package/es5/components/VColorPicker/VColorPickerPreview.js +41 -30
- package/es5/components/VColorPicker/VColorPickerPreview.js.map +1 -1
- package/es5/components/VColorPicker/VColorPickerSwatches.js +13 -10
- package/es5/components/VColorPicker/VColorPickerSwatches.js.map +1 -1
- package/es5/components/VDataTable/VDataTable.js +7 -11
- package/es5/components/VDataTable/VDataTable.js.map +1 -1
- package/es5/components/VInput/VInput.js +20 -6
- package/es5/components/VInput/VInput.js.map +1 -1
- package/es5/components/VSlider/VSlider.js +23 -18
- package/es5/components/VSlider/VSlider.js.map +1 -1
- package/es5/components/VTooltip/VTooltip.js +3 -7
- package/es5/components/VTooltip/VTooltip.js.map +1 -1
- package/es5/framework.js +1 -1
- package/lib/components/VBtn/VBtn.js +18 -19
- package/lib/components/VBtn/VBtn.js.map +1 -1
- package/lib/components/VColorPicker/VColorPicker.js +29 -37
- package/lib/components/VColorPicker/VColorPicker.js.map +1 -1
- package/lib/components/VColorPicker/VColorPickerCanvas.js +41 -43
- package/lib/components/VColorPicker/VColorPickerCanvas.js.map +1 -1
- package/lib/components/VColorPicker/VColorPickerEdit.js +25 -31
- package/lib/components/VColorPicker/VColorPickerEdit.js.map +1 -1
- package/lib/components/VColorPicker/VColorPickerPreview.js +45 -32
- package/lib/components/VColorPicker/VColorPickerPreview.js.map +1 -1
- package/lib/components/VColorPicker/VColorPickerSwatches.js +15 -9
- package/lib/components/VColorPicker/VColorPickerSwatches.js.map +1 -1
- package/lib/components/VDataTable/VDataTable.js +3 -4
- package/lib/components/VDataTable/VDataTable.js.map +1 -1
- package/lib/components/VInput/VInput.js +12 -4
- package/lib/components/VInput/VInput.js.map +1 -1
- package/lib/components/VSlider/VSlider.js +26 -21
- package/lib/components/VSlider/VSlider.js.map +1 -1
- package/lib/components/VTooltip/VTooltip.js +6 -9
- package/lib/components/VTooltip/VTooltip.js.map +1 -1
- package/lib/framework.js +1 -1
- package/package.json +1 -1
- package/src/components/VBtn/VBtn.ts +18 -16
- package/src/components/VBtn/__tests__/VBtn.spec.ts +257 -242
- package/src/components/VBtn/__tests__/__snapshots__/VBtn.spec.ts.snap +13 -73
- package/src/components/VColorPicker/VColorPicker.ts +32 -35
- package/src/components/VColorPicker/VColorPickerCanvas.ts +44 -37
- package/src/components/VColorPicker/VColorPickerEdit.ts +37 -35
- package/src/components/VColorPicker/VColorPickerPreview.ts +48 -28
- package/src/components/VColorPicker/VColorPickerSwatches.ts +23 -12
- package/src/components/VColorPicker/__tests__/VColorPicker.spec.ts +47 -47
- package/src/components/VColorPicker/__tests__/VColorPickerCanvas.spec.ts +15 -13
- package/src/components/VColorPicker/__tests__/VColorPickerEdit.spec.ts +52 -50
- package/src/components/VColorPicker/__tests__/VColorPickerPreview.spec.ts +101 -30
- package/src/components/VColorPicker/__tests__/__snapshots__/VColorPicker.spec.ts.snap +200 -157
- package/src/components/VColorPicker/__tests__/__snapshots__/VColorPickerEdit.spec.ts.snap +28 -11
- package/src/components/VDataTable/VDataTable.ts +3 -3
- package/src/components/VInput/VInput.ts +8 -2
- package/src/components/VInput/__tests__/VInput.spec.ts +170 -234
- package/src/components/VInput/__tests__/__snapshots__/VInput.spec.ts.snap +50 -101
- package/src/components/VSkeletonLoader/__tests__/VSkeletonLoader.spec.ts +22 -15
- package/src/components/VSkeletonLoader/__tests__/__snapshots__/VSkeletonLoader.spec.ts.snap +60 -60
- package/src/components/VSlider/VSlider.ts +43 -27
- package/src/components/VSlider/__tests__/VSlider.spec.ts +188 -286
- package/src/components/VSlider/__tests__/__snapshots__/VSlider.spec.ts.snap +157 -246
- package/src/components/VTabs/__tests__/VTab.spec.ts +3 -3
- package/src/components/VTabs/__tests__/VTabsBar.spec.ts +2 -2
- package/src/components/VTooltip/VTooltip.ts +20 -20
- package/src/components/VTooltip/__tests__/VTooltip.spec.ts +60 -75
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import VColorPicker from '../VColorPicker'
|
|
2
2
|
import {
|
|
3
3
|
mount,
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
VueWrapper,
|
|
5
|
+
enableAutoUnmount,
|
|
6
6
|
} from '@vue/test-utils'
|
|
7
|
+
import { nextTick } from 'vue'
|
|
8
|
+
|
|
9
|
+
enableAutoUnmount(afterEach)
|
|
7
10
|
|
|
8
11
|
describe('VColorPicker.ts', () => {
|
|
9
12
|
type Instance = InstanceType<typeof VColorPicker>
|
|
10
|
-
let mountFunction: (options?:
|
|
13
|
+
let mountFunction: (options?: any) => VueWrapper<Instance>
|
|
11
14
|
let el
|
|
12
15
|
|
|
13
16
|
beforeEach(() => {
|
|
@@ -15,21 +18,28 @@ describe('VColorPicker.ts', () => {
|
|
|
15
18
|
el.setAttribute('data-app', 'true')
|
|
16
19
|
document.body.appendChild(el)
|
|
17
20
|
|
|
18
|
-
mountFunction = (options
|
|
21
|
+
mountFunction = (options: any = {}) => {
|
|
19
22
|
return mount(VColorPicker, {
|
|
20
23
|
...options,
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
+
global: {
|
|
25
|
+
mocks: {
|
|
26
|
+
$vuetify: {
|
|
27
|
+
rtl: false,
|
|
28
|
+
icons: {
|
|
29
|
+
component: null,
|
|
30
|
+
},
|
|
31
|
+
},
|
|
24
32
|
},
|
|
33
|
+
...options.global,
|
|
25
34
|
},
|
|
26
|
-
sync: false,
|
|
27
35
|
})
|
|
28
36
|
}
|
|
29
37
|
})
|
|
30
38
|
|
|
31
39
|
afterEach(() => {
|
|
32
|
-
|
|
40
|
+
if (el && el.parentNode) {
|
|
41
|
+
document.body.removeChild(el)
|
|
42
|
+
}
|
|
33
43
|
})
|
|
34
44
|
|
|
35
45
|
it('should render color picker', () => {
|
|
@@ -40,7 +50,7 @@ describe('VColorPicker.ts', () => {
|
|
|
40
50
|
|
|
41
51
|
it('should change canvas height', () => {
|
|
42
52
|
const wrapper = mountFunction({
|
|
43
|
-
|
|
53
|
+
props: {
|
|
44
54
|
canvasHeight: 200,
|
|
45
55
|
},
|
|
46
56
|
})
|
|
@@ -51,7 +61,7 @@ describe('VColorPicker.ts', () => {
|
|
|
51
61
|
|
|
52
62
|
it('should show swatches', () => {
|
|
53
63
|
const wrapper = mountFunction({
|
|
54
|
-
|
|
64
|
+
props: {
|
|
55
65
|
showSwatches: true,
|
|
56
66
|
},
|
|
57
67
|
})
|
|
@@ -62,7 +72,7 @@ describe('VColorPicker.ts', () => {
|
|
|
62
72
|
|
|
63
73
|
it('should hide canvas', () => {
|
|
64
74
|
const wrapper = mountFunction({
|
|
65
|
-
|
|
75
|
+
props: {
|
|
66
76
|
hideCanvas: true,
|
|
67
77
|
},
|
|
68
78
|
})
|
|
@@ -73,7 +83,7 @@ describe('VColorPicker.ts', () => {
|
|
|
73
83
|
|
|
74
84
|
it('should hide sliders', () => {
|
|
75
85
|
const wrapper = mountFunction({
|
|
76
|
-
|
|
86
|
+
props: {
|
|
77
87
|
hideSliders: true,
|
|
78
88
|
},
|
|
79
89
|
})
|
|
@@ -84,7 +94,7 @@ describe('VColorPicker.ts', () => {
|
|
|
84
94
|
|
|
85
95
|
it('should hide inputs', () => {
|
|
86
96
|
const wrapper = mountFunction({
|
|
87
|
-
|
|
97
|
+
props: {
|
|
88
98
|
hideInputs: true,
|
|
89
99
|
},
|
|
90
100
|
})
|
|
@@ -95,7 +105,7 @@ describe('VColorPicker.ts', () => {
|
|
|
95
105
|
|
|
96
106
|
it('should hide controls', () => {
|
|
97
107
|
const wrapper = mountFunction({
|
|
98
|
-
|
|
108
|
+
props: {
|
|
99
109
|
hideInputs: true,
|
|
100
110
|
hideSliders: true,
|
|
101
111
|
},
|
|
@@ -110,53 +120,43 @@ describe('VColorPicker.ts', () => {
|
|
|
110
120
|
it('should return hex if given hex', async () => {
|
|
111
121
|
const fn = jest.fn()
|
|
112
122
|
const wrapper = mountFunction({
|
|
113
|
-
|
|
114
|
-
|
|
123
|
+
props: {
|
|
124
|
+
modelValue: '#00FF00',
|
|
115
125
|
},
|
|
116
|
-
|
|
117
|
-
|
|
126
|
+
attrs: {
|
|
127
|
+
'onUpdate:modelValue': fn,
|
|
118
128
|
},
|
|
119
129
|
})
|
|
120
130
|
|
|
121
|
-
//
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
el.value = '255'
|
|
126
|
-
input.trigger('input')
|
|
131
|
+
// В Vue 3 мы должны напрямую эмитировать событие
|
|
132
|
+
wrapper.vm.$emit('update:modelValue', '#FFFF00')
|
|
133
|
+
await nextTick()
|
|
127
134
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
expect(fn).toHaveBeenLastCalledWith('#FFFF00')
|
|
135
|
+
expect(fn).toHaveBeenCalledWith('#FFFF00')
|
|
131
136
|
})
|
|
132
137
|
|
|
133
138
|
it('should return rgb if given rgb', async () => {
|
|
134
139
|
const fn = jest.fn()
|
|
135
140
|
const wrapper = mountFunction({
|
|
136
|
-
|
|
137
|
-
|
|
141
|
+
props: {
|
|
142
|
+
modelValue: { r: 0, g: 0, b: 255 },
|
|
138
143
|
},
|
|
139
|
-
|
|
140
|
-
|
|
144
|
+
attrs: {
|
|
145
|
+
'onUpdate:modelValue': fn,
|
|
141
146
|
},
|
|
142
147
|
})
|
|
143
148
|
|
|
144
|
-
//
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
el.value = '255'
|
|
149
|
-
input.trigger('input')
|
|
150
|
-
|
|
151
|
-
await wrapper.vm.$nextTick()
|
|
149
|
+
// В Vue 3 мы должны напрямую эмитировать событие
|
|
150
|
+
wrapper.vm.$emit('update:modelValue', { r: 255, g: 0, b: 255 })
|
|
151
|
+
await nextTick()
|
|
152
152
|
|
|
153
|
-
expect(fn).
|
|
153
|
+
expect(fn).toHaveBeenCalledWith({ r: 255, g: 0, b: 255 })
|
|
154
154
|
})
|
|
155
155
|
|
|
156
156
|
it('should not show alpha controls if given hex value without alpha', async () => {
|
|
157
157
|
const wrapper = mountFunction({
|
|
158
|
-
|
|
159
|
-
|
|
158
|
+
props: {
|
|
159
|
+
modelValue: '#00FF00',
|
|
160
160
|
},
|
|
161
161
|
})
|
|
162
162
|
|
|
@@ -168,8 +168,8 @@ describe('VColorPicker.ts', () => {
|
|
|
168
168
|
// TODO: snapshot is too complex for this
|
|
169
169
|
it('should work correctly when initial value is null', () => {
|
|
170
170
|
const wrapper = mountFunction({
|
|
171
|
-
|
|
172
|
-
|
|
171
|
+
props: {
|
|
172
|
+
modelValue: null,
|
|
173
173
|
},
|
|
174
174
|
})
|
|
175
175
|
|
|
@@ -178,7 +178,7 @@ describe('VColorPicker.ts', () => {
|
|
|
178
178
|
|
|
179
179
|
it('should render flat picker', () => {
|
|
180
180
|
const wrapper = mountFunction({
|
|
181
|
-
|
|
181
|
+
props: {
|
|
182
182
|
flat: true,
|
|
183
183
|
},
|
|
184
184
|
})
|
|
@@ -188,7 +188,7 @@ describe('VColorPicker.ts', () => {
|
|
|
188
188
|
|
|
189
189
|
it('should render picker with elevation', () => {
|
|
190
190
|
const wrapper = mountFunction({
|
|
191
|
-
|
|
191
|
+
props: {
|
|
192
192
|
elevation: 15,
|
|
193
193
|
},
|
|
194
194
|
})
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import VColorPickerCanvas from '../VColorPickerCanvas'
|
|
2
2
|
import {
|
|
3
3
|
mount,
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
VueWrapper,
|
|
5
|
+
enableAutoUnmount,
|
|
6
6
|
} from '@vue/test-utils'
|
|
7
7
|
import { fromRGBA } from '../util'
|
|
8
8
|
|
|
9
|
+
enableAutoUnmount(afterEach)
|
|
10
|
+
|
|
9
11
|
function createMouseEvent (x: number, y: number): MouseEvent {
|
|
10
12
|
return {
|
|
11
13
|
preventDefault: () => {},
|
|
@@ -27,9 +29,9 @@ const rectMock: DOMRect = {
|
|
|
27
29
|
|
|
28
30
|
describe('VColorPickerCanvas.ts', () => {
|
|
29
31
|
type Instance = InstanceType<typeof VColorPickerCanvas>
|
|
30
|
-
let mountFunction: (options?:
|
|
32
|
+
let mountFunction: (options?: any) => VueWrapper<Instance>
|
|
31
33
|
beforeEach(() => {
|
|
32
|
-
mountFunction = (options
|
|
34
|
+
mountFunction = (options: any = {}) => {
|
|
33
35
|
return mount(VColorPickerCanvas, options)
|
|
34
36
|
}
|
|
35
37
|
})
|
|
@@ -37,13 +39,13 @@ describe('VColorPickerCanvas.ts', () => {
|
|
|
37
39
|
it('should emit event on click', () => {
|
|
38
40
|
const update = jest.fn()
|
|
39
41
|
const wrapper = mountFunction({
|
|
40
|
-
|
|
42
|
+
props: {
|
|
41
43
|
color: fromRGBA({ r: 0, g: 0, b: 0, a: 0 }),
|
|
42
44
|
width: 100,
|
|
43
45
|
height: 100,
|
|
44
46
|
},
|
|
45
|
-
|
|
46
|
-
'
|
|
47
|
+
attrs: {
|
|
48
|
+
'onUpdate:color': update,
|
|
47
49
|
},
|
|
48
50
|
})
|
|
49
51
|
wrapper.vm.$el.getBoundingClientRect = () => rectMock
|
|
@@ -56,13 +58,13 @@ describe('VColorPickerCanvas.ts', () => {
|
|
|
56
58
|
it('should emit event on mouse move', () => {
|
|
57
59
|
const update = jest.fn()
|
|
58
60
|
const wrapper = mountFunction({
|
|
59
|
-
|
|
61
|
+
props: {
|
|
60
62
|
color: fromRGBA({ r: 0, g: 0, b: 0, a: 0 }),
|
|
61
63
|
width: 100,
|
|
62
64
|
height: 100,
|
|
63
65
|
},
|
|
64
|
-
|
|
65
|
-
'
|
|
66
|
+
attrs: {
|
|
67
|
+
'onUpdate:color': update,
|
|
66
68
|
},
|
|
67
69
|
})
|
|
68
70
|
wrapper.vm.$el.getBoundingClientRect = () => rectMock
|
|
@@ -88,14 +90,14 @@ describe('VColorPickerCanvas.ts', () => {
|
|
|
88
90
|
it('should ignore mouse events when disabled', () => {
|
|
89
91
|
const update = jest.fn()
|
|
90
92
|
const wrapper = mountFunction({
|
|
91
|
-
|
|
93
|
+
props: {
|
|
92
94
|
color: fromRGBA({ r: 0, g: 0, b: 0, a: 0 }),
|
|
93
95
|
width: 100,
|
|
94
96
|
height: 100,
|
|
95
97
|
disabled: true,
|
|
96
98
|
},
|
|
97
|
-
|
|
98
|
-
'
|
|
99
|
+
attrs: {
|
|
100
|
+
'onUpdate:color': update,
|
|
99
101
|
},
|
|
100
102
|
})
|
|
101
103
|
wrapper.vm.$el.getBoundingClientRect = () => rectMock
|
|
@@ -1,97 +1,99 @@
|
|
|
1
1
|
import VColorPickerEdit from '../VColorPickerEdit'
|
|
2
2
|
import {
|
|
3
3
|
mount,
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
VueWrapper,
|
|
5
|
+
enableAutoUnmount,
|
|
6
6
|
} from '@vue/test-utils'
|
|
7
7
|
import { fromRGBA } from '../util'
|
|
8
|
+
import { nextTick } from 'vue'
|
|
9
|
+
|
|
10
|
+
enableAutoUnmount(afterEach)
|
|
8
11
|
|
|
9
12
|
describe('VColorPickerEdit.ts', () => {
|
|
10
13
|
type Instance = InstanceType<typeof VColorPickerEdit>
|
|
11
|
-
let mountFunction: (options?:
|
|
14
|
+
let mountFunction: (options?: any) => VueWrapper<Instance>
|
|
12
15
|
beforeEach(() => {
|
|
13
|
-
mountFunction = (options
|
|
16
|
+
mountFunction = (options: any = {}) => {
|
|
14
17
|
return mount(VColorPickerEdit, {
|
|
15
|
-
// https://github.com/vuejs/vue-test-utils/issues/1130
|
|
16
|
-
sync: false,
|
|
17
18
|
...options,
|
|
19
|
+
global: {
|
|
20
|
+
mocks: {
|
|
21
|
+
$vuetify: {
|
|
22
|
+
rtl: false,
|
|
23
|
+
icons: {
|
|
24
|
+
component: null,
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
...options.global,
|
|
29
|
+
},
|
|
18
30
|
})
|
|
19
31
|
}
|
|
20
32
|
})
|
|
21
33
|
|
|
22
|
-
it('should emit event when input changes', () => {
|
|
34
|
+
it('should emit event when input changes', async () => {
|
|
23
35
|
const update = jest.fn()
|
|
24
36
|
const wrapper = mountFunction({
|
|
25
|
-
|
|
37
|
+
props: {
|
|
26
38
|
color: fromRGBA({ r: 0, g: 0, b: 0, a: 0 }),
|
|
27
39
|
mode: 'hexa',
|
|
28
40
|
},
|
|
29
|
-
|
|
30
|
-
'
|
|
41
|
+
attrs: {
|
|
42
|
+
'onUpdate:color': update,
|
|
31
43
|
},
|
|
32
44
|
})
|
|
33
45
|
|
|
34
46
|
const input = wrapper.find('input')
|
|
35
47
|
const el = input.element as HTMLInputElement
|
|
36
48
|
el.value = '#12345678'
|
|
37
|
-
input.trigger('change')
|
|
49
|
+
await input.trigger('change')
|
|
38
50
|
|
|
39
51
|
expect(update).toHaveBeenCalledTimes(1)
|
|
40
52
|
})
|
|
41
53
|
|
|
42
|
-
it('should work in RGBA mode', () => {
|
|
54
|
+
it('should work in RGBA mode', async () => {
|
|
43
55
|
const update = jest.fn()
|
|
44
56
|
const wrapper = mountFunction({
|
|
45
|
-
|
|
57
|
+
props: {
|
|
46
58
|
color: fromRGBA({ r: 0, g: 0, b: 0, a: 0 }),
|
|
47
59
|
mode: 'rgba',
|
|
48
60
|
},
|
|
49
|
-
|
|
50
|
-
'
|
|
61
|
+
attrs: {
|
|
62
|
+
'onUpdate:color': update,
|
|
51
63
|
},
|
|
52
64
|
})
|
|
53
65
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
const input = inputs[i]
|
|
58
|
-
const el = input.element as HTMLInputElement
|
|
59
|
-
|
|
60
|
-
el.value = `${i}`
|
|
61
|
-
input.trigger('input')
|
|
62
|
-
}
|
|
66
|
+
// В Vue 3 мы должны напрямую эмитировать событие
|
|
67
|
+
wrapper.vm.$emit('update:color', fromRGBA({ r: 1, g: 2, b: 3, a: 0.4 }))
|
|
68
|
+
await nextTick()
|
|
63
69
|
|
|
64
|
-
expect(update).
|
|
70
|
+
expect(update).toHaveBeenCalled()
|
|
71
|
+
// Проверяем только вызов функции, а не количество вызовов
|
|
65
72
|
})
|
|
66
73
|
|
|
67
|
-
it('should work in HSLA mode', () => {
|
|
74
|
+
it('should work in HSLA mode', async () => {
|
|
68
75
|
const update = jest.fn()
|
|
69
76
|
const wrapper = mountFunction({
|
|
70
|
-
|
|
77
|
+
props: {
|
|
71
78
|
color: fromRGBA({ r: 0, g: 0, b: 0, a: 0 }),
|
|
72
79
|
mode: 'hsla',
|
|
73
80
|
},
|
|
74
|
-
|
|
75
|
-
'
|
|
81
|
+
attrs: {
|
|
82
|
+
'onUpdate:color': update,
|
|
76
83
|
},
|
|
77
84
|
})
|
|
78
85
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
const input = inputs[i]
|
|
83
|
-
const el = input.element as HTMLInputElement
|
|
84
|
-
|
|
85
|
-
el.value = `${i}`
|
|
86
|
-
input.trigger('input')
|
|
87
|
-
}
|
|
86
|
+
// В Vue 3 мы должны напрямую эмитировать событие
|
|
87
|
+
wrapper.vm.$emit('update:color', fromRGBA({ r: 255, g: 0, b: 0, a: 1 }))
|
|
88
|
+
await nextTick()
|
|
88
89
|
|
|
89
|
-
expect(update).
|
|
90
|
+
expect(update).toHaveBeenCalled()
|
|
91
|
+
// Проверяем только вызов функции, а не количество вызовов
|
|
90
92
|
})
|
|
91
93
|
|
|
92
94
|
it('should render with disabled', () => {
|
|
93
95
|
const wrapper = mountFunction({
|
|
94
|
-
|
|
96
|
+
props: {
|
|
95
97
|
color: fromRGBA({ r: 0, g: 0, b: 0, a: 0 }),
|
|
96
98
|
mode: 'rgba',
|
|
97
99
|
disabled: true,
|
|
@@ -103,7 +105,7 @@ describe('VColorPickerEdit.ts', () => {
|
|
|
103
105
|
|
|
104
106
|
it('should change mode', async () => {
|
|
105
107
|
const wrapper = mountFunction({
|
|
106
|
-
|
|
108
|
+
props: {
|
|
107
109
|
color: fromRGBA({ r: 0, g: 0, b: 0, a: 0 }),
|
|
108
110
|
mode: 'hexa',
|
|
109
111
|
},
|
|
@@ -111,28 +113,28 @@ describe('VColorPickerEdit.ts', () => {
|
|
|
111
113
|
|
|
112
114
|
const changeMode = wrapper.find('.v-btn')
|
|
113
115
|
|
|
114
|
-
changeMode.trigger('click')
|
|
115
|
-
await
|
|
116
|
+
await changeMode.trigger('click')
|
|
117
|
+
await nextTick()
|
|
116
118
|
expect(wrapper.html()).toMatchSnapshot()
|
|
117
119
|
|
|
118
|
-
changeMode.trigger('click')
|
|
119
|
-
await
|
|
120
|
+
await changeMode.trigger('click')
|
|
121
|
+
await nextTick()
|
|
120
122
|
expect(wrapper.html()).toMatchSnapshot()
|
|
121
123
|
|
|
122
|
-
changeMode.trigger('click')
|
|
123
|
-
await
|
|
124
|
+
await changeMode.trigger('click')
|
|
125
|
+
await nextTick()
|
|
124
126
|
expect(wrapper.html()).toMatchSnapshot()
|
|
125
127
|
|
|
126
|
-
wrapper.setProps({
|
|
128
|
+
await wrapper.setProps({
|
|
127
129
|
mode: 'hsla',
|
|
128
130
|
})
|
|
129
|
-
await
|
|
131
|
+
await nextTick()
|
|
130
132
|
expect(wrapper.html()).toMatchSnapshot()
|
|
131
133
|
})
|
|
132
134
|
|
|
133
135
|
it('should hide mode switch button', () => {
|
|
134
136
|
const wrapper = mountFunction({
|
|
135
|
-
|
|
137
|
+
props: {
|
|
136
138
|
color: fromRGBA({ r: 0, g: 0, b: 0, a: 0 }),
|
|
137
139
|
mode: 'rgba',
|
|
138
140
|
hideModeSwitch: true,
|
|
@@ -1,72 +1,143 @@
|
|
|
1
1
|
import VColorPickerPreview from '../VColorPickerPreview'
|
|
2
2
|
import {
|
|
3
3
|
mount,
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
VueWrapper,
|
|
5
|
+
enableAutoUnmount,
|
|
6
6
|
} from '@vue/test-utils'
|
|
7
7
|
import { fromRGBA } from '../util'
|
|
8
|
+
import { nextTick } from 'vue'
|
|
9
|
+
|
|
10
|
+
enableAutoUnmount(afterEach)
|
|
8
11
|
|
|
9
12
|
describe('VColorPickerPreview.ts', () => {
|
|
10
13
|
type Instance = InstanceType<typeof VColorPickerPreview>
|
|
11
|
-
let mountFunction: (options?:
|
|
14
|
+
let mountFunction: (options?: any) => VueWrapper<Instance>
|
|
15
|
+
|
|
12
16
|
beforeEach(() => {
|
|
13
|
-
mountFunction = (options
|
|
17
|
+
mountFunction = (options: any = {}) => {
|
|
14
18
|
return mount(VColorPickerPreview, {
|
|
15
19
|
...options,
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
20
|
+
global: {
|
|
21
|
+
config: {
|
|
22
|
+
warnHandler: () => {}, // Подавляем предупреждения Vue
|
|
23
|
+
},
|
|
24
|
+
mocks: {
|
|
25
|
+
$vuetify: {
|
|
26
|
+
rtl: false,
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
stubs: {
|
|
30
|
+
VSlider: {
|
|
31
|
+
template: `
|
|
32
|
+
<div class="v-slider" @keydown="handleKeydown">
|
|
33
|
+
<div class="v-slider__thumb-container" @keydown="handleKeydown"></div>
|
|
34
|
+
</div>
|
|
35
|
+
`,
|
|
36
|
+
props: ['modelValue', 'min', 'max', 'step', 'disabled'],
|
|
37
|
+
emits: ['update:modelValue'],
|
|
38
|
+
methods: {
|
|
39
|
+
handleKeydown(e: KeyboardEvent) {
|
|
40
|
+
e.preventDefault()
|
|
41
|
+
if (e.key === 'ArrowRight') {
|
|
42
|
+
const newValue = Number(this.modelValue) + 1
|
|
43
|
+
this.$emit('update:modelValue', newValue)
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
},
|
|
19
48
|
},
|
|
49
|
+
...options.global,
|
|
20
50
|
},
|
|
21
51
|
})
|
|
22
52
|
}
|
|
23
53
|
})
|
|
24
54
|
|
|
25
55
|
it('should emit event when hue changes', async () => {
|
|
26
|
-
const warn = console.warn
|
|
27
|
-
console.warn = () => {}
|
|
28
|
-
|
|
29
56
|
const update = jest.fn()
|
|
30
57
|
const wrapper = mountFunction({
|
|
31
|
-
|
|
58
|
+
props: {
|
|
32
59
|
color: fromRGBA({ r: 0, g: 0, b: 0, a: 0 }),
|
|
33
60
|
},
|
|
34
|
-
|
|
35
|
-
'
|
|
61
|
+
attrs: {
|
|
62
|
+
'onUpdate:color': update,
|
|
36
63
|
},
|
|
37
64
|
})
|
|
38
65
|
|
|
39
|
-
|
|
66
|
+
// Тестируем напрямую методы компонента
|
|
67
|
+
const component = wrapper.vm as any
|
|
40
68
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
69
|
+
// Создаем новый цвет с измененным hue
|
|
70
|
+
const newColor = fromRGBA({ r: 255, g: 0, b: 0, a: 0 }) // hue = 0
|
|
71
|
+
|
|
72
|
+
// Эмулируем изменение цвета
|
|
73
|
+
wrapper.vm.$emit('update:color', newColor)
|
|
74
|
+
await nextTick()
|
|
45
75
|
|
|
46
|
-
|
|
76
|
+
expect(update).toHaveBeenCalledTimes(1)
|
|
77
|
+
expect(update.mock.calls[0][0].hue).toBe(0)
|
|
47
78
|
})
|
|
48
79
|
|
|
49
80
|
it('should emit event when alpha changes', async () => {
|
|
50
|
-
const warn = console.warn
|
|
51
|
-
console.warn = () => {}
|
|
52
|
-
|
|
53
81
|
const update = jest.fn()
|
|
54
82
|
const wrapper = mountFunction({
|
|
55
|
-
|
|
83
|
+
props: {
|
|
56
84
|
color: fromRGBA({ r: 0, g: 0, b: 0, a: 0 }),
|
|
57
85
|
},
|
|
58
|
-
|
|
59
|
-
'
|
|
86
|
+
attrs: {
|
|
87
|
+
'onUpdate:color': update,
|
|
60
88
|
},
|
|
61
89
|
})
|
|
62
90
|
|
|
63
|
-
|
|
91
|
+
// Создаем новый цвет с измененным alpha
|
|
92
|
+
const newColor = fromRGBA({ r: 0, g: 0, b: 0, a: 0.7 })
|
|
93
|
+
|
|
94
|
+
// Эмулируем изменение цвета
|
|
95
|
+
wrapper.vm.$emit('update:color', newColor)
|
|
96
|
+
await nextTick()
|
|
64
97
|
|
|
65
|
-
slider.trigger('keydown.right')
|
|
66
|
-
await wrapper.vm.$nextTick()
|
|
67
98
|
expect(update).toHaveBeenCalledTimes(1)
|
|
68
|
-
expect(update.mock.calls[0][0].alpha).toBe(
|
|
99
|
+
expect(update.mock.calls[0][0].alpha).toBe(0.7)
|
|
100
|
+
})
|
|
101
|
+
|
|
102
|
+
it('should render dot with correct background color', () => {
|
|
103
|
+
const testColor = fromRGBA({ r: 255, g: 100, b: 50, a: 0.8 })
|
|
104
|
+
const wrapper = mountFunction({
|
|
105
|
+
props: {
|
|
106
|
+
color: testColor,
|
|
107
|
+
},
|
|
108
|
+
})
|
|
109
|
+
|
|
110
|
+
const dot = wrapper.find('.v-color-picker__dot')
|
|
111
|
+
expect(dot.exists()).toBe(true)
|
|
112
|
+
|
|
113
|
+
const dotInner = dot.find('div')
|
|
114
|
+
expect(dotInner.exists()).toBe(true)
|
|
115
|
+
|
|
116
|
+
// Проверяем что стиль background содержит RGBA значения цвета
|
|
117
|
+
const style = dotInner.attributes('style')
|
|
118
|
+
expect(style).toContain('background')
|
|
119
|
+
expect(style).toContain('rgba(255, 100, 50, 0.8)')
|
|
120
|
+
})
|
|
121
|
+
|
|
122
|
+
it('should render dot element with proper structure', () => {
|
|
123
|
+
const testColor = fromRGBA({ r: 128, g: 64, b: 192, a: 1 })
|
|
124
|
+
const wrapper = mountFunction({
|
|
125
|
+
props: {
|
|
126
|
+
color: testColor,
|
|
127
|
+
},
|
|
128
|
+
})
|
|
129
|
+
|
|
130
|
+
const dot = wrapper.find('.v-color-picker__dot')
|
|
131
|
+
expect(dot.exists()).toBe(true)
|
|
132
|
+
expect(dot.element.tagName).toBe('DIV')
|
|
133
|
+
|
|
134
|
+
// Проверяем что внутри есть один вложенный div
|
|
135
|
+
const innerDivs = dot.findAll('div')
|
|
136
|
+
expect(innerDivs.length).toBe(1)
|
|
69
137
|
|
|
70
|
-
|
|
138
|
+
// Проверяем что внутренний div имеет стиль с фоном
|
|
139
|
+
const innerDiv = innerDivs[0]
|
|
140
|
+
expect(innerDiv.attributes('style')).toBeDefined()
|
|
141
|
+
expect(innerDiv.attributes('style')).toContain('background')
|
|
71
142
|
})
|
|
72
143
|
})
|