diff --git a/packages/legacy-events/__tests__/accumulate-test.internal.js b/packages/legacy-events/__tests__/accumulate-test.internal.js deleted file mode 100644 index 7038502ffe70..000000000000 --- a/packages/legacy-events/__tests__/accumulate-test.internal.js +++ /dev/null @@ -1,49 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @emails react-core - */ - -'use strict'; - -let accumulate; - -describe('accumulate', () => { - beforeEach(() => { - accumulate = require('legacy-events/accumulate').default; - }); - - it('throws if the second item is null', () => { - expect(function() { - accumulate([], null); - }).toThrowError( - 'accumulate(...): Accumulated items must not be null or undefined.', - ); - }); - - it('return second item if first item is null', () => { - const a = []; - expect(accumulate(null, a)).toBe(a); - }); - - it('return concatenation of items if first item is an array', () => { - const a = ['hello']; - const b = 'world'; - expect(accumulate(a, b)).toEqual(['hello', 'world']); - }); - - it('return concatenation of items if second item is an array', () => { - const a = 'hello'; - const b = ['world']; - expect(accumulate(a, b)).toEqual(['hello', 'world']); - }); - - it('return an array containing both items if neither item is an array', () => { - const a = 'hello'; - const b = 'world'; - expect(accumulate(a, b)).toEqual(['hello', 'world']); - }); -}); diff --git a/packages/legacy-events/__tests__/accumulateInto-test.internal.js b/packages/legacy-events/__tests__/accumulateInto-test.internal.js deleted file mode 100644 index 0a1b11d360f3..000000000000 --- a/packages/legacy-events/__tests__/accumulateInto-test.internal.js +++ /dev/null @@ -1,49 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @emails react-core - */ - -'use strict'; - -let accumulateInto; - -describe('accumulateInto', () => { - beforeEach(() => { - accumulateInto = require('legacy-events/accumulateInto').default; - }); - - it('throws if the second item is null', () => { - expect(function() { - accumulateInto([], null); - }).toThrowError( - 'accumulateInto(...): Accumulated items must not be null or undefined.', - ); - }); - - it('returns the second item if first is null', () => { - const a = []; - expect(accumulateInto(null, a)).toBe(a); - }); - - it('merges the second into the first if first item is an array', () => { - const a = [1, 2]; - const b = [3, 4]; - accumulateInto(a, b); - expect(a).toEqual([1, 2, 3, 4]); - expect(b).toEqual([3, 4]); - const c = [1]; - accumulateInto(c, 2); - expect(c).toEqual([1, 2]); - }); - - it('returns a new array if first or both items are scalar', () => { - const a = [2]; - expect(accumulateInto(1, a)).toEqual([1, 2]); - expect(a).toEqual([2]); - expect(accumulateInto(1, 2)).toEqual([1, 2]); - }); -}); diff --git a/packages/react-dom/src/__tests__/ReactBrowserEventEmitter-test.internal.js b/packages/react-dom/src/__tests__/ReactBrowserEventEmitter-test.js similarity index 68% rename from packages/react-dom/src/__tests__/ReactBrowserEventEmitter-test.internal.js rename to packages/react-dom/src/__tests__/ReactBrowserEventEmitter-test.js index f4a8071fbf05..ebe98803b35d 100644 --- a/packages/react-dom/src/__tests__/ReactBrowserEventEmitter-test.internal.js +++ b/packages/react-dom/src/__tests__/ReactBrowserEventEmitter-test.js @@ -9,15 +9,9 @@ 'use strict'; -let EventPluginGetListener; -let EventPluginRegistry; let React; let ReactDOM; -let ReactDOMComponentTree; -let listenToEvent; -let ReactDOMEventListener; let ReactTestUtils; -let ReactFeatureFlags; let idCallOrder; const recordID = function(id) { @@ -33,7 +27,6 @@ const recordIDAndReturnFalse = function(id, event) { }; const LISTENER = jest.fn(); const ON_CLICK_KEY = 'onClick'; -const ON_CHANGE_KEY = 'onChange'; const ON_MOUSE_ENTER_KEY = 'onMouseEnter'; let GRANDPARENT; @@ -41,42 +34,20 @@ let PARENT; let CHILD; let BUTTON; -let getListener; let putListener; let deleteAllListeners; let container; -function registerSimpleTestHandler() { - putListener(CHILD, ON_CLICK_KEY, LISTENER); - const listener = getListener(CHILD, ON_CLICK_KEY); - expect(listener).toEqual(LISTENER); - return getListener(CHILD, ON_CLICK_KEY); -} - -// We should probably remove this file at some point, it's just full of -// internal API usage. +// This test is written in a bizarre way because it was previously using internals. +// It should probably be rewritten but we're keeping it for some extra coverage. describe('ReactBrowserEventEmitter', () => { beforeEach(() => { jest.resetModules(); LISTENER.mockClear(); - ReactFeatureFlags = require('shared/ReactFeatureFlags'); - EventPluginGetListener = require('react-dom/src/events/getListener') - .default; - EventPluginRegistry = require('legacy-events/EventPluginRegistry'); React = require('react'); ReactDOM = require('react-dom'); - ReactDOMComponentTree = require('../client/ReactDOMComponentTree'); - if (ReactFeatureFlags.enableModernEventSystem) { - listenToEvent = require('../events/DOMModernPluginEventSystem') - .listenToEvent; - } else { - listenToEvent = require('../events/DOMLegacyEventPluginSystem') - .legacyListenToEvent; - } - - ReactDOMEventListener = require('../events/ReactDOMEventListener'); ReactTestUtils = require('react-dom/test-utils'); container = document.createElement('div'); @@ -111,10 +82,6 @@ describe('ReactBrowserEventEmitter', () => { renderTree(); - getListener = function(node, eventName) { - const inst = ReactDOMComponentTree.getInstanceFromNode(node); - return EventPluginGetListener(inst, eventName); - }; putListener = function(node, eventName, listener) { switch (node) { case CHILD: @@ -159,47 +126,6 @@ describe('ReactBrowserEventEmitter', () => { container = null; }); - it('should store a listener correctly', () => { - registerSimpleTestHandler(); - const listener = getListener(CHILD, ON_CLICK_KEY); - expect(listener).toBe(LISTENER); - }); - - it('should retrieve a listener correctly', () => { - registerSimpleTestHandler(); - const listener = getListener(CHILD, ON_CLICK_KEY); - expect(listener).toEqual(LISTENER); - }); - - it('should not retrieve listeners on a disabled interactive element', () => { - putListener(BUTTON, ON_MOUSE_ENTER_KEY, recordID.bind(null, BUTTON)); - const listener = getListener(BUTTON, ON_MOUSE_ENTER_KEY); - expect(listener).toBe(null); - }); - - it('should clear all handlers when asked to', () => { - registerSimpleTestHandler(); - deleteAllListeners(CHILD); - const listener = getListener(CHILD, ON_CLICK_KEY); - expect(listener).toBe(undefined); - }); - - it('should invoke a simple handler registered on a node', () => { - registerSimpleTestHandler(); - CHILD.click(); - expect(LISTENER).toHaveBeenCalledTimes(1); - }); - - it('should not invoke handlers if ReactDOMEventListener is disabled', () => { - registerSimpleTestHandler(); - ReactDOMEventListener.setEnabled(false); - CHILD.click(); - expect(LISTENER).toHaveBeenCalledTimes(0); - ReactDOMEventListener.setEnabled(true); - CHILD.click(); - expect(LISTENER).toHaveBeenCalledTimes(1); - }); - it('should bubble simply', () => { putListener(CHILD, ON_CLICK_KEY, recordID.bind(null, CHILD)); putListener(PARENT, ON_CLICK_KEY, recordID.bind(null, PARENT)); @@ -356,41 +282,4 @@ describe('ReactBrowserEventEmitter', () => { expect(idCallOrder.length).toBe(1); expect(idCallOrder[0]).toBe(CHILD); }); - - it('should listen to events only once', () => { - spyOnDevAndProd(EventTarget.prototype, 'addEventListener'); - listenToEvent(ON_CLICK_KEY, document); - listenToEvent(ON_CLICK_KEY, document); - expect(EventTarget.prototype.addEventListener).toHaveBeenCalledTimes(1); - }); - - it('should work with event plugins without dependencies', () => { - spyOnDevAndProd(EventTarget.prototype, 'addEventListener'); - - listenToEvent(ON_CLICK_KEY, document); - - expect(EventTarget.prototype.addEventListener.calls.argsFor(0)[0]).toBe( - 'click', - ); - }); - - it('should work with event plugins with dependencies', () => { - spyOnDevAndProd(EventTarget.prototype, 'addEventListener'); - - listenToEvent(ON_CHANGE_KEY, document); - - const setEventListeners = []; - const listenCalls = EventTarget.prototype.addEventListener.calls.allArgs(); - for (let i = 0; i < listenCalls.length; i++) { - setEventListeners.push(listenCalls[i][1]); - } - - const module = EventPluginRegistry.registrationNameModules[ON_CHANGE_KEY]; - const dependencies = module.eventTypes.change.dependencies; - expect(setEventListeners.length).toEqual(dependencies.length); - - for (let i = 0; i < setEventListeners.length; i++) { - expect(dependencies.indexOf(setEventListeners[i])).toBeTruthy(); - } - }); }); diff --git a/packages/react-dom/src/events/ReactDOMEventListener.js b/packages/react-dom/src/events/ReactDOMEventListener.js index 1eb560351344..826ec784b180 100644 --- a/packages/react-dom/src/events/ReactDOMEventListener.js +++ b/packages/react-dom/src/events/ReactDOMEventListener.js @@ -67,6 +67,8 @@ const { // TODO: can we stop exporting these? export let _enabled = true; +// This is exported in FB builds for use by legacy FB layer infra. +// We'd like to remove this but it's not clear if this is safe. export function setEnabled(enabled: ?boolean) { _enabled = !!enabled; }