diff --git a/package.json b/package.json index 73c007dfa3f22..23692fd8d4ca4 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "gzip-js": "~0.3.2", "gzip-size": "^3.0.0", "jasmine-check": "^1.0.0-rc.0", - "jest": "^23.0.1", + "jest": "^23.1.0", "jest-diff": "^23.0.1", "merge-stream": "^1.0.0", "minimatch": "^3.0.4", diff --git a/packages/react-dom/src/__tests__/ReactBrowserEventEmitter-test.internal.js b/packages/react-dom/src/__tests__/ReactBrowserEventEmitter-test.internal.js index 85d6e22dfbc07..86a668a4bbc17 100644 --- a/packages/react-dom/src/__tests__/ReactBrowserEventEmitter-test.internal.js +++ b/packages/react-dom/src/__tests__/ReactBrowserEventEmitter-test.internal.js @@ -42,6 +42,8 @@ let getListener; let putListener; let deleteAllListeners; +let container; + function registerSimpleTestHandler() { putListener(CHILD, ON_CLICK_KEY, LISTENER); const listener = getListener(CHILD, ON_CLICK_KEY); @@ -63,7 +65,8 @@ describe('ReactBrowserEventEmitter', () => { ReactBrowserEventEmitter = require('../events/ReactBrowserEventEmitter'); ReactTestUtils = require('react-dom/test-utils'); - const container = document.createElement('div'); + container = document.createElement('div'); + document.body.appendChild(container); let GRANDPARENT_PROPS = {}; let PARENT_PROPS = {}; @@ -129,6 +132,11 @@ describe('ReactBrowserEventEmitter', () => { idCallOrder = []; }); + afterEach(() => { + document.body.removeChild(container); + container = null; + }); + it('should store a listener correctly', () => { registerSimpleTestHandler(); const listener = getListener(CHILD, ON_CLICK_KEY); @@ -150,17 +158,17 @@ describe('ReactBrowserEventEmitter', () => { it('should invoke a simple handler registered on a node', () => { registerSimpleTestHandler(); - ReactTestUtils.Simulate.click(CHILD); + CHILD.click(); expect(LISTENER).toHaveBeenCalledTimes(1); }); it('should not invoke handlers if ReactBrowserEventEmitter is disabled', () => { registerSimpleTestHandler(); ReactBrowserEventEmitter.setEnabled(false); - ReactTestUtils.SimulateNative.click(CHILD); + CHILD.click(); expect(LISTENER).toHaveBeenCalledTimes(0); ReactBrowserEventEmitter.setEnabled(true); - ReactTestUtils.SimulateNative.click(CHILD); + CHILD.click(); expect(LISTENER).toHaveBeenCalledTimes(1); }); @@ -168,7 +176,7 @@ describe('ReactBrowserEventEmitter', () => { putListener(CHILD, ON_CLICK_KEY, recordID.bind(null, CHILD)); putListener(PARENT, ON_CLICK_KEY, recordID.bind(null, PARENT)); putListener(GRANDPARENT, ON_CLICK_KEY, recordID.bind(null, GRANDPARENT)); - ReactTestUtils.Simulate.click(CHILD); + CHILD.click(); expect(idCallOrder.length).toBe(3); expect(idCallOrder[0]).toBe(CHILD); expect(idCallOrder[1]).toBe(PARENT); @@ -179,7 +187,7 @@ describe('ReactBrowserEventEmitter', () => { putListener(GRANDPARENT, ON_CLICK_KEY, recordID.bind(null, 'GRANDPARENT')); putListener(PARENT, ON_CLICK_KEY, recordID.bind(null, 'PARENT')); putListener(CHILD, ON_CLICK_KEY, recordID.bind(null, 'CHILD')); - ReactTestUtils.Simulate.click(CHILD); + CHILD.click(); expect(idCallOrder).toEqual(['CHILD', 'PARENT', 'GRANDPARENT']); idCallOrder = []; @@ -191,7 +199,7 @@ describe('ReactBrowserEventEmitter', () => { recordID.bind(null, 'UPDATED_GRANDPARENT'), ); - ReactTestUtils.Simulate.click(CHILD); + CHILD.click(); expect(idCallOrder).toEqual(['CHILD', 'PARENT', 'UPDATED_GRANDPARENT']); }); @@ -224,7 +232,7 @@ describe('ReactBrowserEventEmitter', () => { recordID(GRANDPARENT); expect(event.currentTarget).toBe(GRANDPARENT); }); - ReactTestUtils.Simulate.click(CHILD); + CHILD.click(); expect(idCallOrder.length).toBe(3); expect(idCallOrder[0]).toBe(CHILD); expect(idCallOrder[1]).toBe(PARENT); @@ -239,7 +247,7 @@ describe('ReactBrowserEventEmitter', () => { recordIDAndStopPropagation.bind(null, PARENT), ); putListener(GRANDPARENT, ON_CLICK_KEY, recordID.bind(null, GRANDPARENT)); - ReactTestUtils.Simulate.click(CHILD); + CHILD.click(); expect(idCallOrder.length).toBe(2); expect(idCallOrder[0]).toBe(CHILD); expect(idCallOrder[1]).toBe(PARENT); @@ -254,7 +262,7 @@ describe('ReactBrowserEventEmitter', () => { e.isPropagationStopped = () => true; }); putListener(GRANDPARENT, ON_CLICK_KEY, recordID.bind(null, GRANDPARENT)); - ReactTestUtils.Simulate.click(CHILD); + CHILD.click(); expect(idCallOrder.length).toBe(2); expect(idCallOrder[0]).toBe(CHILD); expect(idCallOrder[1]).toBe(PARENT); @@ -268,7 +276,7 @@ describe('ReactBrowserEventEmitter', () => { ); putListener(PARENT, ON_CLICK_KEY, recordID.bind(null, PARENT)); putListener(GRANDPARENT, ON_CLICK_KEY, recordID.bind(null, GRANDPARENT)); - ReactTestUtils.Simulate.click(CHILD); + CHILD.click(); expect(idCallOrder.length).toBe(1); expect(idCallOrder[0]).toBe(CHILD); }); @@ -277,7 +285,7 @@ describe('ReactBrowserEventEmitter', () => { putListener(CHILD, ON_CLICK_KEY, recordIDAndReturnFalse.bind(null, CHILD)); putListener(PARENT, ON_CLICK_KEY, recordID.bind(null, PARENT)); putListener(GRANDPARENT, ON_CLICK_KEY, recordID.bind(null, GRANDPARENT)); - ReactTestUtils.Simulate.click(CHILD); + CHILD.click(); expect(idCallOrder.length).toBe(3); expect(idCallOrder[0]).toBe(CHILD); expect(idCallOrder[1]).toBe(PARENT); @@ -300,7 +308,7 @@ describe('ReactBrowserEventEmitter', () => { }; putListener(CHILD, ON_CLICK_KEY, handleChildClick); putListener(PARENT, ON_CLICK_KEY, handleParentClick); - ReactTestUtils.Simulate.click(CHILD); + CHILD.click(); expect(handleParentClick).toHaveBeenCalledTimes(1); }); @@ -310,7 +318,7 @@ describe('ReactBrowserEventEmitter', () => { putListener(PARENT, ON_CLICK_KEY, handleParentClick); }; putListener(CHILD, ON_CLICK_KEY, handleChildClick); - ReactTestUtils.Simulate.click(CHILD); + CHILD.click(); expect(handleParentClick).toHaveBeenCalledTimes(0); }); diff --git a/packages/react-dom/src/__tests__/ReactComponentLifeCycle-test.js b/packages/react-dom/src/__tests__/ReactComponentLifeCycle-test.js index 965b04f30aaa9..7be40ebbaee1f 100644 --- a/packages/react-dom/src/__tests__/ReactComponentLifeCycle-test.js +++ b/packages/react-dom/src/__tests__/ReactComponentLifeCycle-test.js @@ -1065,7 +1065,9 @@ describe('ReactComponentLifeCycle', () => { } } - ReactTestUtils.renderIntoDocument(); + const container = document.createElement('div'); + document.body.appendChild(container); + ReactDOM.render(, container); expect(divRef.current.textContent).toBe('remote:0, local:0'); // Trigger setState() calls @@ -1073,8 +1075,10 @@ describe('ReactComponentLifeCycle', () => { expect(divRef.current.textContent).toBe('remote:1, local:1'); // Trigger batched setState() calls - ReactTestUtils.Simulate.click(divRef.current); + divRef.current.click(); expect(divRef.current.textContent).toBe('remote:2, local:2'); + + document.body.removeChild(container); }); it('should pass the return value from getSnapshotBeforeUpdate to componentDidUpdate', () => { diff --git a/packages/react-dom/src/__tests__/ReactCompositeComponent-test.js b/packages/react-dom/src/__tests__/ReactCompositeComponent-test.js index 216afa8550d3e..4b4e4b338b820 100644 --- a/packages/react-dom/src/__tests__/ReactCompositeComponent-test.js +++ b/packages/react-dom/src/__tests__/ReactCompositeComponent-test.js @@ -140,13 +140,15 @@ describe('ReactCompositeComponent', () => { }); it('should react to state changes from callbacks', () => { - const instance = ReactTestUtils.renderIntoDocument(); + const container = document.createElement('div'); + document.body.appendChild(container); + const instance = ReactDOM.render(, container); let el = ReactDOM.findDOMNode(instance); expect(el.tagName).toBe('A'); - - ReactTestUtils.Simulate.click(el); + el.click(); el = ReactDOM.findDOMNode(instance); expect(el.tagName).toBe('B'); + document.body.removeChild(container); }); it('should rewire refs when rendering to different child types', () => { diff --git a/packages/react-dom/src/__tests__/ReactCompositeComponentNestedState-test.js b/packages/react-dom/src/__tests__/ReactCompositeComponentNestedState-test.js index 94a33a457a3f0..e233e78b72082 100644 --- a/packages/react-dom/src/__tests__/ReactCompositeComponentNestedState-test.js +++ b/packages/react-dom/src/__tests__/ReactCompositeComponentNestedState-test.js @@ -11,13 +11,11 @@ let React; let ReactDOM; -let ReactTestUtils; describe('ReactCompositeComponentNestedState-state', () => { beforeEach(() => { React = require('react'); ReactDOM = require('react-dom'); - ReactTestUtils = require('react-dom/test-utils'); }); it('should provide up to date values for props', () => { @@ -102,7 +100,7 @@ describe('ReactCompositeComponentNestedState-state', () => { void ReactDOM.render(, container); // click "light green" - ReactTestUtils.Simulate.click(container.childNodes[0].childNodes[3]); + container.childNodes[0].childNodes[3].click(); expect(logger.mock.calls).toEqual([ ['parent-render', 'blue'], diff --git a/packages/react-dom/src/__tests__/ReactDOM-test.js b/packages/react-dom/src/__tests__/ReactDOM-test.js index cca40165fd458..639915189a23d 100644 --- a/packages/react-dom/src/__tests__/ReactDOM-test.js +++ b/packages/react-dom/src/__tests__/ReactDOM-test.js @@ -308,15 +308,9 @@ describe('ReactDOM', () => { it("shouldn't fire duplicate event handler while handling other nested dispatch", () => { const actual = []; - function click(node) { - ReactTestUtils.Simulate.click(node, { - path: [node, container], - }); - } - class Wrapper extends React.Component { componentDidMount() { - click(this.ref1); + this.ref1.click(); } render() { @@ -325,7 +319,7 @@ describe('ReactDOM', () => {
{ actual.push('1st node clicked'); - click(this.ref2); + this.ref2.click(); }} ref={ref => (this.ref1 = ref)} /> @@ -341,6 +335,7 @@ describe('ReactDOM', () => { } const container = document.createElement('div'); + document.body.appendChild(container); ReactDOM.render(, container); const expected = [ @@ -348,6 +343,8 @@ describe('ReactDOM', () => { "2nd node clicked imperatively from 1st's handler", ]; expect(actual).toEqual(expected); + + document.body.removeChild(container); }); it('should not crash with devtools installed', () => { diff --git a/packages/react-dom/src/__tests__/ReactDOMFiber-test.js b/packages/react-dom/src/__tests__/ReactDOMFiber-test.js index 911f161b0e660..0eb37f00d0d9d 100644 --- a/packages/react-dom/src/__tests__/ReactDOMFiber-test.js +++ b/packages/react-dom/src/__tests__/ReactDOMFiber-test.js @@ -11,7 +11,6 @@ const React = require('react'); const ReactDOM = require('react-dom'); -const ReactTestUtils = require('react-dom/test-utils'); const PropTypes = require('prop-types'); describe('ReactDOMFiber', () => { @@ -843,6 +842,7 @@ describe('ReactDOMFiber', () => { it('should bubble events from the portal to the parent', () => { const portalContainer = document.createElement('div'); + document.body.appendChild(portalContainer); const ops = []; let portal = null; @@ -863,13 +863,17 @@ describe('ReactDOMFiber', () => { expect(portal.tagName).toBe('DIV'); - ReactTestUtils.Simulate.click(portal); + portal.click(); expect(ops).toEqual(['portal clicked', 'parent clicked']); + + document.body.removeChild(portalContainer); }); it('should not onMouseLeave when staying in the portal', () => { const portalContainer = document.createElement('div'); + document.body.appendChild(container); + document.body.appendChild(portalContainer); let ops = []; let firstTarget = null; @@ -878,14 +882,22 @@ describe('ReactDOMFiber', () => { function simulateMouseMove(from, to) { if (from) { - ReactTestUtils.SimulateNative.mouseOut(from, { - relatedTarget: to, - }); + from.dispatchEvent( + new MouseEvent('mouseout', { + bubbles: true, + cancelable: true, + relatedTarget: to, + }), + ); } if (to) { - ReactTestUtils.SimulateNative.mouseOver(to, { - relatedTarget: from, - }); + to.dispatchEvent( + new MouseEvent('mouseover', { + bubbles: true, + cancelable: true, + relatedTarget: from, + }), + ); } } @@ -928,6 +940,9 @@ describe('ReactDOMFiber', () => { 'leave portal', 'leave parent', // Only when we leave the portal does onMouseLeave fire. ]); + + document.body.removeChild(container); + document.body.removeChild(portalContainer); }); it('should throw on bad createPortal argument', () => { @@ -967,6 +982,7 @@ describe('ReactDOMFiber', () => { }); it('should not update event handlers until commit', () => { + document.body.appendChild(container); let ops = []; const handlerA = () => ops.push('A'); const handlerB = () => ops.push('B'); @@ -988,7 +1004,7 @@ describe('ReactDOMFiber', () => { class Click extends React.Component { constructor() { super(); - click(node); + node.click(); } render() { return null; @@ -1000,11 +1016,7 @@ describe('ReactDOMFiber', () => { const node = container.firstChild; expect(node.tagName).toEqual('DIV'); - function click(target) { - ReactTestUtils.Simulate.click(target); - } - - click(node); + node.click(); expect(ops).toEqual(['A']); ops = []; @@ -1012,7 +1024,7 @@ describe('ReactDOMFiber', () => { // Render with the other event handler. inst.flip(); - click(node); + node.click(); expect(ops).toEqual(['B']); ops = []; @@ -1020,7 +1032,7 @@ describe('ReactDOMFiber', () => { // Rerender without changing any props. inst.tick(); - click(node); + node.click(); expect(ops).toEqual(['B']); ops = []; @@ -1040,8 +1052,10 @@ describe('ReactDOMFiber', () => { ops = []; // Any click that happens after commit, should invoke A. - click(node); + node.click(); expect(ops).toEqual(['A']); + + document.body.removeChild(container); }); it('should not crash encountering low-priority tree', () => { diff --git a/packages/react-dom/src/__tests__/ReactEventIndependence-test.js b/packages/react-dom/src/__tests__/ReactEventIndependence-test.js index 5133c3d8181b1..588833c688aed 100644 --- a/packages/react-dom/src/__tests__/ReactEventIndependence-test.js +++ b/packages/react-dom/src/__tests__/ReactEventIndependence-test.js @@ -11,7 +11,6 @@ let React; let ReactDOM; -let ReactTestUtils; describe('ReactEventIndependence', () => { beforeEach(() => { @@ -19,38 +18,45 @@ describe('ReactEventIndependence', () => { React = require('react'); ReactDOM = require('react-dom'); - ReactTestUtils = require('react-dom/test-utils'); }); it('does not crash with other react inside', () => { let clicks = 0; - const div = ReactTestUtils.renderIntoDocument( + const container = document.createElement('div'); + document.body.appendChild(container); + const div = ReactDOM.render(
clicks++} dangerouslySetInnerHTML={{ __html: '
', }} />, + container, ); - ReactTestUtils.SimulateNative.click(div.firstChild); + + div.firstChild.click(); expect(clicks).toBe(1); + document.body.removeChild(container); }); it('does not crash with other react outside', () => { let clicks = 0; const outer = document.createElement('div'); + document.body.appendChild(outer); outer.setAttribute('data-reactid', '.z'); const inner = ReactDOM.render( , outer, ); - ReactTestUtils.SimulateNative.click(inner); + inner.click(); expect(clicks).toBe(1); + document.body.removeChild(outer); }); it('does not when event fired on unmounted tree', () => { let clicks = 0; const container = document.createElement('div'); + document.body.appendChild(container); const button = ReactDOM.render( , container, @@ -59,9 +65,10 @@ describe('ReactEventIndependence', () => { // Now we unmount the component, as if caused by a non-React event handler // for the same click we're about to simulate, like closing a layer: ReactDOM.unmountComponentAtNode(container); - ReactTestUtils.SimulateNative.click(button); + button.click(); // Since the tree is unmounted, we don't dispatch the click event. expect(clicks).toBe(0); + document.body.removeChild(container); }); }); diff --git a/packages/react-dom/src/__tests__/ReactServerRenderingHydration.js b/packages/react-dom/src/__tests__/ReactServerRenderingHydration.js index 3fa9a18eaa437..afa6de92337b4 100644 --- a/packages/react-dom/src/__tests__/ReactServerRenderingHydration.js +++ b/packages/react-dom/src/__tests__/ReactServerRenderingHydration.js @@ -12,7 +12,6 @@ let React; let ReactDOM; let ReactDOMServer; -let ReactTestUtils; // These tests rely both on ReactDOMServer and ReactDOM. // If a test only needs ReactDOMServer, put it in ReactServerRendering-test instead. @@ -21,7 +20,6 @@ describe('ReactDOMServerHydration', () => { jest.resetModules(); React = require('react'); ReactDOM = require('react-dom'); - ReactTestUtils = require('react-dom/test-utils'); ReactDOMServer = require('react-dom/server'); }); @@ -48,6 +46,7 @@ describe('ReactDOMServerHydration', () => { } const element = document.createElement('div'); + document.body.appendChild(element); ReactDOM.render(, element); let lastMarkup = element.innerHTML; @@ -89,7 +88,8 @@ describe('ReactDOMServerHydration', () => { // Ensure the events system works after mount into server markup expect(numClicks).toEqual(0); - ReactTestUtils.Simulate.click(ReactDOM.findDOMNode(instance.refs.span)); + + ReactDOM.findDOMNode(instance.refs.span).click(); expect(numClicks).toEqual(1); ReactDOM.unmountComponentAtNode(element); @@ -107,8 +107,10 @@ describe('ReactDOMServerHydration', () => { // Ensure the events system works after markup mismatch. expect(numClicks).toEqual(1); - ReactTestUtils.Simulate.click(ReactDOM.findDOMNode(instance.refs.span)); + ReactDOM.findDOMNode(instance.refs.span).click(); expect(numClicks).toEqual(2); + + document.body.removeChild(element); }); it('should have the correct mounting behavior (new hydrate API)', () => { @@ -134,6 +136,7 @@ describe('ReactDOMServerHydration', () => { } const element = document.createElement('div'); + document.body.appendChild(element); ReactDOM.render(, element); let lastMarkup = element.innerHTML; @@ -167,7 +170,7 @@ describe('ReactDOMServerHydration', () => { // Ensure the events system works after mount into server markup expect(numClicks).toEqual(0); - ReactTestUtils.Simulate.click(ReactDOM.findDOMNode(instance.refs.span)); + ReactDOM.findDOMNode(instance.refs.span).click(); expect(numClicks).toEqual(1); ReactDOM.unmountComponentAtNode(element); @@ -185,8 +188,10 @@ describe('ReactDOMServerHydration', () => { // Ensure the events system works after markup mismatch. expect(numClicks).toEqual(1); - ReactTestUtils.Simulate.click(ReactDOM.findDOMNode(instance.refs.span)); + ReactDOM.findDOMNode(instance.refs.span).click(); expect(numClicks).toEqual(2); + + document.body.removeChild(element); }); // We have a polyfill for autoFocus on the client, but we intentionally don't diff --git a/packages/react-dom/src/__tests__/refs-test.js b/packages/react-dom/src/__tests__/refs-test.js index f439118cd75ec..6ca2c981f6ad4 100644 --- a/packages/react-dom/src/__tests__/refs-test.js +++ b/packages/react-dom/src/__tests__/refs-test.js @@ -10,6 +10,7 @@ 'use strict'; let React = require('react'); +let ReactDOM = require('react-dom'); let ReactTestUtils = require('react-dom/test-utils'); /** @@ -81,24 +82,6 @@ class TestRefsComponent extends React.Component { } } -/** - * Render a TestRefsComponent and ensure that the main refs are wired up. - */ -const renderTestRefsComponent = function() { - const testRefsComponent = ReactTestUtils.renderIntoDocument( - , - ); - expect(testRefsComponent instanceof TestRefsComponent).toBe(true); - - const generalContainer = testRefsComponent.refs.myContainer; - expect(generalContainer instanceof GeneralContainerComponent).toBe(true); - - const counter = testRefsComponent.refs.myCounter; - expect(counter instanceof ClickCounter).toBe(true); - - return testRefsComponent; -}; - const expectClickLogsLengthToBe = function(instance, length) { const clickLogs = ReactTestUtils.scryRenderedDOMComponentsWithClass( instance, @@ -109,12 +92,40 @@ const expectClickLogsLengthToBe = function(instance, length) { }; describe('reactiverefs', () => { + let container; + beforeEach(() => { jest.resetModules(); React = require('react'); + ReactDOM = require('react-dom'); ReactTestUtils = require('react-dom/test-utils'); }); + afterEach(() => { + if (container) { + document.body.removeChild(container); + container = null; + } + }); + + /** + * Render a TestRefsComponent and ensure that the main refs are wired up. + */ + const renderTestRefsComponent = function() { + container = document.createElement('div'); + document.body.appendChild(container); + const testRefsComponent = ReactDOM.render(, container); + expect(testRefsComponent instanceof TestRefsComponent).toBe(true); + + const generalContainer = testRefsComponent.refs.myContainer; + expect(generalContainer instanceof GeneralContainerComponent).toBe(true); + + const counter = testRefsComponent.refs.myCounter; + expect(counter instanceof ClickCounter).toBe(true); + + return testRefsComponent; + }; + /** * Ensure that for every click log there is a corresponding ref (from the * perspective of the injected ClickCounter component. @@ -129,18 +140,18 @@ describe('reactiverefs', () => { expectClickLogsLengthToBe(testRefsComponent, 1); // After clicking the reset, there should still only be one click log ref. - ReactTestUtils.Simulate.click(testRefsComponent.refs.resetDiv); + testRefsComponent.refs.resetDiv.click(); expectClickLogsLengthToBe(testRefsComponent, 1); // Begin incrementing clicks (and therefore refs). - ReactTestUtils.Simulate.click(clickIncrementer); + clickIncrementer.click(); expectClickLogsLengthToBe(testRefsComponent, 2); - ReactTestUtils.Simulate.click(clickIncrementer); + clickIncrementer.click(); expectClickLogsLengthToBe(testRefsComponent, 3); // Now reset again - ReactTestUtils.Simulate.click(testRefsComponent.refs.resetDiv); + testRefsComponent.refs.resetDiv.click(); expectClickLogsLengthToBe(testRefsComponent, 1); }); }); @@ -168,6 +179,7 @@ describe('ref swapping', () => { beforeEach(() => { jest.resetModules(); React = require('react'); + ReactDOM = require('react-dom'); ReactTestUtils = require('react-dom/test-utils'); RefHopsAround = class extends React.Component { @@ -293,7 +305,6 @@ describe('ref swapping', () => { describe('root level refs', () => { it('attaches and detaches root refs', () => { - const ReactDOM = require('react-dom'); let inst = null; // host node diff --git a/packages/react-dom/src/events/__tests__/SimpleEventPlugin-test.internal.js b/packages/react-dom/src/events/__tests__/SimpleEventPlugin-test.internal.js index 4020e69fd0cae..3525f2d09aca2 100644 --- a/packages/react-dom/src/events/__tests__/SimpleEventPlugin-test.internal.js +++ b/packages/react-dom/src/events/__tests__/SimpleEventPlugin-test.internal.js @@ -12,23 +12,25 @@ describe('SimpleEventPlugin', function() { let React; let ReactDOM; - let ReactTestUtils; let ReactFeatureFlags; let onClick; + let container; function expectClickThru(element) { - ReactTestUtils.SimulateNative.click(ReactDOM.findDOMNode(element)); + ReactDOM.findDOMNode(element).click(); expect(onClick).toHaveBeenCalledTimes(1); } function expectNoClickThru(element) { - ReactTestUtils.SimulateNative.click(ReactDOM.findDOMNode(element)); + ReactDOM.findDOMNode(element).click(); expect(onClick).toHaveBeenCalledTimes(0); } function mounted(element) { - element = ReactTestUtils.renderIntoDocument(element); + container = document.createElement('div'); + document.body.appendChild(container); + element = ReactDOM.render(element, container); return element; } @@ -60,54 +62,59 @@ describe('SimpleEventPlugin', function() { jest.resetModules(); React = require('react'); ReactDOM = require('react-dom'); - ReactTestUtils = require('react-dom/test-utils'); onClick = jest.fn(); }); + afterEach(() => { + if (container && document.body.contains(container)) { + document.body.removeChild(container); + container = null; + } + }); + it('A non-interactive tags click when disabled', function() { const element =
; expectClickThru(mounted(element)); }); it('A non-interactive tags clicks bubble when disabled', function() { - const element = ReactTestUtils.renderIntoDocument( + const element = mounted(
, ); const child = ReactDOM.findDOMNode(element).firstChild; - - ReactTestUtils.SimulateNative.click(child); + child.click(); expect(onClick).toHaveBeenCalledTimes(1); }); it('does not register a click when clicking a child of a disabled element', function() { - const element = ReactTestUtils.renderIntoDocument( + const element = mounted( , ); const child = ReactDOM.findDOMNode(element).querySelector('span'); - ReactTestUtils.SimulateNative.click(child); + child.click(); expect(onClick).toHaveBeenCalledTimes(0); }); it('triggers click events for children of disabled elements', function() { - const element = ReactTestUtils.renderIntoDocument( + const element = mounted( , ); const child = ReactDOM.findDOMNode(element).querySelector('span'); - ReactTestUtils.SimulateNative.click(child); + child.click(); expect(onClick).toHaveBeenCalledTimes(1); }); it('triggers parent captured click events when target is a child of a disabled elements', function() { - const element = ReactTestUtils.renderIntoDocument( + const element = mounted(
, ); const child = ReactDOM.findDOMNode(element).querySelector('span'); - ReactTestUtils.SimulateNative.click(child); + child.click(); expect(onClick).toHaveBeenCalledTimes(1); }); @@ -152,7 +159,8 @@ describe('SimpleEventPlugin', function() { }); it('should forward clicks when it becomes not disabled', () => { - const container = document.createElement('div'); + container = document.createElement('div'); + document.body.appendChild(container); let element = ReactDOM.render( React.createElement(tagName, {onClick: onClick, disabled: true}), container, @@ -165,7 +173,8 @@ describe('SimpleEventPlugin', function() { }); it('should not forward clicks when it becomes disabled', () => { - const container = document.createElement('div'); + container = document.createElement('div'); + document.body.appendChild(container); let element = ReactDOM.render( React.createElement(tagName, {onClick: onClick}), container, @@ -178,7 +187,8 @@ describe('SimpleEventPlugin', function() { }); it('should work correctly if the listener is changed', () => { - const container = document.createElement('div'); + container = document.createElement('div'); + document.body.appendChild(container); let element = ReactDOM.render( React.createElement(tagName, {onClick: onClick, disabled: true}), container, @@ -193,7 +203,7 @@ describe('SimpleEventPlugin', function() { }); it('batches updates that occur as a result of a nested event dispatch', () => { - const container = document.createElement('div'); + container = document.createElement('div'); document.body.appendChild(container); let ops = []; @@ -251,7 +261,7 @@ describe('SimpleEventPlugin', function() { }); it('flushes pending interactive work before extracting event handler', () => { - const container = document.createElement('div'); + container = document.createElement('div'); const root = ReactDOM.unstable_createRoot(container); document.body.appendChild(container); @@ -331,7 +341,7 @@ describe('SimpleEventPlugin', function() { }); it('end result of many interactive updates is deterministic', () => { - const container = document.createElement('div'); + container = document.createElement('div'); const root = ReactDOM.unstable_createRoot(container); document.body.appendChild(container); @@ -386,7 +396,7 @@ describe('SimpleEventPlugin', function() { }); it('flushes lowest pending interactive priority', () => { - const container = document.createElement('div'); + container = document.createElement('div'); document.body.appendChild(container); let button; @@ -459,7 +469,7 @@ describe('SimpleEventPlugin', function() { // See http://www.quirksmode.org/blog/archives/2010/09/click_event_del.html it('does not add a local click to interactive elements', function() { - const container = document.createElement('div'); + container = document.createElement('div'); ReactDOM.render(