@furystack/shades-common-components 12.0.0 → 12.1.0
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/CHANGELOG.md +56 -0
- package/README.md +26 -0
- package/esm/components/cache-view.d.ts +46 -0
- package/esm/components/cache-view.d.ts.map +1 -0
- package/esm/components/cache-view.js +65 -0
- package/esm/components/cache-view.js.map +1 -0
- package/esm/components/cache-view.spec.d.ts +2 -0
- package/esm/components/cache-view.spec.d.ts.map +1 -0
- package/esm/components/cache-view.spec.js +183 -0
- package/esm/components/cache-view.spec.js.map +1 -0
- package/esm/components/command-palette/command-palette-input.spec.js +148 -148
- package/esm/components/command-palette/command-palette-input.spec.js.map +1 -1
- package/esm/components/command-palette/command-palette-suggestion-list.spec.js +258 -258
- package/esm/components/command-palette/command-palette-suggestion-list.spec.js.map +1 -1
- package/esm/components/context-menu/context-menu-manager.spec.js +211 -217
- package/esm/components/context-menu/context-menu-manager.spec.js.map +1 -1
- package/esm/components/data-grid/body.spec.js +173 -173
- package/esm/components/data-grid/body.spec.js.map +1 -1
- package/esm/components/data-grid/data-grid.spec.js +39 -130
- package/esm/components/data-grid/data-grid.spec.js.map +1 -1
- package/esm/components/index.d.ts +1 -0
- package/esm/components/index.d.ts.map +1 -1
- package/esm/components/index.js +1 -0
- package/esm/components/index.js.map +1 -1
- package/esm/components/skeleton.d.ts.map +1 -1
- package/esm/components/skeleton.js +2 -11
- package/esm/components/skeleton.js.map +1 -1
- package/esm/components/skeleton.spec.js +6 -55
- package/esm/components/skeleton.spec.js.map +1 -1
- package/esm/services/click-away-service.spec.js +14 -12
- package/esm/services/click-away-service.spec.js.map +1 -1
- package/esm/services/list-service.spec.js +170 -141
- package/esm/services/list-service.spec.js.map +1 -1
- package/esm/services/tree-service.spec.js +190 -159
- package/esm/services/tree-service.spec.js.map +1 -1
- package/package.json +8 -8
- package/src/components/cache-view.spec.tsx +210 -0
- package/src/components/cache-view.tsx +103 -0
- package/src/components/command-palette/command-palette-input.spec.tsx +183 -194
- package/src/components/command-palette/command-palette-suggestion-list.spec.tsx +303 -321
- package/src/components/context-menu/context-menu-manager.spec.ts +213 -258
- package/src/components/data-grid/body.spec.tsx +266 -276
- package/src/components/data-grid/data-grid.spec.tsx +137 -232
- package/src/components/index.ts +1 -0
- package/src/components/skeleton.spec.tsx +6 -73
- package/src/components/skeleton.tsx +2 -11
- package/src/services/click-away-service.spec.ts +14 -16
- package/src/services/list-service.spec.ts +170 -172
- package/src/services/tree-service.spec.ts +191 -207
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { using } from '@furystack/utils'
|
|
1
2
|
import { describe, expect, it } from 'vitest'
|
|
2
3
|
import { ListService } from './list-service.js'
|
|
3
4
|
|
|
@@ -18,339 +19,336 @@ describe('ListService', () => {
|
|
|
18
19
|
describe('selection helpers', () => {
|
|
19
20
|
it('should check if item is selected', () => {
|
|
20
21
|
const { service, items } = createTestService()
|
|
21
|
-
service
|
|
22
|
+
using(service, () => {
|
|
23
|
+
service.selection.setValue([items[0]])
|
|
22
24
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
service[Symbol.dispose]()
|
|
25
|
+
expect(service.isSelected(items[0])).toBe(true)
|
|
26
|
+
expect(service.isSelected(items[1])).toBe(false)
|
|
27
|
+
})
|
|
27
28
|
})
|
|
28
29
|
|
|
29
30
|
it('should add item to selection', () => {
|
|
30
31
|
const { service, items } = createTestService()
|
|
31
|
-
service
|
|
32
|
-
|
|
33
|
-
expect(service.selection.getValue()).toContain(items[0])
|
|
32
|
+
using(service, () => {
|
|
33
|
+
service.addToSelection(items[0])
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
expect(service.selection.getValue()).toContain(items[0])
|
|
36
|
+
})
|
|
36
37
|
})
|
|
37
38
|
|
|
38
39
|
it('should remove item from selection', () => {
|
|
39
40
|
const { service, items } = createTestService()
|
|
40
|
-
service
|
|
41
|
-
|
|
41
|
+
using(service, () => {
|
|
42
|
+
service.selection.setValue([items[0], items[1]])
|
|
43
|
+
service.removeFromSelection(items[0])
|
|
42
44
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
service[Symbol.dispose]()
|
|
45
|
+
expect(service.selection.getValue()).not.toContain(items[0])
|
|
46
|
+
expect(service.selection.getValue()).toContain(items[1])
|
|
47
|
+
})
|
|
47
48
|
})
|
|
48
49
|
|
|
49
50
|
it('should toggle selection on', () => {
|
|
50
51
|
const { service, items } = createTestService()
|
|
51
|
-
service
|
|
52
|
-
|
|
53
|
-
expect(service.isSelected(items[0])).toBe(true)
|
|
52
|
+
using(service, () => {
|
|
53
|
+
service.toggleSelection(items[0])
|
|
54
54
|
|
|
55
|
-
|
|
55
|
+
expect(service.isSelected(items[0])).toBe(true)
|
|
56
|
+
})
|
|
56
57
|
})
|
|
57
58
|
|
|
58
59
|
it('should toggle selection off', () => {
|
|
59
60
|
const { service, items } = createTestService()
|
|
60
|
-
service
|
|
61
|
-
|
|
61
|
+
using(service, () => {
|
|
62
|
+
service.selection.setValue([items[0]])
|
|
63
|
+
service.toggleSelection(items[0])
|
|
62
64
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
service[Symbol.dispose]()
|
|
65
|
+
expect(service.isSelected(items[0])).toBe(false)
|
|
66
|
+
})
|
|
66
67
|
})
|
|
67
68
|
})
|
|
68
69
|
|
|
69
70
|
describe('handleKeyDown', () => {
|
|
70
71
|
it('should not handle keyboard when not focused', () => {
|
|
71
72
|
const { service, items } = createTestService()
|
|
72
|
-
service
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
service.handleKeyDown(new KeyboardEvent('keydown', { key: 'ArrowDown' }))
|
|
73
|
+
using(service, () => {
|
|
74
|
+
service.hasFocus.setValue(false)
|
|
75
|
+
service.focusedItem.setValue(items[0])
|
|
76
76
|
|
|
77
|
-
|
|
77
|
+
service.handleKeyDown(new KeyboardEvent('keydown', { key: 'ArrowDown' }))
|
|
78
78
|
|
|
79
|
-
|
|
79
|
+
expect(service.focusedItem.getValue()).toBe(items[0])
|
|
80
|
+
})
|
|
80
81
|
})
|
|
81
82
|
|
|
82
83
|
it('should handle ArrowDown to move focus to next item', () => {
|
|
83
84
|
const { service, items } = createTestService()
|
|
84
|
-
service
|
|
85
|
-
|
|
85
|
+
using(service, () => {
|
|
86
|
+
service.hasFocus.setValue(true)
|
|
87
|
+
service.focusedItem.setValue(items[0])
|
|
86
88
|
|
|
87
|
-
|
|
89
|
+
service.handleKeyDown(new KeyboardEvent('keydown', { key: 'ArrowDown' }))
|
|
88
90
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
service[Symbol.dispose]()
|
|
91
|
+
expect(service.focusedItem.getValue()).toBe(items[1])
|
|
92
|
+
})
|
|
92
93
|
})
|
|
93
94
|
|
|
94
95
|
it('should not move past last item on ArrowDown', () => {
|
|
95
96
|
const { service, items } = createTestService()
|
|
96
|
-
service
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
service.handleKeyDown(new KeyboardEvent('keydown', { key: 'ArrowDown' }))
|
|
97
|
+
using(service, () => {
|
|
98
|
+
service.hasFocus.setValue(true)
|
|
99
|
+
service.focusedItem.setValue(items[2])
|
|
100
100
|
|
|
101
|
-
|
|
101
|
+
service.handleKeyDown(new KeyboardEvent('keydown', { key: 'ArrowDown' }))
|
|
102
102
|
|
|
103
|
-
|
|
103
|
+
expect(service.focusedItem.getValue()).toBe(items[2])
|
|
104
|
+
})
|
|
104
105
|
})
|
|
105
106
|
|
|
106
107
|
it('should handle ArrowUp to move focus to previous item', () => {
|
|
107
108
|
const { service, items } = createTestService()
|
|
108
|
-
service
|
|
109
|
-
|
|
109
|
+
using(service, () => {
|
|
110
|
+
service.hasFocus.setValue(true)
|
|
111
|
+
service.focusedItem.setValue(items[1])
|
|
110
112
|
|
|
111
|
-
|
|
113
|
+
service.handleKeyDown(new KeyboardEvent('keydown', { key: 'ArrowUp' }))
|
|
112
114
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
service[Symbol.dispose]()
|
|
115
|
+
expect(service.focusedItem.getValue()).toBe(items[0])
|
|
116
|
+
})
|
|
116
117
|
})
|
|
117
118
|
|
|
118
119
|
it('should not move past first item on ArrowUp', () => {
|
|
119
120
|
const { service, items } = createTestService()
|
|
120
|
-
service
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
service.handleKeyDown(new KeyboardEvent('keydown', { key: 'ArrowUp' }))
|
|
121
|
+
using(service, () => {
|
|
122
|
+
service.hasFocus.setValue(true)
|
|
123
|
+
service.focusedItem.setValue(items[0])
|
|
124
124
|
|
|
125
|
-
|
|
125
|
+
service.handleKeyDown(new KeyboardEvent('keydown', { key: 'ArrowUp' }))
|
|
126
126
|
|
|
127
|
-
|
|
127
|
+
expect(service.focusedItem.getValue()).toBe(items[0])
|
|
128
|
+
})
|
|
128
129
|
})
|
|
129
130
|
|
|
130
131
|
it('should handle Home to move focus to first item', () => {
|
|
131
132
|
const { service, items } = createTestService()
|
|
132
|
-
service
|
|
133
|
-
|
|
133
|
+
using(service, () => {
|
|
134
|
+
service.hasFocus.setValue(true)
|
|
135
|
+
service.focusedItem.setValue(items[2])
|
|
134
136
|
|
|
135
|
-
|
|
137
|
+
service.handleKeyDown(new KeyboardEvent('keydown', { key: 'Home' }))
|
|
136
138
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
service[Symbol.dispose]()
|
|
139
|
+
expect(service.focusedItem.getValue()).toBe(items[0])
|
|
140
|
+
})
|
|
140
141
|
})
|
|
141
142
|
|
|
142
143
|
it('should handle End to move focus to last item', () => {
|
|
143
144
|
const { service, items } = createTestService()
|
|
144
|
-
service
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
service.handleKeyDown(new KeyboardEvent('keydown', { key: 'End' }))
|
|
145
|
+
using(service, () => {
|
|
146
|
+
service.hasFocus.setValue(true)
|
|
147
|
+
service.focusedItem.setValue(items[0])
|
|
148
148
|
|
|
149
|
-
|
|
149
|
+
service.handleKeyDown(new KeyboardEvent('keydown', { key: 'End' }))
|
|
150
150
|
|
|
151
|
-
|
|
151
|
+
expect(service.focusedItem.getValue()).toBe(items[2])
|
|
152
|
+
})
|
|
152
153
|
})
|
|
153
154
|
|
|
154
155
|
it('should handle Space to toggle selection of focused item', () => {
|
|
155
156
|
const { service, items } = createTestService()
|
|
156
|
-
service
|
|
157
|
-
|
|
157
|
+
using(service, () => {
|
|
158
|
+
service.hasFocus.setValue(true)
|
|
159
|
+
service.focusedItem.setValue(items[0])
|
|
158
160
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
+
service.handleKeyDown(new KeyboardEvent('keydown', { key: ' ' }))
|
|
162
|
+
expect(service.selection.getValue()).toContain(items[0])
|
|
161
163
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
service[Symbol.dispose]()
|
|
164
|
+
service.handleKeyDown(new KeyboardEvent('keydown', { key: ' ' }))
|
|
165
|
+
expect(service.selection.getValue()).not.toContain(items[0])
|
|
166
|
+
})
|
|
166
167
|
})
|
|
167
168
|
|
|
168
169
|
it('should handle + to select all items', () => {
|
|
169
170
|
const { service, items } = createTestService()
|
|
170
|
-
service
|
|
171
|
-
|
|
172
|
-
service.handleKeyDown(new KeyboardEvent('keydown', { key: '+' }))
|
|
171
|
+
using(service, () => {
|
|
172
|
+
service.hasFocus.setValue(true)
|
|
173
173
|
|
|
174
|
-
|
|
175
|
-
expect(service.selection.getValue()).toEqual(items)
|
|
174
|
+
service.handleKeyDown(new KeyboardEvent('keydown', { key: '+' }))
|
|
176
175
|
|
|
177
|
-
|
|
176
|
+
expect(service.selection.getValue().length).toBe(3)
|
|
177
|
+
expect(service.selection.getValue()).toEqual(items)
|
|
178
|
+
})
|
|
178
179
|
})
|
|
179
180
|
|
|
180
181
|
it('should handle - to deselect all items', () => {
|
|
181
182
|
const { service, items } = createTestService()
|
|
182
|
-
service
|
|
183
|
-
|
|
183
|
+
using(service, () => {
|
|
184
|
+
service.hasFocus.setValue(true)
|
|
185
|
+
service.selection.setValue([...items])
|
|
184
186
|
|
|
185
|
-
|
|
187
|
+
service.handleKeyDown(new KeyboardEvent('keydown', { key: '-' }))
|
|
186
188
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
service[Symbol.dispose]()
|
|
189
|
+
expect(service.selection.getValue().length).toBe(0)
|
|
190
|
+
})
|
|
190
191
|
})
|
|
191
192
|
|
|
192
193
|
it('should handle * to invert selection', () => {
|
|
193
194
|
const { service, items } = createTestService()
|
|
194
|
-
service
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
service.handleKeyDown(new KeyboardEvent('keydown', { key: '*' }))
|
|
195
|
+
using(service, () => {
|
|
196
|
+
service.hasFocus.setValue(true)
|
|
197
|
+
service.selection.setValue([items[0]])
|
|
198
198
|
|
|
199
|
-
|
|
200
|
-
expect(selection).not.toContain(items[0])
|
|
201
|
-
expect(selection).toContain(items[1])
|
|
202
|
-
expect(selection).toContain(items[2])
|
|
199
|
+
service.handleKeyDown(new KeyboardEvent('keydown', { key: '*' }))
|
|
203
200
|
|
|
204
|
-
|
|
201
|
+
const selection = service.selection.getValue()
|
|
202
|
+
expect(selection).not.toContain(items[0])
|
|
203
|
+
expect(selection).toContain(items[1])
|
|
204
|
+
expect(selection).toContain(items[2])
|
|
205
|
+
})
|
|
205
206
|
})
|
|
206
207
|
|
|
207
208
|
it('should handle Insert to toggle selection and move to next item', () => {
|
|
208
209
|
const { service, items } = createTestService()
|
|
209
|
-
service
|
|
210
|
-
|
|
210
|
+
using(service, () => {
|
|
211
|
+
service.hasFocus.setValue(true)
|
|
212
|
+
service.focusedItem.setValue(items[0])
|
|
211
213
|
|
|
212
|
-
|
|
214
|
+
service.handleKeyDown(new KeyboardEvent('keydown', { key: 'Insert' }))
|
|
213
215
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
service[Symbol.dispose]()
|
|
216
|
+
expect(service.selection.getValue()).toContain(items[0])
|
|
217
|
+
expect(service.focusedItem.getValue()).toBe(items[1])
|
|
218
|
+
})
|
|
218
219
|
})
|
|
219
220
|
|
|
220
221
|
it('should handle Insert to deselect already selected item', () => {
|
|
221
222
|
const { service, items } = createTestService()
|
|
222
|
-
service
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
service.handleKeyDown(new KeyboardEvent('keydown', { key: 'Insert' }))
|
|
223
|
+
using(service, () => {
|
|
224
|
+
service.hasFocus.setValue(true)
|
|
225
|
+
service.focusedItem.setValue(items[0])
|
|
226
|
+
service.selection.setValue([items[0]])
|
|
227
227
|
|
|
228
|
-
|
|
229
|
-
expect(service.focusedItem.getValue()).toBe(items[1])
|
|
228
|
+
service.handleKeyDown(new KeyboardEvent('keydown', { key: 'Insert' }))
|
|
230
229
|
|
|
231
|
-
|
|
230
|
+
expect(service.selection.getValue()).not.toContain(items[0])
|
|
231
|
+
expect(service.focusedItem.getValue()).toBe(items[1])
|
|
232
|
+
})
|
|
232
233
|
})
|
|
233
234
|
|
|
234
235
|
it('should handle Tab to toggle focus', () => {
|
|
235
236
|
const { service } = createTestService()
|
|
236
|
-
service
|
|
237
|
+
using(service, () => {
|
|
238
|
+
service.hasFocus.setValue(true)
|
|
237
239
|
|
|
238
|
-
|
|
240
|
+
service.handleKeyDown(new KeyboardEvent('keydown', { key: 'Tab' }))
|
|
239
241
|
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
service[Symbol.dispose]()
|
|
242
|
+
expect(service.hasFocus.getValue()).toBe(false)
|
|
243
|
+
})
|
|
243
244
|
})
|
|
244
245
|
|
|
245
246
|
it('should handle Escape to clear selection and search term', () => {
|
|
246
247
|
const { service, items } = createTestService()
|
|
247
|
-
service
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
service.handleKeyDown(new KeyboardEvent('keydown', { key: 'Escape' }))
|
|
248
|
+
using(service, () => {
|
|
249
|
+
service.hasFocus.setValue(true)
|
|
250
|
+
service.selection.setValue([items[0], items[1]])
|
|
251
|
+
service.searchTerm.setValue('test')
|
|
252
252
|
|
|
253
|
-
|
|
254
|
-
expect(service.searchTerm.getValue()).toBe('')
|
|
253
|
+
service.handleKeyDown(new KeyboardEvent('keydown', { key: 'Escape' }))
|
|
255
254
|
|
|
256
|
-
|
|
255
|
+
expect(service.selection.getValue()).toEqual([])
|
|
256
|
+
expect(service.searchTerm.getValue()).toBe('')
|
|
257
|
+
})
|
|
257
258
|
})
|
|
258
259
|
|
|
259
260
|
it('should handle type-ahead search when searchField is set', () => {
|
|
260
261
|
const { service, items } = createTestService({ searchField: 'name' })
|
|
261
|
-
service
|
|
262
|
+
using(service, () => {
|
|
263
|
+
service.hasFocus.setValue(true)
|
|
262
264
|
|
|
263
|
-
|
|
265
|
+
service.handleKeyDown(new KeyboardEvent('keydown', { key: 'S' }))
|
|
264
266
|
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
service[Symbol.dispose]()
|
|
267
|
+
expect(service.searchTerm.getValue()).toBe('S')
|
|
268
|
+
expect(service.focusedItem.getValue()).toBe(items[1])
|
|
269
|
+
})
|
|
269
270
|
})
|
|
270
271
|
|
|
271
272
|
it('should accumulate type-ahead search characters', () => {
|
|
272
273
|
const { service, items } = createTestService({ searchField: 'name' })
|
|
273
|
-
service
|
|
274
|
-
|
|
275
|
-
service.handleKeyDown(new KeyboardEvent('keydown', { key: 'T' }))
|
|
276
|
-
service.handleKeyDown(new KeyboardEvent('keydown', { key: 'h' }))
|
|
277
|
-
service.handleKeyDown(new KeyboardEvent('keydown', { key: 'i' }))
|
|
274
|
+
using(service, () => {
|
|
275
|
+
service.hasFocus.setValue(true)
|
|
278
276
|
|
|
279
|
-
|
|
280
|
-
|
|
277
|
+
service.handleKeyDown(new KeyboardEvent('keydown', { key: 'T' }))
|
|
278
|
+
service.handleKeyDown(new KeyboardEvent('keydown', { key: 'h' }))
|
|
279
|
+
service.handleKeyDown(new KeyboardEvent('keydown', { key: 'i' }))
|
|
281
280
|
|
|
282
|
-
|
|
281
|
+
expect(service.searchTerm.getValue()).toBe('Thi')
|
|
282
|
+
expect(service.focusedItem.getValue()).toBe(items[2])
|
|
283
|
+
})
|
|
283
284
|
})
|
|
284
285
|
})
|
|
285
286
|
|
|
286
287
|
describe('handleItemClick', () => {
|
|
287
288
|
it('should set focused item on click', () => {
|
|
288
289
|
const { service, items } = createTestService()
|
|
290
|
+
using(service, () => {
|
|
291
|
+
service.handleItemClick(items[1], new MouseEvent('click'))
|
|
289
292
|
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
expect(service.focusedItem.getValue()).toBe(items[1])
|
|
293
|
-
|
|
294
|
-
service[Symbol.dispose]()
|
|
293
|
+
expect(service.focusedItem.getValue()).toBe(items[1])
|
|
294
|
+
})
|
|
295
295
|
})
|
|
296
296
|
|
|
297
297
|
it('should add to selection on Ctrl+Click', () => {
|
|
298
298
|
const { service, items } = createTestService()
|
|
299
|
+
using(service, () => {
|
|
300
|
+
service.handleItemClick(items[0], new MouseEvent('click', { ctrlKey: true }))
|
|
299
301
|
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
expect(service.selection.getValue()).toContain(items[0])
|
|
303
|
-
|
|
304
|
-
service[Symbol.dispose]()
|
|
302
|
+
expect(service.selection.getValue()).toContain(items[0])
|
|
303
|
+
})
|
|
305
304
|
})
|
|
306
305
|
|
|
307
306
|
it('should remove from selection on Ctrl+Click when already selected', () => {
|
|
308
307
|
const { service, items } = createTestService()
|
|
309
|
-
service
|
|
308
|
+
using(service, () => {
|
|
309
|
+
service.selection.setValue([items[0]])
|
|
310
310
|
|
|
311
|
-
|
|
311
|
+
service.handleItemClick(items[0], new MouseEvent('click', { ctrlKey: true }))
|
|
312
312
|
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
service[Symbol.dispose]()
|
|
313
|
+
expect(service.selection.getValue()).not.toContain(items[0])
|
|
314
|
+
})
|
|
316
315
|
})
|
|
317
316
|
|
|
318
317
|
it('should select range on Shift+Click', () => {
|
|
319
318
|
const { service, items } = createTestService()
|
|
320
|
-
service
|
|
321
|
-
|
|
322
|
-
service.handleItemClick(items[2], new MouseEvent('click', { shiftKey: true }))
|
|
319
|
+
using(service, () => {
|
|
320
|
+
service.focusedItem.setValue(items[0])
|
|
323
321
|
|
|
324
|
-
|
|
325
|
-
expect(selection).toContain(items[0])
|
|
326
|
-
expect(selection).toContain(items[1])
|
|
327
|
-
expect(selection).toContain(items[2])
|
|
322
|
+
service.handleItemClick(items[2], new MouseEvent('click', { shiftKey: true }))
|
|
328
323
|
|
|
329
|
-
|
|
324
|
+
const selection = service.selection.getValue()
|
|
325
|
+
expect(selection).toContain(items[0])
|
|
326
|
+
expect(selection).toContain(items[1])
|
|
327
|
+
expect(selection).toContain(items[2])
|
|
328
|
+
})
|
|
330
329
|
})
|
|
331
330
|
|
|
332
331
|
it('should select range backwards on Shift+Click', () => {
|
|
333
332
|
const { service, items } = createTestService()
|
|
334
|
-
service
|
|
333
|
+
using(service, () => {
|
|
334
|
+
service.focusedItem.setValue(items[2])
|
|
335
335
|
|
|
336
|
-
|
|
336
|
+
service.handleItemClick(items[0], new MouseEvent('click', { shiftKey: true }))
|
|
337
337
|
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
service[Symbol.dispose]()
|
|
338
|
+
const selection = service.selection.getValue()
|
|
339
|
+
expect(selection).toContain(items[0])
|
|
340
|
+
expect(selection).toContain(items[1])
|
|
341
|
+
expect(selection).toContain(items[2])
|
|
342
|
+
})
|
|
344
343
|
})
|
|
345
344
|
})
|
|
346
345
|
|
|
347
346
|
describe('handleItemDoubleClick', () => {
|
|
348
347
|
it('should not throw on double-click', () => {
|
|
349
348
|
const { service, items } = createTestService()
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
service[Symbol.dispose]()
|
|
349
|
+
using(service, () => {
|
|
350
|
+
expect(() => service.handleItemDoubleClick(items[0])).not.toThrow()
|
|
351
|
+
})
|
|
354
352
|
})
|
|
355
353
|
})
|
|
356
354
|
|