@@ -14,114 +14,125 @@ var ReactDOM;
1414var ReactTestUtils ;
1515
1616describe ( 'SyntheticEvent' , ( ) => {
17+ var createEvent ;
1718
1819 beforeEach ( ( ) => {
1920 React = require ( 'react' ) ;
2021 ReactDOM = require ( 'react-dom' ) ;
2122 ReactTestUtils = require ( 'react-dom/test-utils' ) ;
23+ createEvent = ( eventType , nativeEvent ) => {
24+ const defaultNativeEvent = {
25+ bubbles : true ,
26+ cancelable : true ,
27+ ...nativeEvent ,
28+ } ;
29+ var event = new Event ( [ eventType , defaultNativeEvent ] ) ;
30+ event . initEvent (
31+ eventType ,
32+ defaultNativeEvent . bubbles ,
33+ defaultNativeEvent . cancelabl ,
34+ ) ;
35+ return event ;
36+ } ;
2237 } ) ;
2338
2439 it ( 'should normalize `target` from the nativeEvent' , ( ) => {
40+ var click = jest . fn ( ) ;
2541 var container = document . createElement ( 'div' ) ;
26- var syntheticEventTarget = null ;
27- var onClick = function ( e ) {
28- syntheticEventTarget = e . target
29- }
3042
31- class Component extends React . Component {
32- div = null ;
33- render ( ) {
34- return (
35- < div ref = { element => ( this . div = element ) } onClick = { onClick } >
36- </ div >
37- ) ;
38- }
39- }
43+ var onClick = e => click ( e . target ) ;
44+
45+ var instance = ReactDOM . render ( < div onClick = { onClick } /> , container ) ;
4046
41- var instance = ReactDOM . render ( < Component /> , container ) ;
42- var nativeEvent = document . createEvent ( 'Event' ) ;
43- nativeEvent . initEvent ( 'click' , true , true ) ;
4447 document . body . appendChild ( container ) ;
45- instance . div . dispatchEvent ( nativeEvent ) ;
46- expect ( nativeEvent . target ) . toBe ( syntheticEventTarget )
48+
49+ var event = createEvent ( 'click' , { srcElement : instance } ) ;
50+ var elem = ReactDOM . findDOMNode ( instance ) ;
51+ elem . dispatchEvent ( event ) ;
52+ expect ( click ) . toBeCalledWith ( elem ) ;
4753 document . body . removeChild ( container ) ;
4854 } ) ;
4955
5056 it ( 'should be able to `preventDefault`' , ( ) => {
57+ var click = jest . fn ( ) ;
5158 var container = document . createElement ( 'div' ) ;
52- var syntheticEvent = null ;
53- var onClick = function ( e ) {
54- e . persist ( )
55- syntheticEvent = e
56- }
5759
58- class Component extends React . Component {
59- div = null ;
60- render ( ) {
61- return (
62- < div ref = { element => ( this . div = element ) } onClick = { onClick } >
63- </ div >
64- ) ;
65- }
66- }
67- var instance = ReactDOM . render ( < Component /> , container ) ;
68- var nativeEvent = document . createEvent ( 'Event' ) ;
69- nativeEvent . initEvent ( 'click' , true , true ) ;
60+ var onClick = e => {
61+ click ( e . isDefaultPrevented ( ) ) ;
62+ e . preventDefault ( ) ;
63+ click ( e . isDefaultPrevented ( ) ) ;
64+ } ;
65+
66+ var instance = ReactDOM . render ( < div onClick = { onClick } /> , container ) ;
67+
7068 document . body . appendChild ( container ) ;
71- instance . div . dispatchEvent ( nativeEvent ) ;
72- expect ( syntheticEvent . isDefaultPrevented ( ) ) . toBe ( false ) ;
73- syntheticEvent . preventDefault ( )
74- expect ( syntheticEvent . isDefaultPrevented ( ) ) . toBe ( true ) ;
69+
70+ var event = createEvent ( 'click' , { srcElement : instance } ) ;
71+ var elem = ReactDOM . findDOMNode ( instance ) ;
72+ elem . dispatchEvent ( event ) ;
73+ expect ( click . mock . calls [ 0 ] [ 0 ] ) . toBe ( false ) ;
74+ expect ( click . mock . calls [ 1 ] [ 0 ] ) . toBe ( true ) ;
7575 document . body . removeChild ( container ) ;
7676 } ) ;
7777
7878 it ( 'should be prevented if nativeEvent is prevented' , ( ) => {
79+ var click = jest . fn ( ) ;
7980 var container = document . createElement ( 'div' ) ;
8081
81- var isClickPrevented = false
82- var onClick = function ( e ) {
83- isClickPrevented = e . isDefaultPrevented ( )
84- }
82+ var onClick = e => click ( e . isDefaultPrevented ( ) ) ;
8583
86- var isBlurPrevented = false
87- var onBlur = function ( e ) {
88- isBlurPrevented = e . isDefaultPrevented ( )
89- }
84+ var instance = ReactDOM . render ( < div onClick = { onClick } /> , container ) ;
9085
91- class Component extends React . Component {
92- div = null ;
93- render ( ) {
94- return (
95- < div ref = { element => ( this . div = element ) } onClick = { onClick } onBlur = { onBlur } >
96- </ div >
97- ) ;
98- }
99- }
86+ var elem = ReactDOM . findDOMNode ( instance ) ;
87+ ReactTestUtils . SimulateNative . click ( elem , { defaultPrevented : true } ) ;
88+ ReactTestUtils . SimulateNative . click ( elem , { returnValue : false } ) ;
10089
101- var instance = ReactDOM . render ( < Component /> , container ) ;
102- ReactTestUtils . SimulateNative . click ( instance . div , { defaultPrevented : true } )
103- expect ( isClickPrevented ) . toBe ( true ) ;
104- ReactTestUtils . SimulateNative . blur ( instance . div , { returnValue : false } )
105- expect ( isBlurPrevented ) . toBe ( true ) ;
90+ expect ( click . mock . calls [ 0 ] [ 0 ] ) . toBe ( true ) ;
91+ expect ( click . mock . calls [ 1 ] [ 0 ] ) . toBe ( true ) ;
10692 } ) ;
10793
10894 it ( 'should be able to `stopPropagation`' , ( ) => {
109- var nativeEvent = { } ;
110- var syntheticEvent = createEvent ( nativeEvent ) ;
95+ var click = jest . fn ( ) ;
96+ var container = document . createElement ( 'div' ) ;
11197
112- expect ( syntheticEvent . isPropagationStopped ( ) ) . toBe ( false ) ;
113- syntheticEvent . stopPropagation ( ) ;
114- expect ( syntheticEvent . isPropagationStopped ( ) ) . toBe ( true ) ;
98+ var onClick = e => {
99+ click ( e . isPropagationStopped ( ) ) ;
100+ e . stopPropagation ( ) ;
101+ click ( e . isPropagationStopped ( ) ) ;
102+ } ;
103+
104+ var instance = ReactDOM . render ( < div onClick = { onClick } /> , container ) ;
115105
116- expect ( nativeEvent . cancelBubble ) . toBe ( true ) ;
106+ document . body . appendChild ( container ) ;
107+
108+ var event = createEvent ( 'click' , { srcElement : instance } ) ;
109+ var elem = ReactDOM . findDOMNode ( instance ) ;
110+ elem . dispatchEvent ( event ) ;
111+ expect ( click . mock . calls [ 0 ] [ 0 ] ) . toBe ( false ) ;
112+ expect ( click . mock . calls [ 1 ] [ 0 ] ) . toBe ( true ) ;
113+ document . body . removeChild ( container ) ;
117114 } ) ;
118115
119116 it ( 'should be able to `persist`' , ( ) => {
120- var syntheticEvent = createEvent ( { } ) ;
117+ var click = jest . fn ( ) ;
118+ var container = document . createElement ( 'div' ) ;
119+
120+ var onClick = e => {
121+ click ( e . isPersistent ( ) ) ;
122+ e . persist ( ) ;
123+ click ( e . isPersistent ( ) ) ;
124+ } ;
125+
126+ var instance = ReactDOM . render ( < div onClick = { onClick } /> , container ) ;
121127
122- expect ( syntheticEvent . isPersistent ( ) ) . toBe ( false ) ;
123- syntheticEvent . persist ( ) ;
124- expect ( syntheticEvent . isPersistent ( ) ) . toBe ( true ) ;
128+ document . body . appendChild ( container ) ;
129+
130+ var event = createEvent ( 'click' , { srcElement : instance } ) ;
131+ var elem = ReactDOM . findDOMNode ( instance ) ;
132+ elem . dispatchEvent ( event ) ;
133+ expect ( click . mock . calls [ 0 ] [ 0 ] ) . toBe ( false ) ;
134+ expect ( click . mock . calls [ 1 ] [ 0 ] ) . toBe ( true ) ;
135+ document . body . removeChild ( container ) ;
125136 } ) ;
126137
127138 it ( 'should be nullified if the synthetic event has called destructor and log warnings' , ( ) => {
@@ -190,9 +201,9 @@ describe('SyntheticEvent', () => {
190201 ) ;
191202 } ) ;
192203
193- // TODO: reenable this test. We are currently silencing these warnings when
194- // using TestUtils.Simulate to avoid spurious warnings that result from the
195- // way we simulate events.
204+ /* TODO: reenable this test. We are currently silencing these warnings when
205+ using TestUtils.Simulate to avoid spurious warnings that result from the
206+ way we simulate events. */
196207 xit (
197208 'should properly log warnings when events simulated with rendered components' ,
198209 ( ) => {
0 commit comments