Skip to content

Commit d83916e

Browse files
skiritsisgaearon
authored andcommitted
Rewrite SelectEventPlugin-test to test behavior using Public API (#11299) (#11676)
* Rewrite SelectEventPlugin-test to test behavior using Public API * Minor refactor * Make sure that we test that "focus" event is ignored Use newer API when creating events * Rewrote the other test to use Public API as well * Tweak the test * Remove -internal suffix * Oops
1 parent c3f1b6c commit d83916e

2 files changed

Lines changed: 111 additions & 91 deletions

File tree

packages/react-dom/src/events/__tests__/SelectEventPlugin-test.internal.js

Lines changed: 0 additions & 91 deletions
This file was deleted.
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
/**
2+
* Copyright (c) 2013-present, Facebook, Inc.
3+
*
4+
* This source code is licensed under the MIT license found in the
5+
* LICENSE file in the root directory of this source tree.
6+
*
7+
* @emails react-core
8+
*/
9+
10+
'use strict';
11+
12+
var React;
13+
var ReactDOM;
14+
15+
describe('SelectEventPlugin', () => {
16+
var container;
17+
18+
beforeEach(() => {
19+
React = require('react');
20+
ReactDOM = require('react-dom');
21+
22+
container = document.createElement('div');
23+
document.body.appendChild(container);
24+
});
25+
26+
afterEach(() => {
27+
document.body.removeChild(container);
28+
container = null;
29+
});
30+
31+
// See https://github.com/facebook/react/pull/3639 for details.
32+
it('does not get confused when dependent events are registered independently', () => {
33+
var select = jest.fn();
34+
var onSelect = event => {
35+
expect(typeof event).toBe('object');
36+
expect(event.type).toBe('select');
37+
expect(event.target).toBe(node);
38+
select(event.currentTarget);
39+
};
40+
41+
// Pass `onMouseDown` so React registers a top-level listener.
42+
var node = ReactDOM.render(
43+
<input type="text" onMouseDown={function() {}} />,
44+
container,
45+
);
46+
node.focus();
47+
48+
// Trigger `mousedown` and `mouseup`. Note that
49+
// React is not currently listening to `mouseup`.
50+
node.dispatchEvent(
51+
new MouseEvent('mousedown', {
52+
bubbles: true,
53+
cancelable: true,
54+
}),
55+
);
56+
node.dispatchEvent(
57+
new MouseEvent('mouseup', {
58+
bubbles: true,
59+
cancelable: true,
60+
}),
61+
);
62+
63+
// Now subscribe to `onSelect`.
64+
ReactDOM.render(<input type="text" onSelect={onSelect} />, container);
65+
node.focus();
66+
67+
// This triggers a `select` event in our polyfill.
68+
node.dispatchEvent(
69+
new KeyboardEvent('keydown', {bubbles: true, cancelable: true}),
70+
);
71+
72+
// Verify that it doesn't get "stuck" waiting for
73+
// a `mouseup` event that it has "missed" because
74+
// a top-level listener didn't exist yet.
75+
expect(select.mock.calls.length).toBe(1);
76+
});
77+
78+
it('should fire `onSelect` when a listener is present', () => {
79+
var select = jest.fn();
80+
var onSelect = event => {
81+
expect(typeof event).toBe('object');
82+
expect(event.type).toBe('select');
83+
expect(event.target).toBe(node);
84+
select(event.currentTarget);
85+
};
86+
87+
var node = ReactDOM.render(
88+
<input type="text" onSelect={onSelect} />,
89+
container,
90+
);
91+
node.focus();
92+
93+
var nativeEvent = new MouseEvent('focus', {
94+
bubbles: true,
95+
cancelable: true,
96+
});
97+
node.dispatchEvent(nativeEvent);
98+
expect(select.mock.calls.length).toBe(0);
99+
100+
nativeEvent = new MouseEvent('mousedown', {
101+
bubbles: true,
102+
cancelable: true,
103+
});
104+
node.dispatchEvent(nativeEvent);
105+
expect(select.mock.calls.length).toBe(0);
106+
107+
nativeEvent = new MouseEvent('mouseup', {bubbles: true, cancelable: true});
108+
node.dispatchEvent(nativeEvent);
109+
expect(select.mock.calls.length).toBe(1);
110+
});
111+
});

0 commit comments

Comments
 (0)