From 7dc27d35c13fa0f5e0945d6705c1095afcbad867 Mon Sep 17 00:00:00 2001 From: Dan Abramov Date: Wed, 14 Jun 2017 22:10:33 +0100 Subject: [PATCH] Streamline Fiber/Stack testing and bundling setup a little bit (#9964) * Remove internal forwarding modules for /lib/ * Add *Entry suffix to all entry points * Don't bundle ReactNativeFeatureFlags since it's shimmed * Delete TestRendererStack * Switch tests at forwarding modules rather than via Jest * Share mocks between regular and equivalence fixtures * Rename environment flag to be more generic * Remove accidental variable name change * Minor naming changes for consistency Files that have two versions get the engine in variable name. --- mocks/ReactElementTestChild.js | 2 +- mocks/ReactMockedComponentTestComponent.js | 2 +- scripts/fiber/record-tests | 2 +- scripts/jest/setupMocks.js | 26 +++ scripts/jest/setupSpecEquivalenceReporter.js | 2 + scripts/jest/test-framework-setup.js | 34 +-- scripts/rollup/build.js | 7 - scripts/rollup/bundles.js | 34 +-- scripts/rollup/modules.js | 2 + src/fb/ReactDOMFiberFBEntry.js | 2 +- src/fb/ReactFBEntry.js | 2 +- src/isomorphic/{React.js => ReactEntry.js} | 2 +- .../element/__tests__/ReactElement-test.js | 2 +- src/node_modules/react-art/index.js | 2 +- src/node_modules/react-dom/index.js | 7 +- src/node_modules/react-dom/lib/ReactDOM.js | 9 - .../react-dom/lib/ReactDOMServer.js | 9 - .../react-dom/lib/ReactInstanceMap.js | 9 - src/node_modules/react-dom/lib/ReactPerf.js | 9 - .../react-dom/lib/ReactTestUtils.js | 9 - .../lib/getVendorPrefixedEventName.js | 9 - src/node_modules/react-dom/server.js | 7 +- src/node_modules/react-dom/test-utils.js | 2 +- src/node_modules/react-native/index.js | 7 +- src/node_modules/react-noop-renderer/index.js | 2 +- src/node_modules/react-test-renderer/index.js | 2 +- .../react-test-renderer/shallow.js | 2 +- src/node_modules/react/index.js | 2 +- .../react/lib/ReactComponentTreeHook.js | 9 - .../react/lib/ReactCurrentOwner.js | 9 - .../react/lib/ReactDebugCurrentFrame.js | 9 - .../ReactComponentTreeHook-test.native.js | 2 +- src/renderers/__tests__/ReactPerf-test.js | 2 +- .../__tests__/ReactStatelessComponent-test.js | 2 +- src/renderers/__tests__/refs-test.js | 19 +- ...ReactARTFiber.js => ReactARTFiberEntry.js} | 2 +- ...MServer.js => ReactDOMServerStackEntry.js} | 6 +- ...Stream.js => ReactDOMServerStreamEntry.js} | 6 +- .../{ReactDOM.js => ReactDOMStackEntry.js} | 6 +- src/renderers/dom/__mocks__/ReactDOM.js | 18 -- src/renderers/dom/__mocks__/ReactDOMServer.js | 18 -- ...ReactDOMFiber.js => ReactDOMFiberEntry.js} | 6 +- .../__tests__/inputValueTracking-test.js | 2 +- .../__tests__/BeforeInputEventPlugin-test.js | 2 +- ...actTestUtils.js => ReactTestUtilsEntry.js} | 4 +- src/renderers/native/ReactNative.js | 18 -- .../native/ReactNativeFeatureFlags.js | 4 +- ...ativeFiber.js => ReactNativeFiberEntry.js} | 13 +- ...ativeStack.js => ReactNativeStackEntry.js} | 8 +- src/renderers/native/__mocks__/ReactNative.js | 16 -- src/renderers/native/takeSnapshot.js | 4 +- .../noop/{ReactNoop.js => ReactNoopEntry.js} | 2 +- .../__tests__/ReactDOMFrameScheduling-test.js | 4 +- .../ReactIncrementalErrorHandling-test.js | 2 +- ...nderer.js => ReactShallowRendererEntry.js} | 2 +- src/renderers/testing/ReactTestRenderer.js | 18 -- .../testing/ReactTestRendererFeatureFlags.js | 18 -- ...iber.js => ReactTestRendererFiberEntry.js} | 11 +- .../__tests__/ReactTestRenderer-test.js | 93 ++++---- .../testing/stack/ReactTestEmptyComponent.js | 29 --- src/renderers/testing/stack/ReactTestMount.js | 208 ------------------ .../stack/ReactTestReconcileTransaction.js | 134 ----------- .../testing/stack/ReactTestRendererStack.js | 173 --------------- .../testing/stack/ReactTestTextComponent.js | 38 ---- 64 files changed, 172 insertions(+), 951 deletions(-) create mode 100644 scripts/jest/setupMocks.js rename src/isomorphic/{React.js => ReactEntry.js} (98%) delete mode 100644 src/node_modules/react-dom/lib/ReactDOM.js delete mode 100644 src/node_modules/react-dom/lib/ReactDOMServer.js delete mode 100644 src/node_modules/react-dom/lib/ReactInstanceMap.js delete mode 100644 src/node_modules/react-dom/lib/ReactPerf.js delete mode 100644 src/node_modules/react-dom/lib/ReactTestUtils.js delete mode 100644 src/node_modules/react-dom/lib/getVendorPrefixedEventName.js delete mode 100644 src/node_modules/react/lib/ReactComponentTreeHook.js delete mode 100644 src/node_modules/react/lib/ReactCurrentOwner.js delete mode 100644 src/node_modules/react/lib/ReactDebugCurrentFrame.js rename src/renderers/art/{ReactARTFiber.js => ReactARTFiberEntry.js} (99%) rename src/renderers/dom/{ReactDOMServer.js => ReactDOMServerStackEntry.js} (92%) rename src/renderers/dom/{ReactDOMServerStream.js => ReactDOMServerStreamEntry.js} (85%) rename src/renderers/dom/{ReactDOM.js => ReactDOMStackEntry.js} (98%) delete mode 100644 src/renderers/dom/__mocks__/ReactDOM.js delete mode 100644 src/renderers/dom/__mocks__/ReactDOMServer.js rename src/renderers/dom/fiber/{ReactDOMFiber.js => ReactDOMFiberEntry.js} (99%) rename src/renderers/dom/test/{ReactTestUtils.js => ReactTestUtilsEntry.js} (99%) delete mode 100644 src/renderers/native/ReactNative.js rename src/renderers/native/{ReactNativeFiber.js => ReactNativeFiberEntry.js} (92%) rename src/renderers/native/{ReactNativeStack.js => ReactNativeStackEntry.js} (94%) delete mode 100644 src/renderers/native/__mocks__/ReactNative.js rename src/renderers/noop/{ReactNoop.js => ReactNoopEntry.js} (99%) rename src/renderers/testing/{ReactShallowRenderer.js => ReactShallowRendererEntry.js} (99%) delete mode 100644 src/renderers/testing/ReactTestRenderer.js delete mode 100644 src/renderers/testing/ReactTestRendererFeatureFlags.js rename src/renderers/testing/{ReactTestRendererFiber.js => ReactTestRendererFiberEntry.js} (97%) delete mode 100644 src/renderers/testing/stack/ReactTestEmptyComponent.js delete mode 100644 src/renderers/testing/stack/ReactTestMount.js delete mode 100644 src/renderers/testing/stack/ReactTestReconcileTransaction.js delete mode 100644 src/renderers/testing/stack/ReactTestRendererStack.js delete mode 100644 src/renderers/testing/stack/ReactTestTextComponent.js diff --git a/mocks/ReactElementTestChild.js b/mocks/ReactElementTestChild.js index 2e9d076933..2e0d5e7e1c 100644 --- a/mocks/ReactElementTestChild.js +++ b/mocks/ReactElementTestChild.js @@ -11,7 +11,7 @@ 'use strict'; -var React = require('React'); +var React = require('ReactEntry'); class Child extends React.Component { render() { diff --git a/mocks/ReactMockedComponentTestComponent.js b/mocks/ReactMockedComponentTestComponent.js index 285265df14..6e16ca091f 100644 --- a/mocks/ReactMockedComponentTestComponent.js +++ b/mocks/ReactMockedComponentTestComponent.js @@ -11,7 +11,7 @@ 'use strict'; -var React = require('React'); +var React = require('ReactEntry'); class ReactMockedComponentTestComponent extends React.Component { state = {foo: 'bar'}; diff --git a/scripts/fiber/record-tests b/scripts/fiber/record-tests index 99257e92f1..9066832fd0 100755 --- a/scripts/fiber/record-tests +++ b/scripts/fiber/record-tests @@ -122,7 +122,7 @@ function formatResults(runResults, predicate) { } function recordTests(maxWorkers, trackFacts) { - process.env.REACT_DOM_JEST_USE_FIBER = true; + process.env.REACT_JEST_USE_FIBER = true; runJest(maxWorkers) .then((runResults) => { const passing = formatResults( diff --git a/scripts/jest/setupMocks.js b/scripts/jest/setupMocks.js new file mode 100644 index 0000000000..c4743804b7 --- /dev/null +++ b/scripts/jest/setupMocks.js @@ -0,0 +1,26 @@ +'use strict'; + +// We want to globally mock this but jest doesn't let us do that by default +// for a file that already exists. So we have to explicitly mock it. +jest.mock('ReactDOMFeatureFlags', () => { + const flags = require.requireActual('ReactDOMFeatureFlags'); + return Object.assign({}, flags, { + useFiber: !!process.env.REACT_JEST_USE_FIBER, + }); +}); +jest.mock('ReactFeatureFlags', () => { + const flags = require.requireActual('ReactFeatureFlags'); + return Object.assign({}, flags, { + disableNewFiberFeatures: true, + }); +}); +jest.mock('ReactNativeFeatureFlags', () => { + const flags = require.requireActual('ReactNativeFeatureFlags'); + return Object.assign({}, flags, { + useFiber: !!process.env.REACT_JEST_USE_FIBER, + }); +}); + +// Error logging varies between Fiber and Stack; +// Rather than fork dozens of tests, mock the error-logging file by default. +jest.mock('ReactFiberErrorLogger'); diff --git a/scripts/jest/setupSpecEquivalenceReporter.js b/scripts/jest/setupSpecEquivalenceReporter.js index f432e3150d..9fa132d2a8 100644 --- a/scripts/jest/setupSpecEquivalenceReporter.js +++ b/scripts/jest/setupSpecEquivalenceReporter.js @@ -9,6 +9,8 @@ 'use strict'; +require('./setupMocks'); + var expect = global.expect; var numExpectations = 0; diff --git a/scripts/jest/test-framework-setup.js b/scripts/jest/test-framework-setup.js index 59f2f3c69e..3eb26a2dc2 100644 --- a/scripts/jest/test-framework-setup.js +++ b/scripts/jest/test-framework-setup.js @@ -1,38 +1,6 @@ 'use strict'; -// We want to globally mock this but jest doesn't let us do that by default -// for a file that already exists. So we have to explicitly mock it. -jest.mock('ReactDOM'); -jest.mock('ReactDOMServer'); -jest.mock('ReactNative'); -jest.mock('ReactDOMFeatureFlags', () => { - const flags = require.requireActual('ReactDOMFeatureFlags'); - return Object.assign({}, flags, { - useFiber: false || !!process.env.REACT_DOM_JEST_USE_FIBER, - }); -}); -jest.mock('ReactFeatureFlags', () => { - const flags = require.requireActual('ReactFeatureFlags'); - return Object.assign({}, flags, { - disableNewFiberFeatures: true, - }); -}); -jest.mock('ReactNativeFeatureFlags', () => { - const flags = require.requireActual('ReactNativeFeatureFlags'); - return Object.assign({}, flags, { - useFiber: flags.useFiber || !!process.env.REACT_DOM_JEST_USE_FIBER, - }); -}); -jest.mock('ReactTestRendererFeatureFlags', () => { - const flags = require.requireActual('ReactTestRendererFeatureFlags'); - return Object.assign({}, flags, { - useFiber: flags.useFiber || !!process.env.REACT_DOM_JEST_USE_FIBER, - }); -}); - -// Error logging varies between Fiber and Stack; -// Rather than fork dozens of tests, mock the error-logging file by default. -jest.mock('ReactFiberErrorLogger'); +require('./setupMocks'); var env = jasmine.getEnv(); diff --git a/scripts/rollup/build.js b/scripts/rollup/build.js index fcc2659fd0..6847a16d4a 100644 --- a/scripts/rollup/build.js +++ b/scripts/rollup/build.js @@ -145,12 +145,6 @@ function updateBundleConfig(config, filename, format, bundleType, hasteName) { }); } -function setReactNativeUseFiberEnvVariable(useFiber) { - return { - 'process.env.REACT_NATIVE_USE_FIBER': useFiber, - }; -} - function stripEnvVariables(production) { return { __DEV__: production ? 'false' : 'true', @@ -338,7 +332,6 @@ function getPlugins( case RN_PROD: plugins.push( replace(stripEnvVariables(bundleType === RN_PROD)), - replace(setReactNativeUseFiberEnvVariable(useFiber)), // needs to happen after strip env commonjs(getCommonJsConfig(bundleType)), uglify( diff --git a/scripts/rollup/bundles.js b/scripts/rollup/bundles.js index c2bd6b6c79..e52b0f52fd 100644 --- a/scripts/rollup/bundles.js +++ b/scripts/rollup/bundles.js @@ -43,13 +43,13 @@ const bundles = [ moduleName: 'React', sourceMap: false, }, - entry: 'src/isomorphic/React.js', + entry: 'src/isomorphic/ReactEntry', externals: [ 'create-react-class/factory', 'prop-types', 'prop-types/checkPropTypes', ], - fbEntry: 'src/fb/ReactFBEntry.js', + fbEntry: 'src/fb/ReactFBEntry', hasteName: 'React', isRenderer: false, label: 'core', @@ -75,9 +75,9 @@ const bundles = [ moduleName: 'ReactDOM', sourceMap: false, }, - entry: 'src/renderers/dom/fiber/ReactDOMFiber.js', + entry: 'src/renderers/dom/fiber/ReactDOMFiberEntry', externals: ['prop-types', 'prop-types/checkPropTypes'], - fbEntry: 'src/fb/ReactDOMFiberFBEntry.js', + fbEntry: 'src/fb/ReactDOMFiberFBEntry', hasteName: 'ReactDOMFiber', isRenderer: true, label: 'dom-fiber', @@ -102,7 +102,7 @@ const bundles = [ moduleName: 'ReactTestUtils', sourceMap: false, }, - entry: 'src/renderers/dom/test/ReactTestUtils', + entry: 'src/renderers/dom/test/ReactTestUtilsEntry', externals: [ 'prop-types', 'prop-types/checkPropTypes', @@ -110,7 +110,7 @@ const bundles = [ 'react-dom', 'react-test-renderer', // TODO (bvaughn) Remove this dependency before 16.0.0 ], - fbEntry: 'src/renderers/dom/test/ReactTestUtils', + fbEntry: 'src/renderers/dom/test/ReactTestUtilsEntry', hasteName: 'ReactTestUtils', isRenderer: true, label: 'test-utils', @@ -138,9 +138,9 @@ const bundles = [ moduleName: 'ReactDOMServer', sourceMap: false, }, - entry: 'src/renderers/dom/ReactDOMServerStream.js', + entry: 'src/renderers/dom/ReactDOMServerStreamEntry', externals: ['prop-types', 'prop-types/checkPropTypes'], - fbEntry: 'src/renderers/dom/ReactDOMServerStream.js', + fbEntry: 'src/renderers/dom/ReactDOMServerStreamEntry', hasteName: 'ReactDOMServerStream', isRenderer: true, label: 'dom-server-stream', @@ -168,7 +168,7 @@ const bundles = [ moduleName: 'ReactART', sourceMap: false, }, - entry: 'src/renderers/art/ReactARTFiber.js', + entry: 'src/renderers/art/ReactARTFiberEntry', externals: [ 'art/modes/current', 'art/modes/fast-noSideEffects', @@ -176,7 +176,7 @@ const bundles = [ 'prop-types/checkPropTypes', 'react-dom', ], - fbEntry: 'src/renderers/art/ReactARTFiber.js', + fbEntry: 'src/renderers/art/ReactARTFiberEntry', hasteName: 'ReactARTFiber', isRenderer: true, label: 'art-fiber', @@ -200,7 +200,7 @@ const bundles = [ moduleName: 'ReactNativeStack', sourceMap: false, }, - entry: 'src/renderers/native/ReactNativeStack.js', + entry: 'src/renderers/native/ReactNativeStackEntry', externals: [ 'ExceptionsManager', 'InitializeCore', @@ -242,7 +242,7 @@ const bundles = [ moduleName: 'ReactNativeFiber', sourceMap: false, }, - entry: 'src/renderers/native/ReactNativeFiber.js', + entry: 'src/renderers/native/ReactNativeFiberEntry', externals: [ 'ExceptionsManager', 'InitializeCore', @@ -285,9 +285,9 @@ const bundles = [ moduleName: 'ReactTestRenderer', sourceMap: false, }, - entry: 'src/renderers/testing/ReactTestRendererFiber', + entry: 'src/renderers/testing/ReactTestRendererFiberEntry', externals: ['prop-types/checkPropTypes'], - fbEntry: 'src/renderers/testing/ReactTestRendererFiber', + fbEntry: 'src/renderers/testing/ReactTestRendererFiberEntry', hasteName: 'ReactTestRendererFiber', isRenderer: true, label: 'test-fiber', @@ -310,13 +310,13 @@ const bundles = [ moduleName: 'ReactShallowRenderer', sourceMap: false, }, - entry: 'src/renderers/testing/ReactShallowRenderer', + entry: 'src/renderers/testing/ReactShallowRendererEntry', externals: [ 'react-dom', 'prop-types/checkPropTypes', 'react-test-renderer', ], - fbEntry: 'src/renderers/testing/ReactShallowRenderer', + fbEntry: 'src/renderers/testing/ReactShallowRendererEntry', hasteName: 'ReactShallowRenderer', isRenderer: true, label: 'shallow-renderer', @@ -337,7 +337,7 @@ const bundles = [ moduleName: 'ReactNoop', sourceMap: false, }, - entry: 'src/renderers/noop/ReactNoop.js', + entry: 'src/renderers/noop/ReactNoopEntry', externals: ['prop-types/checkPropTypes'], isRenderer: true, label: 'noop-fiber', diff --git a/scripts/rollup/modules.js b/scripts/rollup/modules.js index bc6467ff9f..cdc0e32b4d 100644 --- a/scripts/rollup/modules.js +++ b/scripts/rollup/modules.js @@ -130,6 +130,8 @@ function ignoreReactNativeModules() { // This imports NativeMethodsMixin, causing // a circular dependency. 'View', + // We have a shim for this file. + 'ReactNativeFeatureFlags', ]; } diff --git a/src/fb/ReactDOMFiberFBEntry.js b/src/fb/ReactDOMFiberFBEntry.js index f2c00ed5c4..bd358c631b 100644 --- a/src/fb/ReactDOMFiberFBEntry.js +++ b/src/fb/ReactDOMFiberFBEntry.js @@ -9,7 +9,7 @@ 'use strict'; -var ReactDOMFiber = require('ReactDOMFiber'); +var ReactDOMFiber = require('ReactDOMFiberEntry'); Object.assign( ReactDOMFiber.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED, diff --git a/src/fb/ReactFBEntry.js b/src/fb/ReactFBEntry.js index ac3fe41e62..d583f3ad36 100644 --- a/src/fb/ReactFBEntry.js +++ b/src/fb/ReactFBEntry.js @@ -9,7 +9,7 @@ 'use strict'; -var React = require('React'); +var React = require('ReactEntry'); // Add existing internal dependencies from www codebase. // The goal is to get rid of these with time or turn them into public APIs. diff --git a/src/isomorphic/React.js b/src/isomorphic/ReactEntry.js similarity index 98% rename from src/isomorphic/React.js rename to src/isomorphic/ReactEntry.js index 49d1ae2b08..2a89505003 100644 --- a/src/isomorphic/React.js +++ b/src/isomorphic/ReactEntry.js @@ -6,7 +6,7 @@ * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * @providesModule React + * @providesModule ReactEntry */ 'use strict'; diff --git a/src/isomorphic/classic/element/__tests__/ReactElement-test.js b/src/isomorphic/classic/element/__tests__/ReactElement-test.js index 1abcfb31a0..e0f0047c47 100644 --- a/src/isomorphic/classic/element/__tests__/ReactElement-test.js +++ b/src/isomorphic/classic/element/__tests__/ReactElement-test.js @@ -481,7 +481,7 @@ describe('comparing jsx vs .createFactory() vs .createElement()', () => { jest.resetModules(); React = require('react'); ReactDOM = require('react-dom'); - ReactTestUtils = require('ReactTestUtils'); + ReactTestUtils = require('react-dom/test-utils'); Child = jest.genMockFromModule('ReactElementTestChild'); }); diff --git a/src/node_modules/react-art/index.js b/src/node_modules/react-art/index.js index 0904d9c420..d823916f06 100644 --- a/src/node_modules/react-art/index.js +++ b/src/node_modules/react-art/index.js @@ -6,4 +6,4 @@ 'use strict'; -module.exports = require('ReactARTFiber'); +module.exports = require('ReactARTFiberEntry'); diff --git a/src/node_modules/react-dom/index.js b/src/node_modules/react-dom/index.js index 2cee4e3abe..9e3e32c735 100644 --- a/src/node_modules/react-dom/index.js +++ b/src/node_modules/react-dom/index.js @@ -6,4 +6,9 @@ 'use strict'; -module.exports = require('ReactDOM'); +var ReactDOMFeatureFlags = require('ReactDOMFeatureFlags'); +var useFiber = ReactDOMFeatureFlags.useFiber; + +module.exports = useFiber + ? require('ReactDOMFiberEntry') + : require('ReactDOMStackEntry'); diff --git a/src/node_modules/react-dom/lib/ReactDOM.js b/src/node_modules/react-dom/lib/ReactDOM.js deleted file mode 100644 index 2cee4e3abe..0000000000 --- a/src/node_modules/react-dom/lib/ReactDOM.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright 2016-present Facebook. All Rights Reserved. - * - * @flow - */ - -'use strict'; - -module.exports = require('ReactDOM'); diff --git a/src/node_modules/react-dom/lib/ReactDOMServer.js b/src/node_modules/react-dom/lib/ReactDOMServer.js deleted file mode 100644 index e02fa01f40..0000000000 --- a/src/node_modules/react-dom/lib/ReactDOMServer.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright 2016-present Facebook. All Rights Reserved. - * - * @flow - */ - -'use strict'; - -module.exports = require('ReactDOMServer'); diff --git a/src/node_modules/react-dom/lib/ReactInstanceMap.js b/src/node_modules/react-dom/lib/ReactInstanceMap.js deleted file mode 100644 index 7e3afdf6cd..0000000000 --- a/src/node_modules/react-dom/lib/ReactInstanceMap.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright 2016-present Facebook. All Rights Reserved. - * - * @flow - */ - -'use strict'; - -module.exports = require('ReactInstanceMap'); diff --git a/src/node_modules/react-dom/lib/ReactPerf.js b/src/node_modules/react-dom/lib/ReactPerf.js deleted file mode 100644 index a0793939a1..0000000000 --- a/src/node_modules/react-dom/lib/ReactPerf.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright 2016-present Facebook. All Rights Reserved. - * - * @flow - */ - -'use strict'; - -module.exports = require('ReactPerf'); diff --git a/src/node_modules/react-dom/lib/ReactTestUtils.js b/src/node_modules/react-dom/lib/ReactTestUtils.js deleted file mode 100644 index ef0d67875e..0000000000 --- a/src/node_modules/react-dom/lib/ReactTestUtils.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright 2016-present Facebook. All Rights Reserved. - * - * @flow - */ - -'use strict'; - -module.exports = require('ReactTestUtils'); diff --git a/src/node_modules/react-dom/lib/getVendorPrefixedEventName.js b/src/node_modules/react-dom/lib/getVendorPrefixedEventName.js deleted file mode 100644 index 68c931aa49..0000000000 --- a/src/node_modules/react-dom/lib/getVendorPrefixedEventName.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright 2016-present Facebook. All Rights Reserved. - * - * @flow - */ - -'use strict'; - -module.exports = require('getVendorPrefixedEventName'); diff --git a/src/node_modules/react-dom/server.js b/src/node_modules/react-dom/server.js index e02fa01f40..d2f03c0b29 100644 --- a/src/node_modules/react-dom/server.js +++ b/src/node_modules/react-dom/server.js @@ -6,4 +6,9 @@ 'use strict'; -module.exports = require('ReactDOMServer'); +var ReactDOMFeatureFlags = require('ReactDOMFeatureFlags'); +var useFiber = ReactDOMFeatureFlags.useFiber; + +module.exports = useFiber + ? require('ReactDOMServerStreamEntry') + : require('ReactDOMServerStackEntry'); diff --git a/src/node_modules/react-dom/test-utils.js b/src/node_modules/react-dom/test-utils.js index ef0d67875e..e7672851c1 100644 --- a/src/node_modules/react-dom/test-utils.js +++ b/src/node_modules/react-dom/test-utils.js @@ -6,4 +6,4 @@ 'use strict'; -module.exports = require('ReactTestUtils'); +module.exports = require('ReactTestUtilsEntry'); diff --git a/src/node_modules/react-native/index.js b/src/node_modules/react-native/index.js index 7897e25151..8406536142 100644 --- a/src/node_modules/react-native/index.js +++ b/src/node_modules/react-native/index.js @@ -6,4 +6,9 @@ 'use strict'; -module.exports = require('ReactNative'); +var ReactNativeFeatureFlags = require('ReactNativeFeatureFlags'); +var useFiber = ReactNativeFeatureFlags.useFiber; + +module.exports = useFiber + ? require('ReactNativeFiberEntry') + : require('ReactNativeStackEntry'); diff --git a/src/node_modules/react-noop-renderer/index.js b/src/node_modules/react-noop-renderer/index.js index c690bc1d2a..a559141f65 100644 --- a/src/node_modules/react-noop-renderer/index.js +++ b/src/node_modules/react-noop-renderer/index.js @@ -6,4 +6,4 @@ 'use strict'; -module.exports = require('ReactNoop'); +module.exports = require('ReactNoopEntry'); diff --git a/src/node_modules/react-test-renderer/index.js b/src/node_modules/react-test-renderer/index.js index a11b1836c7..7694e83eee 100644 --- a/src/node_modules/react-test-renderer/index.js +++ b/src/node_modules/react-test-renderer/index.js @@ -6,4 +6,4 @@ 'use strict'; -module.exports = require('ReactTestRenderer'); +module.exports = require('ReactTestRendererFiberEntry'); diff --git a/src/node_modules/react-test-renderer/shallow.js b/src/node_modules/react-test-renderer/shallow.js index 9522341660..482ec75ad5 100644 --- a/src/node_modules/react-test-renderer/shallow.js +++ b/src/node_modules/react-test-renderer/shallow.js @@ -6,4 +6,4 @@ 'use strict'; -module.exports = require('ReactShallowRenderer'); +module.exports = require('ReactShallowRendererEntry'); diff --git a/src/node_modules/react/index.js b/src/node_modules/react/index.js index 3566a38179..e8e3170ada 100644 --- a/src/node_modules/react/index.js +++ b/src/node_modules/react/index.js @@ -6,4 +6,4 @@ 'use strict'; -module.exports = require('React'); +module.exports = require('ReactEntry'); diff --git a/src/node_modules/react/lib/ReactComponentTreeHook.js b/src/node_modules/react/lib/ReactComponentTreeHook.js deleted file mode 100644 index fe857e7bae..0000000000 --- a/src/node_modules/react/lib/ReactComponentTreeHook.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright 2016-present Facebook. All Rights Reserved. - * - * @flow - */ - -'use strict'; - -module.exports = require('ReactComponentTreeHook'); diff --git a/src/node_modules/react/lib/ReactCurrentOwner.js b/src/node_modules/react/lib/ReactCurrentOwner.js deleted file mode 100644 index 54ae79f8db..0000000000 --- a/src/node_modules/react/lib/ReactCurrentOwner.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright 2016-present Facebook. All Rights Reserved. - * - * @flow - */ - -'use strict'; - -module.exports = require('ReactCurrentOwner'); diff --git a/src/node_modules/react/lib/ReactDebugCurrentFrame.js b/src/node_modules/react/lib/ReactDebugCurrentFrame.js deleted file mode 100644 index 79df089683..0000000000 --- a/src/node_modules/react/lib/ReactDebugCurrentFrame.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright 2016-present Facebook. All Rights Reserved. - * - * @flow - */ - -'use strict'; - -module.exports = require('ReactDebugCurrentFrame'); diff --git a/src/renderers/__tests__/ReactComponentTreeHook-test.native.js b/src/renderers/__tests__/ReactComponentTreeHook-test.native.js index 7095d0df60..b31ada8ff6 100644 --- a/src/renderers/__tests__/ReactComponentTreeHook-test.native.js +++ b/src/renderers/__tests__/ReactComponentTreeHook-test.native.js @@ -36,7 +36,7 @@ describeStack('ReactComponentTreeHook', () => { PropTypes = require('prop-types'); React = require('react'); - ReactNative = require('ReactNative'); + ReactNative = require('react-native'); ReactInstanceMap = require('ReactInstanceMap'); ReactComponentTreeHook = require('ReactComponentTreeHook'); ReactComponentTreeTestUtils = require('ReactComponentTreeTestUtils'); diff --git a/src/renderers/__tests__/ReactPerf-test.js b/src/renderers/__tests__/ReactPerf-test.js index 9ba784a32f..40d76b8120 100644 --- a/src/renderers/__tests__/ReactPerf-test.js +++ b/src/renderers/__tests__/ReactPerf-test.js @@ -42,7 +42,7 @@ describeStack('ReactPerf', () => { React = require('react'); ReactDOM = require('react-dom'); ReactPerf = require('ReactPerf'); - ReactTestUtils = require('ReactTestUtils'); + ReactTestUtils = require('react-dom/test-utils'); emptyFunction = require('fbjs/lib/emptyFunction'); App = class extends React.Component { diff --git a/src/renderers/__tests__/ReactStatelessComponent-test.js b/src/renderers/__tests__/ReactStatelessComponent-test.js index 0792eded59..f3eafc118e 100644 --- a/src/renderers/__tests__/ReactStatelessComponent-test.js +++ b/src/renderers/__tests__/ReactStatelessComponent-test.js @@ -32,7 +32,7 @@ describe('ReactStatelessComponent', () => { PropTypes = require('prop-types'); React = require('react'); ReactDOM = require('react-dom'); - ReactTestUtils = require('ReactTestUtils'); + ReactTestUtils = require('react-dom/test-utils'); }); it('should render stateless component', () => { diff --git a/src/renderers/__tests__/refs-test.js b/src/renderers/__tests__/refs-test.js index c7f3f8ce7b..ccdfd418a9 100644 --- a/src/renderers/__tests__/refs-test.js +++ b/src/renderers/__tests__/refs-test.js @@ -115,7 +115,7 @@ describe('reactiverefs', () => { beforeEach(() => { jest.resetModules(); React = require('react'); - ReactTestUtils = require('ReactTestUtils'); + ReactTestUtils = require('react-dom/test-utils'); }); /** @@ -171,7 +171,7 @@ describe('ref swapping', () => { beforeEach(() => { jest.resetModules(); React = require('react'); - ReactTestUtils = require('ReactTestUtils'); + ReactTestUtils = require('react-dom/test-utils'); RefHopsAround = class extends React.Component { state = {count: 0}; @@ -312,14 +312,15 @@ describe('string refs between fiber and stack', () => { beforeEach(() => { jest.resetModules(); React = require('react'); - ReactTestUtils = require('ReactTestUtils'); + ReactTestUtils = require('react-dom/test-utils'); }); it('attaches, detaches from fiber component with stack layer', () => { spyOn(console, 'error'); const ReactCurrentOwner = require('ReactCurrentOwner'); - const ReactDOM = require('react-dom'); - const ReactDOMFiber = require('ReactDOMFiber'); + + const ReactDOMStack = require('ReactDOMStackEntry'); + const ReactDOMFiber = require('ReactDOMFiberEntry'); const ReactInstanceMap = require('ReactInstanceMap'); let layerMounted = false; class A extends React.Component { @@ -332,7 +333,7 @@ describe('string refs between fiber and stack', () => { const span = ; ReactCurrentOwner.current = null; - ReactDOM.unstable_renderSubtreeIntoContainer( + ReactDOMStack.unstable_renderSubtreeIntoContainer( this, span, (this._container = document.createElement('div')), @@ -343,7 +344,7 @@ describe('string refs between fiber and stack', () => { ); } componentWillUnmount() { - ReactDOM.unmountComponentAtNode(this._container); + ReactDOMStack.unmountComponentAtNode(this._container); } } const container = document.createElement('div'); @@ -365,8 +366,8 @@ describe('string refs between fiber and stack', () => { it('attaches, detaches from stack component with fiber layer', () => { spyOn(console, 'error'); const ReactCurrentOwner = require('ReactCurrentOwner'); - const ReactDOM = require('react-dom'); - const ReactDOMFiber = require('ReactDOMFiber'); + const ReactDOM = require('ReactDOMStackEntry'); + const ReactDOMFiber = require('ReactDOMFiberEntry'); const ReactInstanceMap = require('ReactInstanceMap'); let layerMounted = false; class A extends React.Component { diff --git a/src/renderers/art/ReactARTFiber.js b/src/renderers/art/ReactARTFiberEntry.js similarity index 99% rename from src/renderers/art/ReactARTFiber.js rename to src/renderers/art/ReactARTFiberEntry.js index 30380652c1..d28a6293c7 100644 --- a/src/renderers/art/ReactARTFiber.js +++ b/src/renderers/art/ReactARTFiberEntry.js @@ -6,7 +6,7 @@ * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * @providesModule ReactARTFiber + * @providesModule ReactARTFiberEntry */ 'use strict'; diff --git a/src/renderers/dom/ReactDOMServer.js b/src/renderers/dom/ReactDOMServerStackEntry.js similarity index 92% rename from src/renderers/dom/ReactDOMServer.js rename to src/renderers/dom/ReactDOMServerStackEntry.js index 559fbe6bfd..758c6f214c 100644 --- a/src/renderers/dom/ReactDOMServer.js +++ b/src/renderers/dom/ReactDOMServerStackEntry.js @@ -6,7 +6,7 @@ * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * @providesModule ReactDOMServer + * @providesModule ReactDOMServerStackEntry */ 'use strict'; @@ -19,7 +19,7 @@ var ReactVersion = require('ReactVersion'); ReactDOMInjection.inject(); ReactDOMStackInjection.inject(); -var ReactDOMServer = { +var ReactDOMServerStack = { renderToString: ReactServerRendering.renderToString, renderToStaticMarkup: ReactServerRendering.renderToStaticMarkup, version: ReactVersion, @@ -36,4 +36,4 @@ if (__DEV__) { ReactInstrumentation.debugTool.addHook(ReactDOMInvalidARIAHook); } -module.exports = ReactDOMServer; +module.exports = ReactDOMServerStack; diff --git a/src/renderers/dom/ReactDOMServerStream.js b/src/renderers/dom/ReactDOMServerStreamEntry.js similarity index 85% rename from src/renderers/dom/ReactDOMServerStream.js rename to src/renderers/dom/ReactDOMServerStreamEntry.js index c4c3abedf4..d78d5938f3 100644 --- a/src/renderers/dom/ReactDOMServerStream.js +++ b/src/renderers/dom/ReactDOMServerStreamEntry.js @@ -6,7 +6,7 @@ * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * @providesModule ReactDOMServerStream + * @providesModule ReactDOMServerStreamEntry */ 'use strict'; @@ -17,10 +17,10 @@ var ReactVersion = require('ReactVersion'); ReactDOMInjection.inject(); -var ReactDOMServer = { +var ReactDOMServerStream = { renderToString: ReactServerRenderer.renderToString, renderToStaticMarkup: ReactServerRenderer.renderToStaticMarkup, version: ReactVersion, }; -module.exports = ReactDOMServer; +module.exports = ReactDOMServerStream; diff --git a/src/renderers/dom/ReactDOM.js b/src/renderers/dom/ReactDOMStackEntry.js similarity index 98% rename from src/renderers/dom/ReactDOM.js rename to src/renderers/dom/ReactDOMStackEntry.js index a6cdc8b5ab..a7f76d8ae6 100644 --- a/src/renderers/dom/ReactDOM.js +++ b/src/renderers/dom/ReactDOMStackEntry.js @@ -6,7 +6,7 @@ * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * @providesModule ReactDOM + * @providesModule ReactDOMStackEntry */ /* globals __REACT_DEVTOOLS_GLOBAL_HOOK__*/ @@ -29,7 +29,7 @@ var warning = require('fbjs/lib/warning'); ReactDOMInjection.inject(); ReactDOMStackInjection.inject(); -var ReactDOM = { +var ReactDOMStack = { findDOMNode: findDOMNode, render: ReactMount.render, unmountComponentAtNode: ReactMount.unmountComponentAtNode, @@ -163,4 +163,4 @@ if (__DEV__) { ReactInstrumentation.debugTool.addHook(ReactDOMInvalidARIAHook); } -module.exports = ReactDOM; +module.exports = ReactDOMStack; diff --git a/src/renderers/dom/__mocks__/ReactDOM.js b/src/renderers/dom/__mocks__/ReactDOM.js deleted file mode 100644 index c5965c9ec9..0000000000 --- a/src/renderers/dom/__mocks__/ReactDOM.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ - -'use strict'; - -var ReactDOMFeatureFlags = require('ReactDOMFeatureFlags'); - -var useFiber = ReactDOMFeatureFlags.useFiber; - -module.exports = useFiber - ? require('ReactDOMFiber') - : require.requireActual('ReactDOM'); diff --git a/src/renderers/dom/__mocks__/ReactDOMServer.js b/src/renderers/dom/__mocks__/ReactDOMServer.js deleted file mode 100644 index 7ba363afc5..0000000000 --- a/src/renderers/dom/__mocks__/ReactDOMServer.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ - -'use strict'; - -var ReactDOMFeatureFlags = require('ReactDOMFeatureFlags'); - -var useFiber = ReactDOMFeatureFlags.useFiber; - -module.exports = useFiber - ? require('ReactDOMServerStream') - : require.requireActual('ReactDOMServer'); diff --git a/src/renderers/dom/fiber/ReactDOMFiber.js b/src/renderers/dom/fiber/ReactDOMFiberEntry.js similarity index 99% rename from src/renderers/dom/fiber/ReactDOMFiber.js rename to src/renderers/dom/fiber/ReactDOMFiberEntry.js index 3267591823..d2a48cb020 100644 --- a/src/renderers/dom/fiber/ReactDOMFiber.js +++ b/src/renderers/dom/fiber/ReactDOMFiberEntry.js @@ -6,7 +6,7 @@ * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * @providesModule ReactDOMFiber + * @providesModule ReactDOMFiberEntry * @flow */ @@ -510,7 +510,7 @@ function renderSubtreeIntoContainer( return DOMRenderer.getPublicRootInstance(root); } -var ReactDOM = { +var ReactDOMFiber = { render( element: ReactElement, container: DOMContainer, @@ -639,4 +639,4 @@ if (typeof injectInternals === 'function') { }); } -module.exports = ReactDOM; +module.exports = ReactDOMFiber; diff --git a/src/renderers/dom/shared/__tests__/inputValueTracking-test.js b/src/renderers/dom/shared/__tests__/inputValueTracking-test.js index 2e4bfd1e96..f2bab94f3b 100644 --- a/src/renderers/dom/shared/__tests__/inputValueTracking-test.js +++ b/src/renderers/dom/shared/__tests__/inputValueTracking-test.js @@ -12,7 +12,7 @@ 'use strict'; var React = require('react'); -var ReactTestUtils = require('ReactTestUtils'); +var ReactTestUtils = require('react-dom/test-utils'); // TODO: can we express this test with only public API? var inputValueTracking = require('inputValueTracking'); diff --git a/src/renderers/dom/shared/eventPlugins/__tests__/BeforeInputEventPlugin-test.js b/src/renderers/dom/shared/eventPlugins/__tests__/BeforeInputEventPlugin-test.js index 28785406e7..a2477239e6 100644 --- a/src/renderers/dom/shared/eventPlugins/__tests__/BeforeInputEventPlugin-test.js +++ b/src/renderers/dom/shared/eventPlugins/__tests__/BeforeInputEventPlugin-test.js @@ -12,7 +12,7 @@ 'use strict'; var React = require('react'); -var ReactTestUtils = require('ReactTestUtils'); +var ReactTestUtils = require('react-dom/test-utils'); var EventMapping = { compositionstart: 'topCompositionStart', diff --git a/src/renderers/dom/test/ReactTestUtils.js b/src/renderers/dom/test/ReactTestUtilsEntry.js similarity index 99% rename from src/renderers/dom/test/ReactTestUtils.js rename to src/renderers/dom/test/ReactTestUtilsEntry.js index 787dceec6c..a08eef557c 100644 --- a/src/renderers/dom/test/ReactTestUtils.js +++ b/src/renderers/dom/test/ReactTestUtilsEntry.js @@ -6,7 +6,7 @@ * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * @providesModule ReactTestUtils + * @providesModule ReactTestUtilsEntry */ 'use strict'; @@ -16,7 +16,7 @@ var React = require('react'); var ReactDOM = require('react-dom'); var ReactFiberTreeReflection = require('ReactFiberTreeReflection'); var ReactInstanceMap = require('ReactInstanceMap'); -var ReactShallowRenderer = require('ReactShallowRenderer'); // TODO (bvaughn) Remove this import before 16.0.0 +var ReactShallowRenderer = require('ReactShallowRendererEntry'); // TODO (bvaughn) Remove this import before 16.0.0 var ReactTypeOfWork = require('ReactTypeOfWork'); var SyntheticEvent = require('SyntheticEvent'); diff --git a/src/renderers/native/ReactNative.js b/src/renderers/native/ReactNative.js deleted file mode 100644 index 82b12de9a1..0000000000 --- a/src/renderers/native/ReactNative.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Copyright (c) 2015-present, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule ReactNative - * @flow - */ -'use strict'; - -const ReactNativeFeatureFlags = require('ReactNativeFeatureFlags'); - -module.exports = ReactNativeFeatureFlags.useFiber - ? require('ReactNativeFiber') - : require('ReactNativeStack'); diff --git a/src/renderers/native/ReactNativeFeatureFlags.js b/src/renderers/native/ReactNativeFeatureFlags.js index 4c48e7f6f1..8668bc0ad1 100644 --- a/src/renderers/native/ReactNativeFeatureFlags.js +++ b/src/renderers/native/ReactNativeFeatureFlags.js @@ -12,10 +12,8 @@ 'use strict'; -// Read from process.env in order to support Rollup flat bundles. -// Jest test script will also write this value for Fiber tests. var ReactNativeFeatureFlags = { - useFiber: process.env.REACT_NATIVE_USE_FIBER, + useFiber: true, }; module.exports = ReactNativeFeatureFlags; diff --git a/src/renderers/native/ReactNativeFiber.js b/src/renderers/native/ReactNativeFiberEntry.js similarity index 92% rename from src/renderers/native/ReactNativeFiber.js rename to src/renderers/native/ReactNativeFiberEntry.js index 4ca7626307..2c226e5f43 100644 --- a/src/renderers/native/ReactNativeFiber.js +++ b/src/renderers/native/ReactNativeFiberEntry.js @@ -6,7 +6,7 @@ * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * @providesModule ReactNativeFiber + * @providesModule ReactNativeFiberEntry * @flow */ @@ -27,7 +27,6 @@ const findNumericNodeHandle = require('findNumericNodeHandleFiber'); const {injectInternals} = require('ReactFiberDevToolsHook'); -import type {Element} from 'React'; import type {ReactNativeType} from 'ReactNativeTypes'; import type {ReactNodeList} from 'ReactTypes'; @@ -45,12 +44,12 @@ ReactFiberErrorLogger.injection.injectDialog( ReactNativeFiberErrorDialog.showDialog, ); -const ReactNative: ReactNativeType = { +const ReactNativeFiber: ReactNativeType = { NativeComponent: require('ReactNativeComponent'), findNodeHandle: findNumericNodeHandle, - render(element: Element, containerTag: any, callback: ?Function) { + render(element: ReactElement, containerTag: any, callback: ?Function) { let root = roots.get(containerTag); if (!root) { @@ -75,7 +74,7 @@ const ReactNative: ReactNativeType = { }, unmountComponentAtNodeAndRemoveContainer(containerTag: number) { - ReactNative.unmountComponentAtNode(containerTag); + ReactNativeFiber.unmountComponentAtNode(containerTag); // Call back into native to remove all of the subviews from this container UIManager.removeRootView(containerTag); @@ -108,7 +107,7 @@ const ReactNative: ReactNativeType = { if (__DEV__) { // $FlowFixMe Object.assign( - ReactNative.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED, + ReactNativeFiber.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED, { ReactDebugTool: require('ReactDebugTool'), // RCTRenderingPerf, Systrace ReactPerf: require('ReactPerf'), // ReactPerfStallHandler, RCTRenderingPerf @@ -127,4 +126,4 @@ if (typeof injectInternals === 'function') { }); } -module.exports = ReactNative; +module.exports = ReactNativeFiber; diff --git a/src/renderers/native/ReactNativeStack.js b/src/renderers/native/ReactNativeStackEntry.js similarity index 94% rename from src/renderers/native/ReactNativeStack.js rename to src/renderers/native/ReactNativeStackEntry.js index bf87addc40..f9a81d41c5 100644 --- a/src/renderers/native/ReactNativeStack.js +++ b/src/renderers/native/ReactNativeStackEntry.js @@ -6,7 +6,7 @@ * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * @providesModule ReactNativeStack + * @providesModule ReactNativeStackEntry * @flow */ 'use strict'; @@ -33,7 +33,7 @@ var render = function( return ReactNativeMount.renderComponent(element, mountInto, callback); }; -var ReactNative: ReactNativeType = { +var ReactNativeStack: ReactNativeType = { NativeComponent: require('ReactNativeComponent'), hasReactNativeInitialized: false, @@ -67,7 +67,7 @@ var ReactNative: ReactNativeType = { if (__DEV__) { // $FlowFixMe Object.assign( - ReactNative.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED, + ReactNativeStack.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED, { ReactDebugTool: require('ReactDebugTool'), // RCTRenderingPerf, Systrace ReactPerf: require('ReactPerf'), // ReactPerfStallHandler, RCTRenderingPerf @@ -105,4 +105,4 @@ if ( }); } -module.exports = ReactNative; +module.exports = ReactNativeStack; diff --git a/src/renderers/native/__mocks__/ReactNative.js b/src/renderers/native/__mocks__/ReactNative.js deleted file mode 100644 index ce5f605038..0000000000 --- a/src/renderers/native/__mocks__/ReactNative.js +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ - -'use strict'; - -const ReactNativeFeatureFlags = require('ReactNativeFeatureFlags'); - -module.exports = ReactNativeFeatureFlags.useFiber - ? require('ReactNativeFiber') - : require('ReactNativeStack'); diff --git a/src/renderers/native/takeSnapshot.js b/src/renderers/native/takeSnapshot.js index 252bc5dc8e..ec4fa6c050 100644 --- a/src/renderers/native/takeSnapshot.js +++ b/src/renderers/native/takeSnapshot.js @@ -14,8 +14,6 @@ const ReactNativeFeatureFlags = require('ReactNativeFeatureFlags'); const UIManager = require('UIManager'); -import type {Element} from 'React'; - const findNumericNodeHandle = ReactNativeFeatureFlags.useFiber ? require('findNumericNodeHandleFiber') : require('findNumericNodeHandleStack'); @@ -38,7 +36,7 @@ const findNumericNodeHandle = ReactNativeFeatureFlags.useFiber * @platform ios */ function takeSnapshot( - view?: 'window' | Element | number, + view?: 'window' | ReactElement | number, options?: { width?: number, height?: number, diff --git a/src/renderers/noop/ReactNoop.js b/src/renderers/noop/ReactNoopEntry.js similarity index 99% rename from src/renderers/noop/ReactNoop.js rename to src/renderers/noop/ReactNoopEntry.js index 2b98dd290e..83bffd5006 100644 --- a/src/renderers/noop/ReactNoop.js +++ b/src/renderers/noop/ReactNoopEntry.js @@ -6,7 +6,7 @@ * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * @providesModule ReactNoop + * @providesModule ReactNoopEntry * @flow */ diff --git a/src/renderers/shared/__tests__/ReactDOMFrameScheduling-test.js b/src/renderers/shared/__tests__/ReactDOMFrameScheduling-test.js index 5a8a532374..f08812005b 100644 --- a/src/renderers/shared/__tests__/ReactDOMFrameScheduling-test.js +++ b/src/renderers/shared/__tests__/ReactDOMFrameScheduling-test.js @@ -21,7 +21,7 @@ describeFiber('ReactDOMFrameScheduling', () => { global.requestAnimationFrame = undefined; jest.resetModules(); expect(() => { - require('ReactDOM'); + require('react-dom'); }).toThrow( 'React depends on requestAnimationFrame. Make sure that you load a ' + 'polyfill in older browsers.', @@ -44,7 +44,7 @@ describeFiber('ReactDOMFrameScheduling', () => { delete global.window; jest.resetModules(); expect(() => { - require('ReactDOM'); + require('react-dom'); }).not.toThrow(); } finally { global.requestAnimationFrame = previousRAF; diff --git a/src/renderers/shared/fiber/__tests__/ReactIncrementalErrorHandling-test.js b/src/renderers/shared/fiber/__tests__/ReactIncrementalErrorHandling-test.js index 3bec2f0f52..48423d3f1c 100644 --- a/src/renderers/shared/fiber/__tests__/ReactIncrementalErrorHandling-test.js +++ b/src/renderers/shared/fiber/__tests__/ReactIncrementalErrorHandling-test.js @@ -959,7 +959,7 @@ describe('ReactIncrementalErrorHandling', () => { jest.unmock('ReactFiberErrorLogger'); } React = require('react'); - ReactNoop = require('ReactNoop'); + ReactNoop = require('react-noop-renderer'); } function normalizeCodeLocInfo(str) { diff --git a/src/renderers/testing/ReactShallowRenderer.js b/src/renderers/testing/ReactShallowRendererEntry.js similarity index 99% rename from src/renderers/testing/ReactShallowRenderer.js rename to src/renderers/testing/ReactShallowRendererEntry.js index d9c5a58095..640b0b253d 100644 --- a/src/renderers/testing/ReactShallowRenderer.js +++ b/src/renderers/testing/ReactShallowRendererEntry.js @@ -6,7 +6,7 @@ * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * @providesModule ReactShallowRenderer + * @providesModule ReactShallowRendererEntry * @preventMunge */ diff --git a/src/renderers/testing/ReactTestRenderer.js b/src/renderers/testing/ReactTestRenderer.js deleted file mode 100644 index 93b4de4733..0000000000 --- a/src/renderers/testing/ReactTestRenderer.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Copyright (c) 2013-present Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule ReactTestRenderer - */ - -'use strict'; - -const ReactTestRendererFeatureFlags = require('ReactTestRendererFeatureFlags'); - -module.exports = ReactTestRendererFeatureFlags.useFiber - ? require('ReactTestRendererFiber') - : require('ReactTestRendererStack'); diff --git a/src/renderers/testing/ReactTestRendererFeatureFlags.js b/src/renderers/testing/ReactTestRendererFeatureFlags.js deleted file mode 100644 index b2a8d273eb..0000000000 --- a/src/renderers/testing/ReactTestRendererFeatureFlags.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Copyright 2013-present, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule ReactTestRendererFeatureFlags - */ - -'use strict'; - -var ReactTestRendererFeatureFlags = { - useFiber: false, -}; - -module.exports = ReactTestRendererFeatureFlags; diff --git a/src/renderers/testing/ReactTestRendererFiber.js b/src/renderers/testing/ReactTestRendererFiberEntry.js similarity index 97% rename from src/renderers/testing/ReactTestRendererFiber.js rename to src/renderers/testing/ReactTestRendererFiberEntry.js index ea4a48e7e5..ee9986ebb5 100644 --- a/src/renderers/testing/ReactTestRendererFiber.js +++ b/src/renderers/testing/ReactTestRendererFiberEntry.js @@ -6,7 +6,7 @@ * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * @providesModule ReactTestRendererFiber + * @providesModule ReactTestRendererFiberEntry * @preventMunge * @flow */ @@ -26,10 +26,13 @@ var { HostRoot, } = ReactTypeOfWork; -import type {TestRendererOptions} from 'ReactTestMount'; import type {Fiber} from 'ReactFiber'; import type {FiberRoot} from 'ReactFiberRoot'; +type TestRendererOptions = { + createNodeMock: (element: ReactElement) => any, +}; + type ReactTestRendererJSON = {| type: string, props: {[propName: string]: any}, @@ -319,7 +322,7 @@ function toTree(node: ?Fiber) { } } -var ReactTestFiberRenderer = { +var ReactTestRendererFiber = { create(element: ReactElement, options: TestRendererOptions) { var createNodeMock = defaultTestOptions.createNodeMock; if (options && typeof options.createNodeMock === 'function') { @@ -381,4 +384,4 @@ var ReactTestFiberRenderer = { /* eslint-enable camelcase */ }; -module.exports = ReactTestFiberRenderer; +module.exports = ReactTestRendererFiber; diff --git a/src/renderers/testing/__tests__/ReactTestRenderer-test.js b/src/renderers/testing/__tests__/ReactTestRenderer-test.js index 81b0ea4c2b..740e353a36 100644 --- a/src/renderers/testing/__tests__/ReactTestRenderer-test.js +++ b/src/renderers/testing/__tests__/ReactTestRenderer-test.js @@ -12,8 +12,7 @@ 'use strict'; var React = require('react'); -var ReactTestRenderer = require('ReactTestRenderer'); -var ReactDOMFeatureFlags = require('ReactDOMFeatureFlags'); +var ReactTestRenderer = require('react-test-renderer'); var prettyFormat = require('pretty-format'); var ReactFeatureFlags; @@ -145,10 +144,7 @@ describe('ReactTestRenderer', () => { expect(renderer.toJSON()).toEqual({ type: 'div', props: {className: 'purple'}, - children: [ - ReactDOMFeatureFlags.useFiber ? '7' : 7, - {type: 'moo', props: {}, children: null}, - ], + children: ['7', {type: 'moo', props: {}, children: null}], }); expect(renders).toBe(6); }); @@ -454,21 +450,12 @@ describe('ReactTestRenderer', () => { props: {}, children: ['Happy Birthday!'], }); - if (ReactDOMFeatureFlags.useFiber) { - expect(log).toEqual([ - 'Boundary render', - 'Angry render', - 'Boundary componentDidMount', - 'Boundary render', - ]); - } else { - expect(log).toEqual([ - 'Boundary render', - 'Angry render', - 'Boundary render', - 'Boundary componentDidMount', - ]); - } + expect(log).toEqual([ + 'Boundary render', + 'Angry render', + 'Boundary componentDidMount', + 'Boundary render', + ]); }); it('can update text nodes', () => { @@ -503,7 +490,7 @@ describe('ReactTestRenderer', () => { renderer.update({42}); expect(renderer.toJSON()).toEqual({ type: 'div', - children: [ReactDOMFeatureFlags.useFiber ? '42' : 42], + children: ['42'], props: {}, }); renderer.update(
); @@ -673,39 +660,37 @@ describe('ReactTestRenderer', () => { ); }); - if (ReactDOMFeatureFlags.useFiber) { - it('can update text nodes when rendered as root', () => { - var renderer = ReactTestRenderer.create(['Hello', 'world']); - expect(renderer.toJSON()).toEqual(['Hello', 'world']); - renderer.update(42); - expect(renderer.toJSON()).toEqual('42'); - renderer.update([42, 'world']); - expect(renderer.toJSON()).toEqual(['42', 'world']); + it('can update text nodes when rendered as root', () => { + var renderer = ReactTestRenderer.create(['Hello', 'world']); + expect(renderer.toJSON()).toEqual(['Hello', 'world']); + renderer.update(42); + expect(renderer.toJSON()).toEqual('42'); + renderer.update([42, 'world']); + expect(renderer.toJSON()).toEqual(['42', 'world']); + }); + + it('can render and update root fragments', () => { + var Component = props => props.children; + + var renderer = ReactTestRenderer.create([ + Hi, + Bye, + ]); + expect(renderer.toJSON()).toEqual(['Hi', 'Bye']); + renderer.update(
); + expect(renderer.toJSON()).toEqual({ + type: 'div', + children: null, + props: {}, }); - - it('can render and update root fragments', () => { - var Component = props => props.children; - - var renderer = ReactTestRenderer.create([ - Hi, - Bye, - ]); - expect(renderer.toJSON()).toEqual(['Hi', 'Bye']); - renderer.update(
); - expect(renderer.toJSON()).toEqual({ + renderer.update([
goodbye
, 'world']); + expect(renderer.toJSON()).toEqual([ + { type: 'div', - children: null, + children: ['goodbye'], props: {}, - }); - renderer.update([
goodbye
, 'world']); - expect(renderer.toJSON()).toEqual([ - { - type: 'div', - children: ['goodbye'], - props: {}, - }, - 'world', - ]); - }); - } + }, + 'world', + ]); + }); }); diff --git a/src/renderers/testing/stack/ReactTestEmptyComponent.js b/src/renderers/testing/stack/ReactTestEmptyComponent.js deleted file mode 100644 index 37ff674c0c..0000000000 --- a/src/renderers/testing/stack/ReactTestEmptyComponent.js +++ /dev/null @@ -1,29 +0,0 @@ -/** - * Copyright 2013-present, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule ReactTestEmptyComponent - * @preventMunge - * @flow - */ - -'use strict'; - -class ReactTestEmptyComponent { - _currentElement: null; - - constructor() { - this._currentElement = null; - } - receiveComponent(): void {} - toJSON(): void {} - mountComponent(): void {} - getHostNode(): void {} - unmountComponent(): void {} -} - -module.exports = ReactTestEmptyComponent; diff --git a/src/renderers/testing/stack/ReactTestMount.js b/src/renderers/testing/stack/ReactTestMount.js deleted file mode 100644 index 3b57ead3e1..0000000000 --- a/src/renderers/testing/stack/ReactTestMount.js +++ /dev/null @@ -1,208 +0,0 @@ -/** - * Copyright (c) 2015-present, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule ReactTestMount - * @flow - */ -'use strict'; - -var React = require('react'); -var ReactReconciler = require('ReactReconciler'); -var ReactUpdates = require('ReactUpdates'); - -var emptyObject = require('fbjs/lib/emptyObject'); -var getHostComponentFromComposite = require('getHostComponentFromComposite'); -var instantiateReactComponent = require('instantiateReactComponent'); -var invariant = require('fbjs/lib/invariant'); - -export type TestRendererOptions = { - createNodeMock: (element: ReactElement) => any, -}; - -var defaultTestOptions = { - createNodeMock: function() { - return null; - }, -}; - -/** - * Temporary (?) hack so that we can store all top-level pending updates on - * composites instead of having to worry about different types of components - * here. - */ -var TopLevelWrapper = function() {}; -TopLevelWrapper.prototype.isReactComponent = {}; -if (__DEV__) { - TopLevelWrapper.displayName = 'TopLevelWrapper'; -} -TopLevelWrapper.prototype.render = function() { - return this.props.child; -}; -TopLevelWrapper.isReactTopLevelWrapper = true; - -/** - * Mounts this component and inserts it into the DOM. - * - * @param {ReactComponent} componentInstance The instance to mount. - * @param {ReactReconcileTransaction} transaction - * @param {Object} hostParent - * @param {Object} hostContainerInfo - */ -function mountComponentIntoNode( - componentInstance, - transaction, - hostParent, - hostContainerInfo, -) { - var image = ReactReconciler.mountComponent( - componentInstance, - transaction, - null, - hostContainerInfo, - emptyObject, - ); - componentInstance._renderedComponent._topLevelWrapper = componentInstance; - return image; -} - -/** - * Batched mount. - * - * @param {ReactComponent} componentInstance The instance to mount. - * @param {number} rootID ID of the root node. - * @param {number} containerTag container element to mount into. - */ -function batchedMountComponentIntoNode(componentInstance, options) { - var transaction = ReactUpdates.ReactReconcileTransaction.getPooled(true); - var image = transaction.perform( - mountComponentIntoNode, - null, - componentInstance, - transaction, - null, - options, - ); - ReactUpdates.ReactReconcileTransaction.release(transaction); - return image; -} - -var ReactTestInstance = function(component) { - this._component = component; -}; -ReactTestInstance.prototype.getInstance = function() { - return this._component._renderedComponent.getPublicInstance(); -}; -ReactTestInstance.prototype.update = function(nextElement) { - invariant( - this._component, - "ReactTestRenderer: .update() can't be called after unmount.", - ); - var nextWrappedElement = React.createElement(TopLevelWrapper, { - child: nextElement, - }); - var component = this._component; - ReactUpdates.batchedUpdates(function() { - var transaction = ReactUpdates.ReactReconcileTransaction.getPooled(true); - transaction.perform(function() { - ReactReconciler.receiveComponent( - component, - nextWrappedElement, - transaction, - emptyObject, - ); - }); - ReactUpdates.ReactReconcileTransaction.release(transaction); - }); -}; -ReactTestInstance.prototype.unmount = function(nextElement) { - var component = this._component; - ReactUpdates.batchedUpdates(function() { - var transaction = ReactUpdates.ReactReconcileTransaction.getPooled(true); - transaction.perform(function() { - ReactReconciler.unmountComponent( - component, - false /* safely */, - false /* skipLifecycle */, - ); - }); - ReactUpdates.ReactReconcileTransaction.release(transaction); - }); - this._component = null; -}; -ReactTestInstance.prototype.toTree = function() { - return toTree(this._component._renderedComponent); -}; -ReactTestInstance.prototype.toJSON = function() { - var inst = getHostComponentFromComposite(this._component); - if (inst === null) { - return null; - } - return inst.toJSON(); -}; - -function toTree(component) { - var element = component._currentElement; - if (!React.isValidElement(element)) { - return element; - } - if (!component._renderedComponent) { - var rendered = []; - for (var key in component._renderedChildren) { - var inst = component._renderedChildren[key]; - var json = toTree(inst); - if (json !== undefined) { - rendered.push(json); - } - } - - return { - nodeType: 'host', - type: element.type, - props: {...element.props}, - instance: component._nodeMock, - rendered: rendered, - }; - } else { - return { - nodeType: 'component', - type: element.type, - props: {...element.props}, - instance: component._instance, - rendered: toTree(component._renderedComponent), - }; - } -} - -/** - * As soon as `ReactMount` is refactored to not rely on the DOM, we can share - * code between the two. For now, we'll hard code the ID logic. - */ -var ReactTestMount = { - render: function( - nextElement: ReactElement, - options?: TestRendererOptions, - ): ReactTestInstance { - var nextWrappedElement = React.createElement(TopLevelWrapper, { - child: nextElement, - }); - - var instance = instantiateReactComponent(nextWrappedElement, false); - - // The initial render is synchronous but any updates that happen during - // rendering, in componentWillMount or componentDidMount, will be batched - // according to the current batching strategy. - ReactUpdates.batchedUpdates( - batchedMountComponentIntoNode, - instance, - Object.assign({}, defaultTestOptions, options), - ); - return new ReactTestInstance(instance); - }, -}; - -module.exports = ReactTestMount; diff --git a/src/renderers/testing/stack/ReactTestReconcileTransaction.js b/src/renderers/testing/stack/ReactTestReconcileTransaction.js deleted file mode 100644 index 379be398eb..0000000000 --- a/src/renderers/testing/stack/ReactTestReconcileTransaction.js +++ /dev/null @@ -1,134 +0,0 @@ -/** - * Copyright (c) 2015-present, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule ReactTestReconcileTransaction - * @flow - */ -'use strict'; - -var CallbackQueue = require('CallbackQueue'); -var PooledClass = require('PooledClass'); -var Transaction = require('Transaction'); -var ReactUpdateQueue = require('ReactUpdateQueue'); - -import type {TestRendererOptions} from 'ReactTestMount'; - -/** - * Provides a `CallbackQueue` queue for collecting `onDOMReady` callbacks during - * the performing of the transaction. - */ -var ON_DOM_READY_QUEUEING = { - /** - * Initializes the internal `onDOMReady` queue. - */ - initialize: function() { - this.reactMountReady.reset(); - }, - - /** - * After DOM is flushed, invoke all registered `onDOMReady` callbacks. - */ - close: function() { - this.reactMountReady.notifyAll(); - }, -}; - -/** - * Executed within the scope of the `Transaction` instance. Consider these as - * being member methods, but with an implied ordering while being isolated from - * each other. - */ -var TRANSACTION_WRAPPERS = [ON_DOM_READY_QUEUEING]; - -/** - * Currently: - * - The order that these are listed in the transaction is critical: - * - Suppresses events. - * - Restores selection range. - * - * Future: - * - Restore document/overflow scroll positions that were unintentionally - * modified via DOM insertions above the top viewport boundary. - * - Implement/integrate with customized constraint based layout system and keep - * track of which dimensions must be remeasured. - * - * @class ReactTestReconcileTransaction - */ -function ReactTestReconcileTransaction(testOptions: TestRendererOptions) { - this.reinitializeTransaction(); - this.testOptions = testOptions; - this.reactMountReady = CallbackQueue.getPooled(this); -} - -var Mixin = { - /** - * @see Transaction - * @abstract - * @final - * @return {array} List of operation wrap procedures. - * TODO: convert to array - */ - getTransactionWrappers: function() { - return TRANSACTION_WRAPPERS; - }, - - /** - * @return {object} The queue to collect `onDOMReady` callbacks with. - * TODO: convert to ReactMountReady - */ - getReactMountReady: function() { - return this.reactMountReady; - }, - - /** - * @return {object} the options passed to ReactTestRenderer - */ - getTestOptions: function() { - return this.testOptions; - }, - - /** - * @return {object} The queue to collect React async events. - */ - getUpdateQueue: function() { - return ReactUpdateQueue; - }, - - /** - * Save current transaction state -- if the return value from this method is - * passed to `rollback`, the transaction will be reset to that state. - */ - checkpoint: function() { - // reactMountReady is the our only stateful wrapper - return this.reactMountReady.checkpoint(); - }, - - rollback: function(checkpoint) { - this.reactMountReady.rollback(checkpoint); - }, - - /** - * `PooledClass` looks for this, and will invoke this before allowing this - * instance to be reused. - */ - destructor: function() { - CallbackQueue.release(this.reactMountReady); - this.reactMountReady = null; - }, -}; - -Object.assign( - ReactTestReconcileTransaction.prototype, - Transaction, - ReactTestReconcileTransaction, - Mixin, -); - -PooledClass.addPoolingTo(ReactTestReconcileTransaction); - -module.exports = ReactTestReconcileTransaction; diff --git a/src/renderers/testing/stack/ReactTestRendererStack.js b/src/renderers/testing/stack/ReactTestRendererStack.js deleted file mode 100644 index bad8b3589d..0000000000 --- a/src/renderers/testing/stack/ReactTestRendererStack.js +++ /dev/null @@ -1,173 +0,0 @@ -/** - * Copyright 2013-present, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule ReactTestRendererStack - * @preventMunge - * @flow - */ - -'use strict'; - -var ReactComponentEnvironment = require('ReactComponentEnvironment'); -var ReactDefaultBatchingStrategy = require('ReactDefaultBatchingStrategy'); -var ReactEmptyComponent = require('ReactEmptyComponent'); -var ReactMultiChild = require('ReactMultiChild'); -var ReactHostComponent = require('ReactHostComponent'); -var ReactTestMount = require('ReactTestMount'); -var ReactTestReconcileTransaction = require('ReactTestReconcileTransaction'); -var ReactUpdates = require('ReactUpdates'); -var ReactTestTextComponent = require('ReactTestTextComponent'); -var ReactTestEmptyComponent = require('ReactTestEmptyComponent'); -var invariant = require('fbjs/lib/invariant'); - -import type {ReactInstance} from 'ReactInstanceType'; -import type {TestRendererOptions} from 'ReactTestMount'; -import type {ReactText} from 'ReactTypes'; - -type ReactTestRendererJSON = { - type: string, - props: {[propName: string]: any}, - children: null | Array, - $$typeof?: any, -}; - -let injected = false; -function inject() { - if (injected) { - return; - } - - injected = true; - - ReactUpdates.injection.injectReconcileTransaction( - ReactTestReconcileTransaction, - ); - ReactUpdates.injection.injectBatchingStrategy(ReactDefaultBatchingStrategy); - - ReactHostComponent.injection.injectGenericComponentClass(ReactTestComponent); - ReactHostComponent.injection.injectTextComponentClass(ReactTestTextComponent); - ReactEmptyComponent.injection.injectEmptyComponentFactory(function() { - return new ReactTestEmptyComponent(); - }); - - ReactComponentEnvironment.injection.injectEnvironment({ - processChildrenUpdates: function() {}, - replaceNodeWithMarkup: function() {}, - }); -} - -/** - * Drill down (through composites and empty components) until we get a native or - * native text component. - * - * This is pretty polymorphic but unavoidable with the current structure we have - * for `_renderedChildren`. - */ -function getRenderedHostOrTextFromComponent(component) { - var rendered; - while ((rendered = component._renderedComponent)) { - component = rendered; - } - return component; -} - -var UNSET = {}; - -class ReactTestComponent { - _currentElement: ReactElement; - _renderedChildren: null | Object; - _topLevelWrapper: null | ReactInstance; - _hostContainerInfo: null | Object; - _nodeMock: Object; - - constructor(element: ReactElement) { - this._currentElement = element; - this._renderedChildren = null; - this._topLevelWrapper = null; - this._hostContainerInfo = null; - this._nodeMock = UNSET; - } - - mountComponent( - transaction: ReactTestReconcileTransaction, - nativeParent: null | ReactTestComponent, - hostContainerInfo: Object, - context: Object, - ) { - var element = this._currentElement; - this._hostContainerInfo = hostContainerInfo; - this._nodeMock = hostContainerInfo.createNodeMock(element); - // $FlowFixMe https://github.com/facebook/flow/issues/1805 - this.mountChildren(element.props.children, transaction, context); - } - - receiveComponent( - nextElement: ReactElement, - transaction: ReactTestReconcileTransaction, - context: Object, - ) { - this._currentElement = nextElement; - // $FlowFixMe https://github.com/facebook/flow/issues/1805 - this.updateChildren(nextElement.props.children, transaction, context); - } - - getPublicInstance(): Object { - invariant( - this._nodeMock !== UNSET, - 'getPublicInstance should not be called before component is mounted.', - ); - return this._nodeMock; - } - - toJSON(): ReactTestRendererJSON { - // not using `children`, but I don't want to rewrite without destructuring - // eslint-disable-next-line no-unused-vars - var {children, ...props} = this._currentElement.props; - var childrenJSON = []; - for (var key in this._renderedChildren) { - var inst = this._renderedChildren[key]; - inst = getRenderedHostOrTextFromComponent(inst); - var json = inst.toJSON(); - if (json !== undefined) { - childrenJSON.push(json); - } - } - var object: ReactTestRendererJSON = { - type: ((this._currentElement.type: any): string), - props: props, - children: childrenJSON.length ? childrenJSON : null, - }; - Object.defineProperty(object, '$$typeof', { - value: Symbol.for('react.test.json'), - }); - return object; - } - - getHostNode(): void {} - unmountComponent(safely, skipLifecycle): void { - // $FlowFixMe https://github.com/facebook/flow/issues/1805 - this.unmountChildren(safely, skipLifecycle); - } -} - -Object.assign(ReactTestComponent.prototype, ReactMultiChild); - -// ============================================================================= - -var ReactTestRenderer = { - create: (element: ReactElement, options?: TestRendererOptions) => { - inject(); - - return ReactTestMount.render(element, options); - }, - /* eslint-disable camelcase */ - unstable_batchedUpdates: ReactUpdates.batchedUpdates, - /* eslint-enable camelcase */ -}; - -module.exports = ReactTestRenderer; diff --git a/src/renderers/testing/stack/ReactTestTextComponent.js b/src/renderers/testing/stack/ReactTestTextComponent.js deleted file mode 100644 index 5baa7469f3..0000000000 --- a/src/renderers/testing/stack/ReactTestTextComponent.js +++ /dev/null @@ -1,38 +0,0 @@ -/** - * Copyright 2013-present, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule ReactTestTextComponent - * @preventMunge - * @flow - */ - -'use strict'; - -import type {ReactText} from 'ReactTypes'; - -class ReactTestTextComponent { - _currentElement: ReactText; - - constructor(element: ReactText) { - this._currentElement = element; - } - - receiveComponent(nextElement: ReactText) { - this._currentElement = nextElement; - } - - toJSON(): ReactText { - return this._currentElement; - } - - mountComponent(): void {} - getHostNode(): void {} - unmountComponent(): void {} -} - -module.exports = ReactTestTextComponent;