@@ -16,6 +16,7 @@ let ReactSymbols;
1616
1717function createReactEventComponent (
1818targetEventTypes ,
19+ rootEventTypes ,
1920createInitialState ,
2021onEvent ,
2122onEventCapture ,
@@ -26,6 +27,7 @@ function createReactEventComponent(
2627) {
2728const testEventResponder = {
2829 targetEventTypes,
30+ rootEventTypes,
2931 createInitialState,
3032 onEvent,
3133 onEventCapture,
@@ -90,6 +92,7 @@ describe('DOMEventResponderSystem', () => {
9092const ClickEventComponent = createReactEventComponent (
9193[ 'click' ] ,
9294undefined ,
95+ undefined ,
9396( event , context , props ) => {
9497eventResponderFiredCount ++ ;
9598eventLog . push ( {
@@ -163,6 +166,7 @@ describe('DOMEventResponderSystem', () => {
163166const ClickEventComponent = createReactEventComponent (
164167[ 'click' ] ,
165168undefined ,
169+ undefined ,
166170( event , context , props ) => {
167171eventLog . push ( {
168172name : event . type ,
@@ -217,6 +221,7 @@ describe('DOMEventResponderSystem', () => {
217221const ClickEventComponent = createReactEventComponent (
218222[ 'click' ] ,
219223undefined ,
224+ undefined ,
220225( event , context , props ) => {
221226eventResponderFiredCount ++ ;
222227eventLog . push ( {
@@ -288,6 +293,7 @@ describe('DOMEventResponderSystem', () => {
288293const ClickEventComponentA = createReactEventComponent (
289294[ 'click' ] ,
290295undefined ,
296+ undefined ,
291297( event , context , props ) => {
292298eventLog . push ( `A [bubble]` ) ;
293299} ,
@@ -299,6 +305,7 @@ describe('DOMEventResponderSystem', () => {
299305const ClickEventComponentB = createReactEventComponent (
300306[ 'click' ] ,
301307undefined ,
308+ undefined ,
302309( event , context , props ) => {
303310eventLog . push ( `B [bubble]` ) ;
304311} ,
@@ -336,6 +343,7 @@ describe('DOMEventResponderSystem', () => {
336343const ClickEventComponent = createReactEventComponent (
337344[ 'click' ] ,
338345undefined ,
346+ undefined ,
339347( event , context , props ) => {
340348eventLog . push ( `${ props . name } [bubble]` ) ;
341349} ,
@@ -377,6 +385,7 @@ describe('DOMEventResponderSystem', () => {
377385const ClickEventComponent = createReactEventComponent (
378386[ 'click' ] ,
379387undefined ,
388+ undefined ,
380389( event , context , props ) => {
381390eventLog . push ( `${ props . name } [bubble]` ) ;
382391} ,
@@ -413,6 +422,7 @@ describe('DOMEventResponderSystem', () => {
413422const ClickEventComponent = createReactEventComponent (
414423[ 'click' ] ,
415424undefined ,
425+ undefined ,
416426( event , context , props ) => {
417427if ( props . onMagicClick ) {
418428const syntheticEvent = {
@@ -505,6 +515,7 @@ describe('DOMEventResponderSystem', () => {
505515const LongPressEventComponent = createReactEventComponent (
506516[ 'click' ] ,
507517undefined ,
518+ undefined ,
508519( event , context , props ) => {
509520handleEvent ( event , context , props , 'bubble' ) ;
510521} ,
@@ -551,6 +562,7 @@ describe('DOMEventResponderSystem', () => {
551562undefined ,
552563undefined ,
553564undefined ,
565+ undefined ,
554566( event , context , props , state ) => { } ,
555567( ) => {
556568onUnmountFired ++ ;
@@ -573,6 +585,7 @@ describe('DOMEventResponderSystem', () => {
573585
574586const EventComponent = createReactEventComponent (
575587[ ] ,
588+ undefined ,
576589( ) => ( {
577590incrementAmount : 5 ,
578591} ) ,
@@ -603,6 +616,7 @@ describe('DOMEventResponderSystem', () => {
603616const EventComponent = createReactEventComponent (
604617[ 'click' ] ,
605618undefined ,
619+ undefined ,
606620( event , context , props , state ) => {
607621ownershipGained = context . requestOwnership ( ) ;
608622} ,
@@ -641,6 +655,7 @@ describe('DOMEventResponderSystem', () => {
641655const EventComponent = createReactEventComponent (
642656[ 'click' ] ,
643657undefined ,
658+ undefined ,
644659( event , context , props , state ) => {
645660queryResult = Array . from (
646661context . getEventTargetsFromTarget ( event . target ) ,
@@ -696,6 +711,7 @@ describe('DOMEventResponderSystem', () => {
696711const EventComponent = createReactEventComponent (
697712[ 'click' ] ,
698713undefined ,
714+ undefined ,
699715( event , context , props , state ) => {
700716queryResult = context . getEventTargetsFromTarget (
701717event . target ,
@@ -743,6 +759,7 @@ describe('DOMEventResponderSystem', () => {
743759const EventComponent = createReactEventComponent (
744760[ 'click' ] ,
745761undefined ,
762+ undefined ,
746763( event , context , props , state ) => {
747764queryResult = context . getEventTargetsFromTarget (
748765event . target ,
@@ -795,6 +812,7 @@ describe('DOMEventResponderSystem', () => {
795812const EventComponent = createReactEventComponent (
796813[ 'click' ] ,
797814undefined ,
815+ undefined ,
798816( event , context , props , state ) => {
799817queryResult = context . getEventTargetsFromTarget (
800818event . target ,
@@ -855,4 +873,48 @@ describe('DOMEventResponderSystem', () => {
855873] ) ;
856874expect ( 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