@@ -16,6 +16,7 @@ let ReactSymbols;
1616
1717function createReactEventComponent (
1818 targetEventTypes ,
19+ rootEventTypes ,
1920 createInitialState ,
2021 onEvent ,
2122 onEventCapture ,
@@ -26,6 +27,7 @@ function createReactEventComponent(
2627) {
2728 const testEventResponder = {
2829 targetEventTypes,
30+ rootEventTypes,
2931 createInitialState,
3032 onEvent,
3133 onEventCapture,
@@ -90,6 +92,7 @@ describe('DOMEventResponderSystem', () => {
9092 const ClickEventComponent = createReactEventComponent (
9193 [ 'click' ] ,
9294 undefined ,
95+ undefined ,
9396 ( event , context , props ) => {
9497 eventResponderFiredCount ++ ;
9598 eventLog . push ( {
@@ -163,6 +166,7 @@ describe('DOMEventResponderSystem', () => {
163166 const ClickEventComponent = createReactEventComponent (
164167 [ 'click' ] ,
165168 undefined ,
169+ undefined ,
166170 ( event , context , props ) => {
167171 eventLog . push ( {
168172 name : event . type ,
@@ -217,6 +221,7 @@ describe('DOMEventResponderSystem', () => {
217221 const ClickEventComponent = createReactEventComponent (
218222 [ 'click' ] ,
219223 undefined ,
224+ undefined ,
220225 ( event , context , props ) => {
221226 eventResponderFiredCount ++ ;
222227 eventLog . push ( {
@@ -288,6 +293,7 @@ describe('DOMEventResponderSystem', () => {
288293 const ClickEventComponentA = createReactEventComponent (
289294 [ 'click' ] ,
290295 undefined ,
296+ undefined ,
291297 ( event , context , props ) => {
292298 eventLog . push ( `A [bubble]` ) ;
293299 } ,
@@ -299,6 +305,7 @@ describe('DOMEventResponderSystem', () => {
299305 const ClickEventComponentB = createReactEventComponent (
300306 [ 'click' ] ,
301307 undefined ,
308+ undefined ,
302309 ( event , context , props ) => {
303310 eventLog . push ( `B [bubble]` ) ;
304311 } ,
@@ -336,6 +343,7 @@ describe('DOMEventResponderSystem', () => {
336343 const ClickEventComponent = createReactEventComponent (
337344 [ 'click' ] ,
338345 undefined ,
346+ undefined ,
339347 ( event , context , props ) => {
340348 eventLog . push ( `${ props . name } [bubble]` ) ;
341349 } ,
@@ -377,6 +385,7 @@ describe('DOMEventResponderSystem', () => {
377385 const ClickEventComponent = createReactEventComponent (
378386 [ 'click' ] ,
379387 undefined ,
388+ undefined ,
380389 ( event , context , props ) => {
381390 eventLog . push ( `${ props . name } [bubble]` ) ;
382391 } ,
@@ -413,6 +422,7 @@ describe('DOMEventResponderSystem', () => {
413422 const ClickEventComponent = createReactEventComponent (
414423 [ 'click' ] ,
415424 undefined ,
425+ undefined ,
416426 ( event , context , props ) => {
417427 if ( props . onMagicClick ) {
418428 const syntheticEvent = {
@@ -505,6 +515,7 @@ describe('DOMEventResponderSystem', () => {
505515 const LongPressEventComponent = createReactEventComponent (
506516 [ 'click' ] ,
507517 undefined ,
518+ undefined ,
508519 ( event , context , props ) => {
509520 handleEvent ( event , context , props , 'bubble' ) ;
510521 } ,
@@ -551,6 +562,7 @@ describe('DOMEventResponderSystem', () => {
551562 undefined ,
552563 undefined ,
553564 undefined ,
565+ undefined ,
554566 ( event , context , props , state ) => { } ,
555567 ( ) => {
556568 onUnmountFired ++ ;
@@ -573,6 +585,7 @@ describe('DOMEventResponderSystem', () => {
573585
574586 const EventComponent = createReactEventComponent (
575587 [ ] ,
588+ undefined ,
576589 ( ) => ( {
577590 incrementAmount : 5 ,
578591 } ) ,
@@ -603,6 +616,7 @@ describe('DOMEventResponderSystem', () => {
603616 const EventComponent = createReactEventComponent (
604617 [ 'click' ] ,
605618 undefined ,
619+ undefined ,
606620 ( event , context , props , state ) => {
607621 ownershipGained = context . requestOwnership ( ) ;
608622 } ,
@@ -641,6 +655,7 @@ describe('DOMEventResponderSystem', () => {
641655 const EventComponent = createReactEventComponent (
642656 [ 'click' ] ,
643657 undefined ,
658+ undefined ,
644659 ( event , context , props , state ) => {
645660 queryResult = Array . from (
646661 context . getEventTargetsFromTarget ( event . target ) ,
@@ -696,6 +711,7 @@ describe('DOMEventResponderSystem', () => {
696711 const EventComponent = createReactEventComponent (
697712 [ 'click' ] ,
698713 undefined ,
714+ undefined ,
699715 ( event , context , props , state ) => {
700716 queryResult = context . getEventTargetsFromTarget (
701717 event . target ,
@@ -743,6 +759,7 @@ describe('DOMEventResponderSystem', () => {
743759 const EventComponent = createReactEventComponent (
744760 [ 'click' ] ,
745761 undefined ,
762+ undefined ,
746763 ( event , context , props , state ) => {
747764 queryResult = context . getEventTargetsFromTarget (
748765 event . target ,
@@ -795,6 +812,7 @@ describe('DOMEventResponderSystem', () => {
795812 const EventComponent = createReactEventComponent (
796813 [ 'click' ] ,
797814 undefined ,
815+ undefined ,
798816 ( event , context , props , state ) => {
799817 queryResult = context . getEventTargetsFromTarget (
800818 event . target ,
@@ -855,4 +873,48 @@ describe('DOMEventResponderSystem', () => {
855873 ] ) ;
856874 expect ( queryResult3 ) . toEqual ( [ ] ) ;
857875 } ) ;
876+
877+ it ( 'the event responder root listeners should fire on a root click event' , ( ) => {
878+ let eventResponderFiredCount = 0 ;
879+ let eventLog = [ ] ;
880+
881+ const ClickEventComponent = createReactEventComponent (
882+ undefined ,
883+ [ 'click' ] ,
884+ undefined ,
885+ undefined ,
886+ undefined ,
887+ event => {
888+ eventResponderFiredCount ++ ;
889+ eventLog . push ( {
890+ name : event . type ,
891+ passive : event . passive ,
892+ passiveSupported : event . passiveSupported ,
893+ phase : 'root' ,
894+ } ) ;
895+ } ,
896+ ) ;
897+
898+ const Test = ( ) => (
899+ < ClickEventComponent >
900+ < button > Click me!</ button >
901+ </ ClickEventComponent >
902+ ) ;
903+
904+ ReactDOM . render ( < Test /> , container ) ;
905+ expect ( container . innerHTML ) . toBe ( '<button>Click me!</button>' ) ;
906+
907+ // Clicking the button should trigger the event responder onEvent() twice
908+ dispatchClickEvent ( document . body ) ;
909+ expect ( eventResponderFiredCount ) . toBe ( 1 ) ;
910+ expect ( eventLog . length ) . toBe ( 1 ) ;
911+ expect ( eventLog ) . toEqual ( [
912+ {
913+ name : 'click' ,
914+ passive : false ,
915+ passiveSupported : false ,
916+ phase : 'root' ,
917+ } ,
918+ ] ) ;
919+ } ) ;
858920} ) ;
0 commit comments