Skip to content

Commit aaed094

Browse files
committed
use public api for SyntheticEvent-test
1 parent 7f4b81b commit aaed094

File tree

1 file changed

+85
-74
lines changed

1 file changed

+85
-74
lines changed

packages/react-dom/src/client/event/__tests__/SyntheticEvent-test.js

Lines changed: 85 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -14,114 +14,125 @@ var ReactDOM;
1414
var ReactTestUtils;
1515

1616
describe('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

Comments
 (0)