@@ -49,10 +49,14 @@ function phaseToString(phase) {
49
49
: 'capture' ;
50
50
}
51
51
52
+ function dispatchEvent ( element , type ) {
53
+ const event = document . createEvent ( 'Event' ) ;
54
+ event . initEvent ( type , true , true ) ;
55
+ element . dispatchEvent ( event ) ;
56
+ }
57
+
52
58
function dispatchClickEvent ( element ) {
53
- const clickEvent = document . createEvent ( 'Event' ) ;
54
- clickEvent . initEvent ( 'click' , true , true ) ;
55
- element . dispatchEvent ( clickEvent ) ;
59
+ dispatchEvent ( element , 'click' ) ;
56
60
}
57
61
58
62
function createReactEventTarget ( type ) {
@@ -308,15 +312,23 @@ describe('DOMEventResponderSystem', () => {
308
312
[ 'click' ] ,
309
313
undefined ,
310
314
( event , context , props ) => {
311
- eventLog . push ( `A [${ phaseToString ( event . phase ) } ]` ) ;
315
+ context . addRootEventTypes ( event . target . ownerDocument , [
316
+ 'click' ,
317
+ 'pointermove' ,
318
+ ] ) ;
319
+ eventLog . push ( `A [${ event . type } , ${ phaseToString ( event . phase ) } ]` ) ;
312
320
} ,
313
321
) ;
314
322
315
323
const ClickEventComponentB = createReactEventComponent (
316
324
[ 'click' ] ,
317
325
undefined ,
318
326
( event , context , props ) => {
319
- eventLog . push ( `B [${ phaseToString ( event . phase ) } ]` ) ;
327
+ context . addRootEventTypes ( event . target . ownerDocument , [
328
+ 'click' ,
329
+ 'pointermove' ,
330
+ ] ) ;
331
+ eventLog . push ( `B [${ event . type } , ${ phaseToString ( event . phase ) } ]` ) ;
320
332
if ( event . phase === stopPropagationOnPhase ) {
321
333
return true ;
322
334
}
@@ -337,12 +349,26 @@ describe('DOMEventResponderSystem', () => {
337
349
ReactDOM . render ( < Test /> , container ) ;
338
350
let buttonElement = buttonRef . current ;
339
351
dispatchClickEvent ( buttonElement ) ;
352
+ dispatchEvent ( buttonElement , 'pointermove' ) ;
340
353
}
341
354
342
355
runTestWithPhase ( BUBBLE_PHASE ) ;
343
- expect ( eventLog ) . toEqual ( [ 'A [capture]' , 'B [capture]' , 'B [bubble]' ] ) ;
356
+ // Root phase should not be skipped for different event type
357
+ expect ( eventLog ) . toEqual ( [
358
+ 'A [click, capture]' ,
359
+ 'B [click, capture]' ,
360
+ 'B [click, bubble]' ,
361
+ 'A [pointermove, root]' ,
362
+ 'B [pointermove, root]' ,
363
+ ] ) ;
344
364
runTestWithPhase ( CAPTURE_PHASE ) ;
345
- expect ( eventLog ) . toEqual ( [ 'A [capture]' , 'B [capture]' ] ) ;
365
+ // Root phase should not be skipped for different event type
366
+ expect ( eventLog ) . toEqual ( [
367
+ 'A [click, capture]' ,
368
+ 'B [click, capture]' ,
369
+ 'A [pointermove, root]' ,
370
+ 'B [pointermove, root]' ,
371
+ ] ) ;
346
372
} ) ;
347
373
348
374
it ( 'nested event responders and their onEvent() should fire in the correct order with stopPropagation #2' , ( ) => {
@@ -354,7 +380,11 @@ describe('DOMEventResponderSystem', () => {
354
380
[ 'click' ] ,
355
381
undefined ,
356
382
( event , context , props ) => {
357
- eventLog . push ( `A [${ phaseToString ( event . phase ) } ]` ) ;
383
+ context . addRootEventTypes ( event . target . ownerDocument , [
384
+ 'click' ,
385
+ 'pointermove' ,
386
+ ] ) ;
387
+ eventLog . push ( `A [${ event . type } , ${ phaseToString ( event . phase ) } ]` ) ;
358
388
if ( event . phase === stopPropagationOnPhase ) {
359
389
return true ;
360
390
}
@@ -365,7 +395,11 @@ describe('DOMEventResponderSystem', () => {
365
395
[ 'click' ] ,
366
396
undefined ,
367
397
( event , context , props ) => {
368
- eventLog . push ( `B [${ phaseToString ( event . phase ) } ]` ) ;
398
+ context . addRootEventTypes ( event . target . ownerDocument , [
399
+ 'click' ,
400
+ 'pointermove' ,
401
+ ] ) ;
402
+ eventLog . push ( `B [${ event . type } , ${ phaseToString ( event . phase ) } ]` ) ;
369
403
} ,
370
404
) ;
371
405
@@ -383,17 +417,26 @@ describe('DOMEventResponderSystem', () => {
383
417
ReactDOM . render ( < Test /> , container ) ;
384
418
let buttonElement = buttonRef . current ;
385
419
dispatchClickEvent ( buttonElement ) ;
420
+ dispatchEvent ( buttonElement , 'pointermove' ) ;
386
421
}
387
422
388
423
runTestWithPhase ( BUBBLE_PHASE ) ;
424
+ // Root phase should not be skipped for different event type
389
425
expect ( eventLog ) . toEqual ( [
390
- 'A [capture]' ,
391
- 'B [capture]' ,
392
- 'B [bubble]' ,
393
- 'A [bubble]' ,
426
+ 'A [click, capture]' ,
427
+ 'B [click, capture]' ,
428
+ 'B [click, bubble]' ,
429
+ 'A [click, bubble]' ,
430
+ 'A [pointermove, root]' ,
431
+ 'B [pointermove, root]' ,
394
432
] ) ;
395
433
runTestWithPhase ( CAPTURE_PHASE ) ;
396
- expect ( eventLog ) . toEqual ( [ 'A [capture]' ] ) ;
434
+ // Root phase should not be skipped for different event type
435
+ expect ( eventLog ) . toEqual ( [
436
+ 'A [click, capture]' ,
437
+ 'A [pointermove, root]' ,
438
+ 'B [pointermove, root]' ,
439
+ ] ) ;
397
440
} ) ;
398
441
399
442
it ( 'custom event dispatching for click -> magicClick works' , ( ) => {
0 commit comments