@@ -196,15 +196,14 @@ describe("calcite-color-picker", () => {
196
196
const channelInput = await page . find ( `calcite-color-picker >>> .${ CSS . channel } ` ) ;
197
197
await selectText ( channelInput ) ;
198
198
await channelInput . type ( "254" ) ;
199
- await channelInput . press ( "Enter" ) ;
200
199
await page . waitForChanges ( ) ;
201
- expect ( changeSpy ) . toHaveReceivedEventTimes ( 4 ) ;
202
- expect ( inputSpy ) . toHaveReceivedEventTimes ( 4 ) ;
200
+ expect ( changeSpy ) . toHaveReceivedEventTimes ( 6 ) ;
201
+ expect ( inputSpy ) . toHaveReceivedEventTimes ( 6 ) ;
203
202
204
203
// change by clicking stored color
205
204
await ( await page . find ( `calcite-color-picker >>> .${ CSS . savedColor } ` ) ) . click ( ) ;
206
- expect ( changeSpy ) . toHaveReceivedEventTimes ( 5 ) ;
207
- expect ( inputSpy ) . toHaveReceivedEventTimes ( 5 ) ;
205
+ expect ( changeSpy ) . toHaveReceivedEventTimes ( 7 ) ;
206
+ expect ( inputSpy ) . toHaveReceivedEventTimes ( 7 ) ;
208
207
209
208
// change by dragging color field thumb
210
209
const mouseDragSteps = 10 ;
@@ -222,8 +221,8 @@ describe("calcite-color-picker", () => {
222
221
await page . mouse . up ( ) ;
223
222
await page . waitForChanges ( ) ;
224
223
225
- expect ( changeSpy ) . toHaveReceivedEventTimes ( 6 ) ;
226
- expect ( inputSpy . length ) . toBeGreaterThan ( 6 ) ; // input event fires more than once
224
+ expect ( changeSpy ) . toHaveReceivedEventTimes ( 8 ) ;
225
+ expect ( inputSpy . length ) . toBeGreaterThan ( 8 ) ; // input event fires more than once
227
226
228
227
// change by dragging hue slider thumb
229
228
[ hueScopeX , hueScopeY ] = await getElementXY ( page , "calcite-color-picker" , `.${ CSS . hueScope } ` ) ;
@@ -235,7 +234,7 @@ describe("calcite-color-picker", () => {
235
234
await page . mouse . up ( ) ;
236
235
await page . waitForChanges ( ) ;
237
236
238
- expect ( changeSpy ) . toHaveReceivedEventTimes ( 7 ) ;
237
+ expect ( changeSpy ) . toHaveReceivedEventTimes ( 9 ) ;
239
238
expect ( inputSpy . length ) . toBeGreaterThan ( previousInputEventLength + 1 ) ; // input event fires more than once
240
239
241
240
previousInputEventLength = inputSpy . length ;
@@ -246,10 +245,112 @@ describe("calcite-color-picker", () => {
246
245
picker . setProperty ( "value" , "#fff" ) ;
247
246
await page . waitForChanges ( ) ;
248
247
249
- expect ( changeSpy ) . toHaveReceivedEventTimes ( 7 ) ;
248
+ expect ( changeSpy ) . toHaveReceivedEventTimes ( 9 ) ;
250
249
expect ( inputSpy . length ) . toBe ( previousInputEventLength ) ;
251
250
} ) ;
252
251
252
+ it ( "increments channel's value by 1 when clearing input and pressing ArrowUp. Same should apply to other channel inputs" , async ( ) => {
253
+ const page = await newE2EPage ( ) ;
254
+ await page . setContent ( "<calcite-color-picker></calcite-color-picker>" ) ;
255
+ const channelInput = await page . find ( `calcite-color-picker >>> .${ CSS . channel } ` ) ;
256
+ const currentValue = await channelInput . getProperty ( "value" ) ;
257
+
258
+ await selectText ( channelInput ) ;
259
+ await page . keyboard . press ( "Backspace" ) ;
260
+ await page . keyboard . press ( "ArrowUp" ) ;
261
+ await page . waitForChanges ( ) ;
262
+
263
+ expect ( await channelInput . getProperty ( "value" ) ) . toBe ( `${ Number ( currentValue ) + 1 } ` ) ;
264
+ } ) ;
265
+
266
+ it ( "decrements channel's value by 1 when clearing input and pressing ArrowDown. Same should apply to other channel inputs" , async ( ) => {
267
+ const page = await newE2EPage ( ) ;
268
+ await page . setContent ( "<calcite-color-picker value='#b33f33'></calcite-color-picker>" ) ;
269
+ const channelInput = await page . find ( `calcite-color-picker >>> .${ CSS . channel } ` ) ;
270
+ const currentValue = await channelInput . getProperty ( "value" ) ;
271
+
272
+ await selectText ( channelInput ) ;
273
+ await page . keyboard . press ( "Backspace" ) ;
274
+ await page . keyboard . press ( "ArrowDown" ) ;
275
+ await page . waitForChanges ( ) ;
276
+
277
+ expect ( await channelInput . getProperty ( "value" ) ) . toBe ( `${ Number ( currentValue ) - 1 } ` ) ;
278
+ } ) ;
279
+
280
+ it ( "prevents channel's value from going over its limit when clearing input and pressing ArrowUp. Same should apply to other channel inputs" , async ( ) => {
281
+ const page = await newE2EPage ( ) ;
282
+ await page . setContent ( "<calcite-color-picker value='#ffffff'></calcite-color-picker>" ) ;
283
+ const channelInput = await page . find ( `calcite-color-picker >>> .${ CSS . channel } ` ) ;
284
+
285
+ await selectText ( channelInput ) ;
286
+ await page . keyboard . press ( "Backspace" ) ;
287
+ await page . keyboard . press ( "ArrowUp" ) ;
288
+ await page . waitForChanges ( ) ;
289
+
290
+ expect ( await channelInput . getProperty ( "value" ) ) . toBe ( "255" ) ;
291
+ } ) ;
292
+
293
+ it ( "prevents channel's value from being less than 0 when clearing input and pressing ArrowDown. Same should apply to other channel inputs" , async ( ) => {
294
+ const page = await newE2EPage ( ) ;
295
+ await page . setContent ( "<calcite-color-picker></calcite-color-picker>" ) ;
296
+ const channelInput = await page . find ( `calcite-color-picker >>> .${ CSS . channel } ` ) ;
297
+
298
+ await selectText ( channelInput ) ;
299
+ await page . keyboard . press ( "Backspace" ) ;
300
+ await page . keyboard . press ( "ArrowDown" ) ;
301
+ await page . waitForChanges ( ) ;
302
+
303
+ expect ( await channelInput . getProperty ( "value" ) ) . toBe ( "0" ) ;
304
+ } ) ;
305
+
306
+ it ( "restores original channel value when input is cleared and blur is triggered. Same should apply to other channel inputs" , async ( ) => {
307
+ const page = await newE2EPage ( ) ;
308
+ await page . setContent ( "<calcite-color-picker></calcite-color-picker>" ) ;
309
+ const channelInput = await page . find ( `calcite-color-picker >>> .${ CSS . channel } ` ) ;
310
+ const currentValue = await channelInput . getProperty ( "value" ) ;
311
+
312
+ await selectText ( channelInput ) ;
313
+ await page . keyboard . press ( "Backspace" ) ;
314
+ await page . keyboard . press ( "Tab" ) ;
315
+ await page . waitForChanges ( ) ;
316
+
317
+ expect ( await channelInput . getProperty ( "value" ) ) . toBe ( currentValue ) ;
318
+ } ) ;
319
+
320
+ it ( "auto commits channel value when typing. Same should apply to other channel inputs" , async ( ) => {
321
+ const page = await newE2EPage ( ) ;
322
+ await page . setContent ( "<calcite-color-picker></calcite-color-picker>" ) ;
323
+
324
+ const channelInput = await page . find ( `calcite-color-picker >>> .${ CSS . channel } ` ) ;
325
+ const picker = await page . find ( "calcite-color-picker" ) ;
326
+ const changeSpy = await picker . spyOnEvent ( "calciteColorPickerChange" ) ;
327
+
328
+ await selectText ( channelInput ) ;
329
+ await page . keyboard . type ( "123" ) ;
330
+ await page . waitForChanges ( ) ;
331
+
332
+ expect ( changeSpy ) . toHaveReceivedEventTimes ( 3 ) ;
333
+ expect ( await channelInput . getProperty ( "value" ) ) . toBe ( "123" ) ;
334
+ } ) ;
335
+
336
+ it ( "blurs focused input when clicking anywhere within the component. It should apply to all inputs" , async ( ) => {
337
+ const page = await newE2EPage ( ) ;
338
+ await page . setContent ( "<calcite-color-picker></calcite-color-picker>" ) ;
339
+
340
+ const channelInput = await page . find ( `calcite-color-picker >>> .${ CSS . channel } ` ) ;
341
+ const currentValue = await channelInput . getProperty ( "value" ) ;
342
+ const picker = await page . find ( "calcite-color-picker" ) ;
343
+ const blurSpy = await picker . spyOnEvent ( "calciteInternalInputNumberBlur" ) ;
344
+
345
+ await selectText ( channelInput ) ;
346
+ await page . keyboard . press ( "Backspace" ) ;
347
+ await page . mouse . click ( 0 , 0 ) ;
348
+ await page . waitForChanges ( ) ;
349
+
350
+ expect ( blurSpy ) . toHaveReceivedEventTimes ( 1 ) ;
351
+ expect ( await channelInput . getProperty ( "value" ) ) . toBe ( currentValue ) ;
352
+ } ) ;
353
+
253
354
it ( "does not emit on initialization" , async ( ) => {
254
355
const page = await newProgrammaticE2EPage ( ) ;
255
356
0 commit comments