Skip to content

Commit baaf16f

Browse files
committed
use public api for SyntheticEvent-test
1 parent 845b1af commit baaf16f

File tree

1 file changed

+93
-35
lines changed

1 file changed

+93
-35
lines changed

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

Lines changed: 93 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99

1010
'use strict';
1111

12-
var SyntheticEvent;
1312
var React;
1413
var ReactDOM;
1514
var ReactTestUtils;
@@ -18,63 +17,122 @@ describe('SyntheticEvent', () => {
1817
var createEvent;
1918

2019
beforeEach(() => {
21-
// TODO: can we express this test with only public API?
22-
SyntheticEvent = require('SyntheticEvent');
2320
React = require('react');
2421
ReactDOM = require('react-dom');
2522
ReactTestUtils = require('react-dom/test-utils');
26-
27-
createEvent = function(nativeEvent) {
28-
var target = require('getEventTarget')(nativeEvent);
29-
return SyntheticEvent.getPooled({}, '', nativeEvent, target);
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;
3036
};
3137
});
3238

3339
it('should normalize `target` from the nativeEvent', () => {
34-
var target = document.createElement('div');
35-
var syntheticEvent = createEvent({srcElement: target});
40+
var click = jest.fn();
41+
var container = document.createElement('div');
42+
43+
var onClick = e => click(e.target);
44+
45+
var instance = ReactDOM.render(<div onClick={onClick} />, container);
3646

37-
expect(syntheticEvent.target).toBe(target);
38-
expect(syntheticEvent.type).toBe(undefined);
47+
document.body.appendChild(container);
48+
49+
var event = createEvent('click', {srcElement: instance});
50+
var elem = ReactDOM.findDOMNode(instance);
51+
elem.dispatchEvent(event);
52+
expect(click).toBeCalledWith(elem);
53+
document.body.removeChild(container);
3954
});
4055

4156
it('should be able to `preventDefault`', () => {
42-
var nativeEvent = {};
43-
var syntheticEvent = createEvent(nativeEvent);
57+
var click = jest.fn();
58+
var container = document.createElement('div');
4459

45-
expect(syntheticEvent.isDefaultPrevented()).toBe(false);
46-
syntheticEvent.preventDefault();
47-
expect(syntheticEvent.isDefaultPrevented()).toBe(true);
60+
var onClick = e => {
61+
click(e.isDefaultPrevented());
62+
e.preventDefault();
63+
click(e.isDefaultPrevented());
64+
};
4865

49-
expect(syntheticEvent.defaultPrevented).toBe(true);
66+
var instance = ReactDOM.render(<div onClick={onClick} />, container);
5067

51-
expect(nativeEvent.returnValue).toBe(false);
68+
document.body.appendChild(container);
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);
75+
document.body.removeChild(container);
5276
});
5377

5478
it('should be prevented if nativeEvent is prevented', () => {
55-
expect(createEvent({defaultPrevented: true}).isDefaultPrevented()).toBe(
56-
true,
57-
);
58-
expect(createEvent({returnValue: false}).isDefaultPrevented()).toBe(true);
79+
var click = jest.fn();
80+
var container = document.createElement('div');
81+
82+
var onClick = e => click(e.isDefaultPrevented());
83+
84+
var instance = ReactDOM.render(<div onClick={onClick} />, container);
85+
86+
var elem = ReactDOM.findDOMNode(instance);
87+
ReactTestUtils.SimulateNative.click(elem, {defaultPrevented: true});
88+
ReactTestUtils.SimulateNative.click(elem, {returnValue: false});
89+
90+
expect(click.mock.calls[0][0]).toBe(true);
91+
expect(click.mock.calls[1][0]).toBe(true);
5992
});
6093

6194
it('should be able to `stopPropagation`', () => {
62-
var nativeEvent = {};
63-
var syntheticEvent = createEvent(nativeEvent);
95+
var click = jest.fn();
96+
var container = document.createElement('div');
6497

65-
expect(syntheticEvent.isPropagationStopped()).toBe(false);
66-
syntheticEvent.stopPropagation();
67-
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);
68105

69-
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);
70114
});
71115

72116
it('should be able to `persist`', () => {
73-
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);
127+
128+
document.body.appendChild(container);
74129

75-
expect(syntheticEvent.isPersistent()).toBe(false);
76-
syntheticEvent.persist();
77-
expect(syntheticEvent.isPersistent()).toBe(true);
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);
78136
});
79137

80138
it('should be nullified if the synthetic event has called destructor and log warnings', () => {
@@ -143,9 +201,9 @@ describe('SyntheticEvent', () => {
143201
);
144202
});
145203

146-
// TODO: reenable this test. We are currently silencing these warnings when
147-
// using TestUtils.Simulate to avoid spurious warnings that result from the
148-
// 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. */
149207
xit(
150208
'should properly log warnings when events simulated with rendered components',
151209
() => {

0 commit comments

Comments
 (0)