@samitouri / QOS-React / commits / 7dc27d35c1

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.

Dan Abramov committed Jun 14, 2017 at 22:10 UTC 7dc27d35c13fa0f5e0945d6705c1095afcbad867
64 files changed +171 -950
mocks/ReactElementTestChild.js
+1 -1
@@ -11,7 +11,7 @@
11
12 'use strict';
13
14 -var React = require('React');
14 +var React = require('ReactEntry');
15
16 class Child extends React.Component {
17 render() {
mocks/ReactMockedComponentTestComponent.js
+1 -1
@@ -11,7 +11,7 @@
11
12 'use strict';
13
14 -var React = require('React');
14 +var React = require('ReactEntry');
15
16 class ReactMockedComponentTestComponent extends React.Component {
17 state = {foo: 'bar'};
scripts/fiber/record-tests
+1 -1
@@ -122,7 +122,7 @@ function formatResults(runResults, predicate) {
122 }
123
124 function recordTests(maxWorkers, trackFacts) {
125 - process.env.REACT_DOM_JEST_USE_FIBER = true;
125 + process.env.REACT_JEST_USE_FIBER = true;
126 runJest(maxWorkers)
127 .then((runResults) => {
128 const passing = formatResults(
scripts/jest/setupMocks.js new
+26
@@ -0,0 +1,26 @@
1 +'use strict';
2 +
3 +// We want to globally mock this but jest doesn't let us do that by default
4 +// for a file that already exists. So we have to explicitly mock it.
5 +jest.mock('ReactDOMFeatureFlags', () => {
6 + const flags = require.requireActual('ReactDOMFeatureFlags');
7 + return Object.assign({}, flags, {
8 + useFiber: !!process.env.REACT_JEST_USE_FIBER,
9 + });
10 +});
11 +jest.mock('ReactFeatureFlags', () => {
12 + const flags = require.requireActual('ReactFeatureFlags');
13 + return Object.assign({}, flags, {
14 + disableNewFiberFeatures: true,
15 + });
16 +});
17 +jest.mock('ReactNativeFeatureFlags', () => {
18 + const flags = require.requireActual('ReactNativeFeatureFlags');
19 + return Object.assign({}, flags, {
20 + useFiber: !!process.env.REACT_JEST_USE_FIBER,
21 + });
22 +});
23 +
24 +// Error logging varies between Fiber and Stack;
25 +// Rather than fork dozens of tests, mock the error-logging file by default.
26 +jest.mock('ReactFiberErrorLogger');
scripts/jest/setupSpecEquivalenceReporter.js
+2
@@ -9,6 +9,8 @@
9
10 'use strict';
11
12 +require('./setupMocks');
13 +
14 var expect = global.expect;
15
16 var numExpectations = 0;
scripts/jest/test-framework-setup.js
+1 -33
@@ -1,38 +1,6 @@
1 'use strict';
2
3 -// We want to globally mock this but jest doesn't let us do that by default
4 -// for a file that already exists. So we have to explicitly mock it.
5 -jest.mock('ReactDOM');
6 -jest.mock('ReactDOMServer');
7 -jest.mock('ReactNative');
8 -jest.mock('ReactDOMFeatureFlags', () => {
9 - const flags = require.requireActual('ReactDOMFeatureFlags');
10 - return Object.assign({}, flags, {
11 - useFiber: false || !!process.env.REACT_DOM_JEST_USE_FIBER,
12 - });
13 -});
14 -jest.mock('ReactFeatureFlags', () => {
15 - const flags = require.requireActual('ReactFeatureFlags');
16 - return Object.assign({}, flags, {
17 - disableNewFiberFeatures: true,
18 - });
19 -});
20 -jest.mock('ReactNativeFeatureFlags', () => {
21 - const flags = require.requireActual('ReactNativeFeatureFlags');
22 - return Object.assign({}, flags, {
23 - useFiber: flags.useFiber || !!process.env.REACT_DOM_JEST_USE_FIBER,
24 - });
25 -});
26 -jest.mock('ReactTestRendererFeatureFlags', () => {
27 - const flags = require.requireActual('ReactTestRendererFeatureFlags');
28 - return Object.assign({}, flags, {
29 - useFiber: flags.useFiber || !!process.env.REACT_DOM_JEST_USE_FIBER,
30 - });
31 -});
32 -
33 -// Error logging varies between Fiber and Stack;
34 -// Rather than fork dozens of tests, mock the error-logging file by default.
35 -jest.mock('ReactFiberErrorLogger');
3 +require('./setupMocks');
4
5 var env = jasmine.getEnv();
6
scripts/rollup/build.js
-7
@@ -145,12 +145,6 @@ function updateBundleConfig(config, filename, format, bundleType, hasteName) {
145 });
146 }
147
148 -function setReactNativeUseFiberEnvVariable(useFiber) {
149 - return {
150 - 'process.env.REACT_NATIVE_USE_FIBER': useFiber,
151 - };
152 -}
153 -
148 function stripEnvVariables(production) {
149 return {
150 __DEV__: production ? 'false' : 'true',
@@ -338,7 +332,6 @@ function getPlugins(
332 case RN_PROD:
333 plugins.push(
334 replace(stripEnvVariables(bundleType === RN_PROD)),
341 - replace(setReactNativeUseFiberEnvVariable(useFiber)),
335 // needs to happen after strip env
336 commonjs(getCommonJsConfig(bundleType)),
337 uglify(
scripts/rollup/bundles.js
+17 -17
@@ -43,13 +43,13 @@ const bundles = [
43 moduleName: 'React',
44 sourceMap: false,
45 },
46 - entry: 'src/isomorphic/React.js',
46 + entry: 'src/isomorphic/ReactEntry',
47 externals: [
48 'create-react-class/factory',
49 'prop-types',
50 'prop-types/checkPropTypes',
51 ],
52 - fbEntry: 'src/fb/ReactFBEntry.js',
52 + fbEntry: 'src/fb/ReactFBEntry',
53 hasteName: 'React',
54 isRenderer: false,
55 label: 'core',
@@ -75,9 +75,9 @@ const bundles = [
75 moduleName: 'ReactDOM',
76 sourceMap: false,
77 },
78 - entry: 'src/renderers/dom/fiber/ReactDOMFiber.js',
78 + entry: 'src/renderers/dom/fiber/ReactDOMFiberEntry',
79 externals: ['prop-types', 'prop-types/checkPropTypes'],
80 - fbEntry: 'src/fb/ReactDOMFiberFBEntry.js',
80 + fbEntry: 'src/fb/ReactDOMFiberFBEntry',
81 hasteName: 'ReactDOMFiber',
82 isRenderer: true,
83 label: 'dom-fiber',
@@ -102,7 +102,7 @@ const bundles = [
102 moduleName: 'ReactTestUtils',
103 sourceMap: false,
104 },
105 - entry: 'src/renderers/dom/test/ReactTestUtils',
105 + entry: 'src/renderers/dom/test/ReactTestUtilsEntry',
106 externals: [
107 'prop-types',
108 'prop-types/checkPropTypes',
@@ -110,7 +110,7 @@ const bundles = [
110 'react-dom',
111 'react-test-renderer', // TODO (bvaughn) Remove this dependency before 16.0.0
112 ],
113 - fbEntry: 'src/renderers/dom/test/ReactTestUtils',
113 + fbEntry: 'src/renderers/dom/test/ReactTestUtilsEntry',
114 hasteName: 'ReactTestUtils',
115 isRenderer: true,
116 label: 'test-utils',
@@ -138,9 +138,9 @@ const bundles = [
138 moduleName: 'ReactDOMServer',
139 sourceMap: false,
140 },
141 - entry: 'src/renderers/dom/ReactDOMServerStream.js',
141 + entry: 'src/renderers/dom/ReactDOMServerStreamEntry',
142 externals: ['prop-types', 'prop-types/checkPropTypes'],
143 - fbEntry: 'src/renderers/dom/ReactDOMServerStream.js',
143 + fbEntry: 'src/renderers/dom/ReactDOMServerStreamEntry',
144 hasteName: 'ReactDOMServerStream',
145 isRenderer: true,
146 label: 'dom-server-stream',
@@ -168,7 +168,7 @@ const bundles = [
168 moduleName: 'ReactART',
169 sourceMap: false,
170 },
171 - entry: 'src/renderers/art/ReactARTFiber.js',
171 + entry: 'src/renderers/art/ReactARTFiberEntry',
172 externals: [
173 'art/modes/current',
174 'art/modes/fast-noSideEffects',
@@ -176,7 +176,7 @@ const bundles = [
176 'prop-types/checkPropTypes',
177 'react-dom',
178 ],
179 - fbEntry: 'src/renderers/art/ReactARTFiber.js',
179 + fbEntry: 'src/renderers/art/ReactARTFiberEntry',
180 hasteName: 'ReactARTFiber',
181 isRenderer: true,
182 label: 'art-fiber',
@@ -200,7 +200,7 @@ const bundles = [
200 moduleName: 'ReactNativeStack',
201 sourceMap: false,
202 },
203 - entry: 'src/renderers/native/ReactNativeStack.js',
203 + entry: 'src/renderers/native/ReactNativeStackEntry',
204 externals: [
205 'ExceptionsManager',
206 'InitializeCore',
@@ -242,7 +242,7 @@ const bundles = [
242 moduleName: 'ReactNativeFiber',
243 sourceMap: false,
244 },
245 - entry: 'src/renderers/native/ReactNativeFiber.js',
245 + entry: 'src/renderers/native/ReactNativeFiberEntry',
246 externals: [
247 'ExceptionsManager',
248 'InitializeCore',
@@ -285,9 +285,9 @@ const bundles = [
285 moduleName: 'ReactTestRenderer',
286 sourceMap: false,
287 },
288 - entry: 'src/renderers/testing/ReactTestRendererFiber',
288 + entry: 'src/renderers/testing/ReactTestRendererFiberEntry',
289 externals: ['prop-types/checkPropTypes'],
290 - fbEntry: 'src/renderers/testing/ReactTestRendererFiber',
290 + fbEntry: 'src/renderers/testing/ReactTestRendererFiberEntry',
291 hasteName: 'ReactTestRendererFiber',
292 isRenderer: true,
293 label: 'test-fiber',
@@ -310,13 +310,13 @@ const bundles = [
310 moduleName: 'ReactShallowRenderer',
311 sourceMap: false,
312 },
313 - entry: 'src/renderers/testing/ReactShallowRenderer',
313 + entry: 'src/renderers/testing/ReactShallowRendererEntry',
314 externals: [
315 'react-dom',
316 'prop-types/checkPropTypes',
317 'react-test-renderer',
318 ],
319 - fbEntry: 'src/renderers/testing/ReactShallowRenderer',
319 + fbEntry: 'src/renderers/testing/ReactShallowRendererEntry',
320 hasteName: 'ReactShallowRenderer',
321 isRenderer: true,
322 label: 'shallow-renderer',
@@ -337,7 +337,7 @@ const bundles = [
337 moduleName: 'ReactNoop',
338 sourceMap: false,
339 },
340 - entry: 'src/renderers/noop/ReactNoop.js',
340 + entry: 'src/renderers/noop/ReactNoopEntry',
341 externals: ['prop-types/checkPropTypes'],
342 isRenderer: true,
343 label: 'noop-fiber',
scripts/rollup/modules.js
+2
@@ -130,6 +130,8 @@ function ignoreReactNativeModules() {
130 // This imports NativeMethodsMixin, causing
131 // a circular dependency.
132 'View',
133 + // We have a shim for this file.
134 + 'ReactNativeFeatureFlags',
135 ];
136 }
137
src/fb/ReactDOMFiberFBEntry.js
+1 -1
@@ -9,7 +9,7 @@
9
10 'use strict';
11
12 -var ReactDOMFiber = require('ReactDOMFiber');
12 +var ReactDOMFiber = require('ReactDOMFiberEntry');
13
14 Object.assign(
15 ReactDOMFiber.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,
src/fb/ReactFBEntry.js
+1 -1
@@ -9,7 +9,7 @@
9
10 'use strict';
11
12 -var React = require('React');
12 +var React = require('ReactEntry');
13
14 // Add existing internal dependencies from www codebase.
15 // The goal is to get rid of these with time or turn them into public APIs.
src/isomorphic/ReactEntry.js renamed
+1 -1
@@ -6,7 +6,7 @@
6 * LICENSE file in the root directory of this source tree. An additional grant
7 * of patent rights can be found in the PATENTS file in the same directory.
8 *
9 - * @providesModule React
9 + * @providesModule ReactEntry
10 */
11
12 'use strict';
src/isomorphic/classic/element/__tests__/ReactElement-test.js
+1 -1
@@ -481,7 +481,7 @@ describe('comparing jsx vs .createFactory() vs .createElement()', () => {
481 jest.resetModules();
482 React = require('react');
483 ReactDOM = require('react-dom');
484 - ReactTestUtils = require('ReactTestUtils');
484 + ReactTestUtils = require('react-dom/test-utils');
485 Child = jest.genMockFromModule('ReactElementTestChild');
486 });
487
src/node_modules/react-art/index.js
+1 -1
@@ -6,4 +6,4 @@
6
7 'use strict';
8
9 -module.exports = require('ReactARTFiber');
9 +module.exports = require('ReactARTFiberEntry');
src/node_modules/react-dom/index.js
+6 -1
@@ -6,4 +6,9 @@
6
7 'use strict';
8
9 -module.exports = require('ReactDOM');
9 +var ReactDOMFeatureFlags = require('ReactDOMFeatureFlags');
10 +var useFiber = ReactDOMFeatureFlags.useFiber;
11 +
12 +module.exports = useFiber
13 + ? require('ReactDOMFiberEntry')
14 + : require('ReactDOMStackEntry');
src/node_modules/react-dom/lib/ReactDOM.js deleted
-9
@@ -1,9 +0,0 @@
1 -/**
2 - * Copyright 2016-present Facebook. All Rights Reserved.
3 - *
4 - * @flow
5 - */
6 -
7 -'use strict';
8 -
9 -module.exports = require('ReactDOM');
src/node_modules/react-dom/lib/ReactDOMServer.js deleted
-9
@@ -1,9 +0,0 @@
1 -/**
2 - * Copyright 2016-present Facebook. All Rights Reserved.
3 - *
4 - * @flow
5 - */
6 -
7 -'use strict';
8 -
9 -module.exports = require('ReactDOMServer');
src/node_modules/react-dom/lib/ReactInstanceMap.js deleted
-9
@@ -1,9 +0,0 @@
1 -/**
2 - * Copyright 2016-present Facebook. All Rights Reserved.
3 - *
4 - * @flow
5 - */
6 -
7 -'use strict';
8 -
9 -module.exports = require('ReactInstanceMap');
src/node_modules/react-dom/lib/ReactPerf.js deleted
-9
@@ -1,9 +0,0 @@
1 -/**
2 - * Copyright 2016-present Facebook. All Rights Reserved.
3 - *
4 - * @flow
5 - */
6 -
7 -'use strict';
8 -
9 -module.exports = require('ReactPerf');
src/node_modules/react-dom/lib/ReactTestUtils.js deleted
-9
@@ -1,9 +0,0 @@
1 -/**
2 - * Copyright 2016-present Facebook. All Rights Reserved.
3 - *
4 - * @flow
5 - */
6 -
7 -'use strict';
8 -
9 -module.exports = require('ReactTestUtils');
src/node_modules/react-dom/lib/getVendorPrefixedEventName.js deleted
-9
@@ -1,9 +0,0 @@
1 -/**
2 - * Copyright 2016-present Facebook. All Rights Reserved.
3 - *
4 - * @flow
5 - */
6 -
7 -'use strict';
8 -
9 -module.exports = require('getVendorPrefixedEventName');
src/node_modules/react-dom/server.js
+6 -1
@@ -6,4 +6,9 @@
6
7 'use strict';
8
9 -module.exports = require('ReactDOMServer');
9 +var ReactDOMFeatureFlags = require('ReactDOMFeatureFlags');
10 +var useFiber = ReactDOMFeatureFlags.useFiber;
11 +
12 +module.exports = useFiber
13 + ? require('ReactDOMServerStreamEntry')
14 + : require('ReactDOMServerStackEntry');
src/node_modules/react-dom/test-utils.js
+1 -1
@@ -6,4 +6,4 @@
6
7 'use strict';
8
9 -module.exports = require('ReactTestUtils');
9 +module.exports = require('ReactTestUtilsEntry');
src/node_modules/react-native/index.js
+6 -1
@@ -6,4 +6,9 @@
6
7 'use strict';
8
9 -module.exports = require('ReactNative');
9 +var ReactNativeFeatureFlags = require('ReactNativeFeatureFlags');
10 +var useFiber = ReactNativeFeatureFlags.useFiber;
11 +
12 +module.exports = useFiber
13 + ? require('ReactNativeFiberEntry')
14 + : require('ReactNativeStackEntry');
src/node_modules/react-noop-renderer/index.js
+1 -1
@@ -6,4 +6,4 @@
6
7 'use strict';
8
9 -module.exports = require('ReactNoop');
9 +module.exports = require('ReactNoopEntry');
src/node_modules/react-test-renderer/index.js
+1 -1
@@ -6,4 +6,4 @@
6
7 'use strict';
8
9 -module.exports = require('ReactTestRenderer');
9 +module.exports = require('ReactTestRendererFiberEntry');
src/node_modules/react-test-renderer/shallow.js
+1 -1
@@ -6,4 +6,4 @@
6
7 'use strict';
8
9 -module.exports = require('ReactShallowRenderer');
9 +module.exports = require('ReactShallowRendererEntry');
src/node_modules/react/index.js
+1 -1
@@ -6,4 +6,4 @@
6
7 'use strict';
8
9 -module.exports = require('React');
9 +module.exports = require('ReactEntry');
src/node_modules/react/lib/ReactComponentTreeHook.js deleted
-9
@@ -1,9 +0,0 @@
1 -/**
2 - * Copyright 2016-present Facebook. All Rights Reserved.
3 - *
4 - * @flow
5 - */
6 -
7 -'use strict';
8 -
9 -module.exports = require('ReactComponentTreeHook');
src/node_modules/react/lib/ReactCurrentOwner.js deleted
-9
@@ -1,9 +0,0 @@
1 -/**
2 - * Copyright 2016-present Facebook. All Rights Reserved.
3 - *
4 - * @flow
5 - */
6 -
7 -'use strict';
8 -
9 -module.exports = require('ReactCurrentOwner');
src/node_modules/react/lib/ReactDebugCurrentFrame.js deleted
-9
@@ -1,9 +0,0 @@
1 -/**
2 - * Copyright 2016-present Facebook. All Rights Reserved.
3 - *
4 - * @flow
5 - */
6 -
7 -'use strict';
8 -
9 -module.exports = require('ReactDebugCurrentFrame');
src/renderers/__tests__/ReactComponentTreeHook-test.native.js
+1 -1
@@ -36,7 +36,7 @@ describeStack('ReactComponentTreeHook', () => {
36
37 PropTypes = require('prop-types');
38 React = require('react');
39 - ReactNative = require('ReactNative');
39 + ReactNative = require('react-native');
40 ReactInstanceMap = require('ReactInstanceMap');
41 ReactComponentTreeHook = require('ReactComponentTreeHook');
42 ReactComponentTreeTestUtils = require('ReactComponentTreeTestUtils');
src/renderers/__tests__/ReactPerf-test.js
+1 -1
@@ -42,7 +42,7 @@ describeStack('ReactPerf', () => {
42 React = require('react');
43 ReactDOM = require('react-dom');
44 ReactPerf = require('ReactPerf');
45 - ReactTestUtils = require('ReactTestUtils');
45 + ReactTestUtils = require('react-dom/test-utils');
46 emptyFunction = require('fbjs/lib/emptyFunction');
47
48 App = class extends React.Component {
src/renderers/__tests__/ReactStatelessComponent-test.js
+1 -1
@@ -32,7 +32,7 @@ describe('ReactStatelessComponent', () => {
32 PropTypes = require('prop-types');
33 React = require('react');
34 ReactDOM = require('react-dom');
35 - ReactTestUtils = require('ReactTestUtils');
35 + ReactTestUtils = require('react-dom/test-utils');
36 });
37
38 it('should render stateless component', () => {
src/renderers/__tests__/refs-test.js
+10 -9
@@ -115,7 +115,7 @@ describe('reactiverefs', () => {
115 beforeEach(() => {
116 jest.resetModules();
117 React = require('react');
118 - ReactTestUtils = require('ReactTestUtils');
118 + ReactTestUtils = require('react-dom/test-utils');
119 });
120
121 /**
@@ -171,7 +171,7 @@ describe('ref swapping', () => {
171 beforeEach(() => {
172 jest.resetModules();
173 React = require('react');
174 - ReactTestUtils = require('ReactTestUtils');
174 + ReactTestUtils = require('react-dom/test-utils');
175
176 RefHopsAround = class extends React.Component {
177 state = {count: 0};
@@ -312,14 +312,15 @@ describe('string refs between fiber and stack', () => {
312 beforeEach(() => {
313 jest.resetModules();
314 React = require('react');
315 - ReactTestUtils = require('ReactTestUtils');
315 + ReactTestUtils = require('react-dom/test-utils');
316 });
317
318 it('attaches, detaches from fiber component with stack layer', () => {
319 spyOn(console, 'error');
320 const ReactCurrentOwner = require('ReactCurrentOwner');
321 - const ReactDOM = require('react-dom');
322 - const ReactDOMFiber = require('ReactDOMFiber');
321 +
322 + const ReactDOMStack = require('ReactDOMStackEntry');
323 + const ReactDOMFiber = require('ReactDOMFiberEntry');
324 const ReactInstanceMap = require('ReactInstanceMap');
325 let layerMounted = false;
326 class A extends React.Component {
@@ -332,7 +333,7 @@ describe('string refs between fiber and stack', () => {
333 const span = <span ref="span" />;
334 ReactCurrentOwner.current = null;
335
335 - ReactDOM.unstable_renderSubtreeIntoContainer(
336 + ReactDOMStack.unstable_renderSubtreeIntoContainer(
337 this,
338 span,
339 (this._container = document.createElement('div')),
@@ -343,7 +344,7 @@ describe('string refs between fiber and stack', () => {
344 );
345 }
346 componentWillUnmount() {
346 - ReactDOM.unmountComponentAtNode(this._container);
347 + ReactDOMStack.unmountComponentAtNode(this._container);
348 }
349 }
350 const container = document.createElement('div');
@@ -365,8 +366,8 @@ describe('string refs between fiber and stack', () => {
366 it('attaches, detaches from stack component with fiber layer', () => {
367 spyOn(console, 'error');
368 const ReactCurrentOwner = require('ReactCurrentOwner');
368 - const ReactDOM = require('react-dom');
369 - const ReactDOMFiber = require('ReactDOMFiber');
369 + const ReactDOM = require('ReactDOMStackEntry');
370 + const ReactDOMFiber = require('ReactDOMFiberEntry');
371 const ReactInstanceMap = require('ReactInstanceMap');
372 let layerMounted = false;
373 class A extends React.Component {
src/renderers/art/ReactARTFiberEntry.js renamed
+1 -1
@@ -6,7 +6,7 @@
6 * LICENSE file in the root directory of this source tree. An additional grant
7 * of patent rights can be found in the PATENTS file in the same directory.
8 *
9 - * @providesModule ReactARTFiber
9 + * @providesModule ReactARTFiberEntry
10 */
11 'use strict';
12
src/renderers/dom/ReactDOMServerStackEntry.js renamed
+3 -3
@@ -6,7 +6,7 @@
6 * LICENSE file in the root directory of this source tree. An additional grant
7 * of patent rights can be found in the PATENTS file in the same directory.
8 *
9 - * @providesModule ReactDOMServer
9 + * @providesModule ReactDOMServerStackEntry
10 */
11
12 'use strict';
@@ -19,7 +19,7 @@ var ReactVersion = require('ReactVersion');
19 ReactDOMInjection.inject();
20 ReactDOMStackInjection.inject();
21
22 -var ReactDOMServer = {
22 +var ReactDOMServerStack = {
23 renderToString: ReactServerRendering.renderToString,
24 renderToStaticMarkup: ReactServerRendering.renderToStaticMarkup,
25 version: ReactVersion,
@@ -36,4 +36,4 @@ if (__DEV__) {
36 ReactInstrumentation.debugTool.addHook(ReactDOMInvalidARIAHook);
37 }
38
39 -module.exports = ReactDOMServer;
39 +module.exports = ReactDOMServerStack;
src/renderers/dom/ReactDOMServerStreamEntry.js renamed
+3 -3
@@ -6,7 +6,7 @@
6 * LICENSE file in the root directory of this source tree. An additional grant
7 * of patent rights can be found in the PATENTS file in the same directory.
8 *
9 - * @providesModule ReactDOMServerStream
9 + * @providesModule ReactDOMServerStreamEntry
10 */
11
12 'use strict';
@@ -17,10 +17,10 @@ var ReactVersion = require('ReactVersion');
17
18 ReactDOMInjection.inject();
19
20 -var ReactDOMServer = {
20 +var ReactDOMServerStream = {
21 renderToString: ReactServerRenderer.renderToString,
22 renderToStaticMarkup: ReactServerRenderer.renderToStaticMarkup,
23 version: ReactVersion,
24 };
25
26 -module.exports = ReactDOMServer;
26 +module.exports = ReactDOMServerStream;
src/renderers/dom/ReactDOMStackEntry.js renamed
+3 -3
@@ -6,7 +6,7 @@
6 * LICENSE file in the root directory of this source tree. An additional grant
7 * of patent rights can be found in the PATENTS file in the same directory.
8 *
9 - * @providesModule ReactDOM
9 + * @providesModule ReactDOMStackEntry
10 */
11
12 /* globals __REACT_DEVTOOLS_GLOBAL_HOOK__*/
@@ -29,7 +29,7 @@ var warning = require('fbjs/lib/warning');
29 ReactDOMInjection.inject();
30 ReactDOMStackInjection.inject();
31
32 -var ReactDOM = {
32 +var ReactDOMStack = {
33 findDOMNode: findDOMNode,
34 render: ReactMount.render,
35 unmountComponentAtNode: ReactMount.unmountComponentAtNode,
@@ -163,4 +163,4 @@ if (__DEV__) {
163 ReactInstrumentation.debugTool.addHook(ReactDOMInvalidARIAHook);
164 }
165
166 -module.exports = ReactDOM;
166 +module.exports = ReactDOMStack;
src/renderers/dom/__mocks__/ReactDOM.js deleted
-18
@@ -1,18 +0,0 @@
1 -/**
2 - * Copyright 2013-2015, Facebook, Inc.
3 - * All rights reserved.
4 - *
5 - * This source code is licensed under the BSD-style license found in the
6 - * LICENSE file in the root directory of this source tree. An additional grant
7 - * of patent rights can be found in the PATENTS file in the same directory.
8 - */
9 -
10 -'use strict';
11 -
12 -var ReactDOMFeatureFlags = require('ReactDOMFeatureFlags');
13 -
14 -var useFiber = ReactDOMFeatureFlags.useFiber;
15 -
16 -module.exports = useFiber
17 - ? require('ReactDOMFiber')
18 - : require.requireActual('ReactDOM');
src/renderers/dom/__mocks__/ReactDOMServer.js deleted
-18
@@ -1,18 +0,0 @@
1 -/**
2 - * Copyright 2013-2015, Facebook, Inc.
3 - * All rights reserved.
4 - *
5 - * This source code is licensed under the BSD-style license found in the
6 - * LICENSE file in the root directory of this source tree. An additional grant
7 - * of patent rights can be found in the PATENTS file in the same directory.
8 - */
9 -
10 -'use strict';
11 -
12 -var ReactDOMFeatureFlags = require('ReactDOMFeatureFlags');
13 -
14 -var useFiber = ReactDOMFeatureFlags.useFiber;
15 -
16 -module.exports = useFiber
17 - ? require('ReactDOMServerStream')
18 - : require.requireActual('ReactDOMServer');
src/renderers/dom/fiber/ReactDOMFiberEntry.js renamed
+3 -3
@@ -6,7 +6,7 @@
6 * LICENSE file in the root directory of this source tree. An additional grant
7 * of patent rights can be found in the PATENTS file in the same directory.
8 *
9 - * @providesModule ReactDOMFiber
9 + * @providesModule ReactDOMFiberEntry
10 * @flow
11 */
12
@@ -510,7 +510,7 @@ function renderSubtreeIntoContainer(
510 return DOMRenderer.getPublicRootInstance(root);
511 }
512
513 -var ReactDOM = {
513 +var ReactDOMFiber = {
514 render(
515 element: ReactElement<any>,
516 container: DOMContainer,
@@ -639,4 +639,4 @@ if (typeof injectInternals === 'function') {
639 });
640 }
641
642 -module.exports = ReactDOM;
642 +module.exports = ReactDOMFiber;
src/renderers/dom/shared/__tests__/inputValueTracking-test.js
+1 -1
@@ -12,7 +12,7 @@
12 'use strict';
13
14 var React = require('react');
15 -var ReactTestUtils = require('ReactTestUtils');
15 +var ReactTestUtils = require('react-dom/test-utils');
16 // TODO: can we express this test with only public API?
17 var inputValueTracking = require('inputValueTracking');
18
src/renderers/dom/shared/eventPlugins/__tests__/BeforeInputEventPlugin-test.js
+1 -1
@@ -12,7 +12,7 @@
12 'use strict';
13
14 var React = require('react');
15 -var ReactTestUtils = require('ReactTestUtils');
15 +var ReactTestUtils = require('react-dom/test-utils');
16
17 var EventMapping = {
18 compositionstart: 'topCompositionStart',
src/renderers/dom/test/ReactTestUtilsEntry.js renamed
+2 -2
@@ -6,7 +6,7 @@
6 * LICENSE file in the root directory of this source tree. An additional grant
7 * of patent rights can be found in the PATENTS file in the same directory.
8 *
9 - * @providesModule ReactTestUtils
9 + * @providesModule ReactTestUtilsEntry
10 */
11
12 'use strict';
@@ -16,7 +16,7 @@ var React = require('react');
16 var ReactDOM = require('react-dom');
17 var ReactFiberTreeReflection = require('ReactFiberTreeReflection');
18 var ReactInstanceMap = require('ReactInstanceMap');
19 -var ReactShallowRenderer = require('ReactShallowRenderer'); // TODO (bvaughn) Remove this import before 16.0.0
19 +var ReactShallowRenderer = require('ReactShallowRendererEntry'); // TODO (bvaughn) Remove this import before 16.0.0
20 var ReactTypeOfWork = require('ReactTypeOfWork');
21 var SyntheticEvent = require('SyntheticEvent');
22
src/renderers/native/ReactNative.js deleted
-18
@@ -1,18 +0,0 @@
1 -/**
2 - * Copyright (c) 2015-present, Facebook, Inc.
3 - * All rights reserved.
4 - *
5 - * This source code is licensed under the BSD-style license found in the
6 - * LICENSE file in the root directory of this source tree. An additional grant
7 - * of patent rights can be found in the PATENTS file in the same directory.
8 - *
9 - * @providesModule ReactNative
10 - * @flow
11 - */
12 -'use strict';
13 -
14 -const ReactNativeFeatureFlags = require('ReactNativeFeatureFlags');
15 -
16 -module.exports = ReactNativeFeatureFlags.useFiber
17 - ? require('ReactNativeFiber')
18 - : require('ReactNativeStack');
src/renderers/native/ReactNativeFeatureFlags.js
+1 -3
@@ -12,10 +12,8 @@
12
13 'use strict';
14
15 -// Read from process.env in order to support Rollup flat bundles.
16 -// Jest test script will also write this value for Fiber tests.
15 var ReactNativeFeatureFlags = {
18 - useFiber: process.env.REACT_NATIVE_USE_FIBER,
16 + useFiber: true,
17 };
18
19 module.exports = ReactNativeFeatureFlags;
src/renderers/native/ReactNativeFiberEntry.js renamed
+6 -7
@@ -6,7 +6,7 @@
6 * LICENSE file in the root directory of this source tree. An additional grant
7 * of patent rights can be found in the PATENTS file in the same directory.
8 *
9 - * @providesModule ReactNativeFiber
9 + * @providesModule ReactNativeFiberEntry
10 * @flow
11 */
12
@@ -27,7 +27,6 @@ const findNumericNodeHandle = require('findNumericNodeHandleFiber');
27
28 const {injectInternals} = require('ReactFiberDevToolsHook');
29
30 -import type {Element} from 'React';
30 import type {ReactNativeType} from 'ReactNativeTypes';
31 import type {ReactNodeList} from 'ReactTypes';
32
@@ -45,12 +44,12 @@ ReactFiberErrorLogger.injection.injectDialog(
44 ReactNativeFiberErrorDialog.showDialog,
45 );
46
48 -const ReactNative: ReactNativeType = {
47 +const ReactNativeFiber: ReactNativeType = {
48 NativeComponent: require('ReactNativeComponent'),
49
50 findNodeHandle: findNumericNodeHandle,
51
53 - render(element: Element<any>, containerTag: any, callback: ?Function) {
52 + render(element: ReactElement<any>, containerTag: any, callback: ?Function) {
53 let root = roots.get(containerTag);
54
55 if (!root) {
@@ -75,7 +74,7 @@ const ReactNative: ReactNativeType = {
74 },
75
76 unmountComponentAtNodeAndRemoveContainer(containerTag: number) {
78 - ReactNative.unmountComponentAtNode(containerTag);
77 + ReactNativeFiber.unmountComponentAtNode(containerTag);
78
79 // Call back into native to remove all of the subviews from this container
80 UIManager.removeRootView(containerTag);
@@ -108,7 +107,7 @@ const ReactNative: ReactNativeType = {
107 if (__DEV__) {
108 // $FlowFixMe
109 Object.assign(
111 - ReactNative.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,
110 + ReactNativeFiber.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,
111 {
112 ReactDebugTool: require('ReactDebugTool'), // RCTRenderingPerf, Systrace
113 ReactPerf: require('ReactPerf'), // ReactPerfStallHandler, RCTRenderingPerf
@@ -127,4 +126,4 @@ if (typeof injectInternals === 'function') {
126 });
127 }
128
130 -module.exports = ReactNative;
129 +module.exports = ReactNativeFiber;
src/renderers/native/ReactNativeStackEntry.js renamed
+4 -4
@@ -6,7 +6,7 @@
6 * LICENSE file in the root directory of this source tree. An additional grant
7 * of patent rights can be found in the PATENTS file in the same directory.
8 *
9 - * @providesModule ReactNativeStack
9 + * @providesModule ReactNativeStackEntry
10 * @flow
11 */
12 'use strict';
@@ -33,7 +33,7 @@ var render = function(
33 return ReactNativeMount.renderComponent(element, mountInto, callback);
34 };
35
36 -var ReactNative: ReactNativeType = {
36 +var ReactNativeStack: ReactNativeType = {
37 NativeComponent: require('ReactNativeComponent'),
38
39 hasReactNativeInitialized: false,
@@ -67,7 +67,7 @@ var ReactNative: ReactNativeType = {
67 if (__DEV__) {
68 // $FlowFixMe
69 Object.assign(
70 - ReactNative.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,
70 + ReactNativeStack.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,
71 {
72 ReactDebugTool: require('ReactDebugTool'), // RCTRenderingPerf, Systrace
73 ReactPerf: require('ReactPerf'), // ReactPerfStallHandler, RCTRenderingPerf
@@ -105,4 +105,4 @@ if (
105 });
106 }
107
108 -module.exports = ReactNative;
108 +module.exports = ReactNativeStack;
src/renderers/native/__mocks__/ReactNative.js deleted
-16
@@ -1,16 +0,0 @@
1 -/**
2 - * Copyright 2013-2015, Facebook, Inc.
3 - * All rights reserved.
4 - *
5 - * This source code is licensed under the BSD-style license found in the
6 - * LICENSE file in the root directory of this source tree. An additional grant
7 - * of patent rights can be found in the PATENTS file in the same directory.
8 - */
9 -
10 -'use strict';
11 -
12 -const ReactNativeFeatureFlags = require('ReactNativeFeatureFlags');
13 -
14 -module.exports = ReactNativeFeatureFlags.useFiber
15 - ? require('ReactNativeFiber')
16 - : require('ReactNativeStack');
src/renderers/native/takeSnapshot.js
+1 -3
@@ -14,8 +14,6 @@
14 const ReactNativeFeatureFlags = require('ReactNativeFeatureFlags');
15 const UIManager = require('UIManager');
16
17 -import type {Element} from 'React';
18 -
17 const findNumericNodeHandle = ReactNativeFeatureFlags.useFiber
18 ? require('findNumericNodeHandleFiber')
19 : require('findNumericNodeHandleStack');
@@ -38,7 +36,7 @@ const findNumericNodeHandle = ReactNativeFeatureFlags.useFiber
36 * @platform ios
37 */
38 function takeSnapshot(
41 - view?: 'window' | Element<any> | number,
39 + view?: 'window' | ReactElement<any> | number,
40 options?: {
41 width?: number,
42 height?: number,
src/renderers/noop/ReactNoopEntry.js renamed
+1 -1
@@ -6,7 +6,7 @@
6 * LICENSE file in the root directory of this source tree. An additional grant
7 * of patent rights can be found in the PATENTS file in the same directory.
8 *
9 - * @providesModule ReactNoop
9 + * @providesModule ReactNoopEntry
10 * @flow
11 */
12
src/renderers/shared/__tests__/ReactDOMFrameScheduling-test.js
+2 -2
@@ -21,7 +21,7 @@ describeFiber('ReactDOMFrameScheduling', () => {
21 global.requestAnimationFrame = undefined;
22 jest.resetModules();
23 expect(() => {
24 - require('ReactDOM');
24 + require('react-dom');
25 }).toThrow(
26 'React depends on requestAnimationFrame. Make sure that you load a ' +
27 'polyfill in older browsers.',
@@ -44,7 +44,7 @@ describeFiber('ReactDOMFrameScheduling', () => {
44 delete global.window;
45 jest.resetModules();
46 expect(() => {
47 - require('ReactDOM');
47 + require('react-dom');
48 }).not.toThrow();
49 } finally {
50 global.requestAnimationFrame = previousRAF;
src/renderers/shared/fiber/__tests__/ReactIncrementalErrorHandling-test.js
+1 -1
@@ -959,7 +959,7 @@ describe('ReactIncrementalErrorHandling', () => {
959 jest.unmock('ReactFiberErrorLogger');
960 }
961 React = require('react');
962 - ReactNoop = require('ReactNoop');
962 + ReactNoop = require('react-noop-renderer');
963 }
964
965 function normalizeCodeLocInfo(str) {
src/renderers/testing/ReactShallowRendererEntry.js renamed
+1 -1
@@ -6,7 +6,7 @@
6 * LICENSE file in the root directory of this source tree. An additional grant
7 * of patent rights can be found in the PATENTS file in the same directory.
8 *
9 - * @providesModule ReactShallowRenderer
9 + * @providesModule ReactShallowRendererEntry
10 * @preventMunge
11 */
12
src/renderers/testing/ReactTestRenderer.js deleted
-18
@@ -1,18 +0,0 @@
1 -/**
2 - * Copyright (c) 2013-present Facebook, Inc.
3 - * All rights reserved.
4 - *
5 - * This source code is licensed under the BSD-style license found in the
6 - * LICENSE file in the root directory of this source tree. An additional grant
7 - * of patent rights can be found in the PATENTS file in the same directory.
8 - *
9 - * @providesModule ReactTestRenderer
10 - */
11 -
12 -'use strict';
13 -
14 -const ReactTestRendererFeatureFlags = require('ReactTestRendererFeatureFlags');
15 -
16 -module.exports = ReactTestRendererFeatureFlags.useFiber
17 - ? require('ReactTestRendererFiber')
18 - : require('ReactTestRendererStack');
src/renderers/testing/ReactTestRendererFeatureFlags.js deleted
-18
@@ -1,18 +0,0 @@
1 -/**
2 - * Copyright 2013-present, Facebook, Inc.
3 - * All rights reserved.
4 - *
5 - * This source code is licensed under the BSD-style license found in the
6 - * LICENSE file in the root directory of this source tree. An additional grant
7 - * of patent rights can be found in the PATENTS file in the same directory.
8 - *
9 - * @providesModule ReactTestRendererFeatureFlags
10 - */
11 -
12 -'use strict';
13 -
14 -var ReactTestRendererFeatureFlags = {
15 - useFiber: false,
16 -};
17 -
18 -module.exports = ReactTestRendererFeatureFlags;
src/renderers/testing/ReactTestRendererFiberEntry.js renamed
+7 -4
@@ -6,7 +6,7 @@
6 * LICENSE file in the root directory of this source tree. An additional grant
7 * of patent rights can be found in the PATENTS file in the same directory.
8 *
9 - * @providesModule ReactTestRendererFiber
9 + * @providesModule ReactTestRendererFiberEntry
10 * @preventMunge
11 * @flow
12 */
@@ -26,10 +26,13 @@ var {
26 HostRoot,
27 } = ReactTypeOfWork;
28
29 -import type {TestRendererOptions} from 'ReactTestMount';
29 import type {Fiber} from 'ReactFiber';
30 import type {FiberRoot} from 'ReactFiberRoot';
31
32 +type TestRendererOptions = {
33 + createNodeMock: (element: ReactElement<any>) => any,
34 +};
35 +
36 type ReactTestRendererJSON = {|
37 type: string,
38 props: {[propName: string]: any},
@@ -319,7 +322,7 @@ function toTree(node: ?Fiber) {
322 }
323 }
324
322 -var ReactTestFiberRenderer = {
325 +var ReactTestRendererFiber = {
326 create(element: ReactElement<any>, options: TestRendererOptions) {
327 var createNodeMock = defaultTestOptions.createNodeMock;
328 if (options && typeof options.createNodeMock === 'function') {
@@ -381,4 +384,4 @@ var ReactTestFiberRenderer = {
384 /* eslint-enable camelcase */
385 };
386
384 -module.exports = ReactTestFiberRenderer;
387 +module.exports = ReactTestRendererFiber;
src/renderers/testing/__tests__/ReactTestRenderer-test.js
+38 -53
@@ -12,8 +12,7 @@
12 'use strict';
13
14 var React = require('react');
15 -var ReactTestRenderer = require('ReactTestRenderer');
16 -var ReactDOMFeatureFlags = require('ReactDOMFeatureFlags');
15 +var ReactTestRenderer = require('react-test-renderer');
16 var prettyFormat = require('pretty-format');
17 var ReactFeatureFlags;
18
@@ -145,10 +144,7 @@ describe('ReactTestRenderer', () => {
144 expect(renderer.toJSON()).toEqual({
145 type: 'div',
146 props: {className: 'purple'},
148 - children: [
149 - ReactDOMFeatureFlags.useFiber ? '7' : 7,
150 - {type: 'moo', props: {}, children: null},
151 - ],
147 + children: ['7', {type: 'moo', props: {}, children: null}],
148 });
149 expect(renders).toBe(6);
150 });
@@ -454,21 +450,12 @@ describe('ReactTestRenderer', () => {
450 props: {},
451 children: ['Happy Birthday!'],
452 });
457 - if (ReactDOMFeatureFlags.useFiber) {
458 - expect(log).toEqual([
459 - 'Boundary render',
460 - 'Angry render',
461 - 'Boundary componentDidMount',
462 - 'Boundary render',
463 - ]);
464 - } else {
465 - expect(log).toEqual([
466 - 'Boundary render',
467 - 'Angry render',
468 - 'Boundary render',
469 - 'Boundary componentDidMount',
470 - ]);
471 - }
453 + expect(log).toEqual([
454 + 'Boundary render',
455 + 'Angry render',
456 + 'Boundary componentDidMount',
457 + 'Boundary render',
458 + ]);
459 });
460
461 it('can update text nodes', () => {
@@ -503,7 +490,7 @@ describe('ReactTestRenderer', () => {
490 renderer.update(<Component>{42}</Component>);
491 expect(renderer.toJSON()).toEqual({
492 type: 'div',
506 - children: [ReactDOMFeatureFlags.useFiber ? '42' : 42],
493 + children: ['42'],
494 props: {},
495 });
496 renderer.update(<Component><div /></Component>);
@@ -673,39 +660,37 @@ describe('ReactTestRenderer', () => {
660 );
661 });
662
676 - if (ReactDOMFeatureFlags.useFiber) {
677 - it('can update text nodes when rendered as root', () => {
678 - var renderer = ReactTestRenderer.create(['Hello', 'world']);
679 - expect(renderer.toJSON()).toEqual(['Hello', 'world']);
680 - renderer.update(42);
681 - expect(renderer.toJSON()).toEqual('42');
682 - renderer.update([42, 'world']);
683 - expect(renderer.toJSON()).toEqual(['42', 'world']);
684 - });
663 + it('can update text nodes when rendered as root', () => {
664 + var renderer = ReactTestRenderer.create(['Hello', 'world']);
665 + expect(renderer.toJSON()).toEqual(['Hello', 'world']);
666 + renderer.update(42);
667 + expect(renderer.toJSON()).toEqual('42');
668 + renderer.update([42, 'world']);
669 + expect(renderer.toJSON()).toEqual(['42', 'world']);
670 + });
671
686 - it('can render and update root fragments', () => {
687 - var Component = props => props.children;
672 + it('can render and update root fragments', () => {
673 + var Component = props => props.children;
674
689 - var renderer = ReactTestRenderer.create([
690 - <Component key="a">Hi</Component>,
691 - <Component key="b">Bye</Component>,
692 - ]);
693 - expect(renderer.toJSON()).toEqual(['Hi', 'Bye']);
694 - renderer.update(<div />);
695 - expect(renderer.toJSON()).toEqual({
675 + var renderer = ReactTestRenderer.create([
676 + <Component key="a">Hi</Component>,
677 + <Component key="b">Bye</Component>,
678 + ]);
679 + expect(renderer.toJSON()).toEqual(['Hi', 'Bye']);
680 + renderer.update(<div />);
681 + expect(renderer.toJSON()).toEqual({
682 + type: 'div',
683 + children: null,
684 + props: {},
685 + });
686 + renderer.update([<div key="a">goodbye</div>, 'world']);
687 + expect(renderer.toJSON()).toEqual([
688 + {
689 type: 'div',
697 - children: null,
690 + children: ['goodbye'],
691 props: {},
699 - });
700 - renderer.update([<div key="a">goodbye</div>, 'world']);
701 - expect(renderer.toJSON()).toEqual([
702 - {
703 - type: 'div',
704 - children: ['goodbye'],
705 - props: {},
706 - },
707 - 'world',
708 - ]);
709 - });
710 - }
692 + },
693 + 'world',
694 + ]);
695 + });
696 });
src/renderers/testing/stack/ReactTestEmptyComponent.js deleted
-29
@@ -1,29 +0,0 @@
1 -/**
2 - * Copyright 2013-present, Facebook, Inc.
3 - * All rights reserved.
4 - *
5 - * This source code is licensed under the BSD-style license found in the
6 - * LICENSE file in the root directory of this source tree. An additional grant
7 - * of patent rights can be found in the PATENTS file in the same directory.
8 - *
9 - * @providesModule ReactTestEmptyComponent
10 - * @preventMunge
11 - * @flow
12 - */
13 -
14 -'use strict';
15 -
16 -class ReactTestEmptyComponent {
17 - _currentElement: null;
18 -
19 - constructor() {
20 - this._currentElement = null;
21 - }
22 - receiveComponent(): void {}
23 - toJSON(): void {}
24 - mountComponent(): void {}
25 - getHostNode(): void {}
26 - unmountComponent(): void {}
27 -}
28 -
29 -module.exports = ReactTestEmptyComponent;
src/renderers/testing/stack/ReactTestMount.js deleted
-208
@@ -1,208 +0,0 @@
1 -/**
2 - * Copyright (c) 2015-present, Facebook, Inc.
3 - * All rights reserved.
4 - *
5 - * This source code is licensed under the BSD-style license found in the
6 - * LICENSE file in the root directory of this source tree. An additional grant
7 - * of patent rights can be found in the PATENTS file in the same directory.
8 - *
9 - * @providesModule ReactTestMount
10 - * @flow
11 - */
12 -'use strict';
13 -
14 -var React = require('react');
15 -var ReactReconciler = require('ReactReconciler');
16 -var ReactUpdates = require('ReactUpdates');
17 -
18 -var emptyObject = require('fbjs/lib/emptyObject');
19 -var getHostComponentFromComposite = require('getHostComponentFromComposite');
20 -var instantiateReactComponent = require('instantiateReactComponent');
21 -var invariant = require('fbjs/lib/invariant');
22 -
23 -export type TestRendererOptions = {
24 - createNodeMock: (element: ReactElement<any>) => any,
25 -};
26 -
27 -var defaultTestOptions = {
28 - createNodeMock: function() {
29 - return null;
30 - },
31 -};
32 -
33 -/**
34 - * Temporary (?) hack so that we can store all top-level pending updates on
35 - * composites instead of having to worry about different types of components
36 - * here.
37 - */
38 -var TopLevelWrapper = function() {};
39 -TopLevelWrapper.prototype.isReactComponent = {};
40 -if (__DEV__) {
41 - TopLevelWrapper.displayName = 'TopLevelWrapper';
42 -}
43 -TopLevelWrapper.prototype.render = function() {
44 - return this.props.child;
45 -};
46 -TopLevelWrapper.isReactTopLevelWrapper = true;
47 -
48 -/**
49 - * Mounts this component and inserts it into the DOM.
50 - *
51 - * @param {ReactComponent} componentInstance The instance to mount.
52 - * @param {ReactReconcileTransaction} transaction
53 - * @param {Object} hostParent
54 - * @param {Object} hostContainerInfo
55 - */
56 -function mountComponentIntoNode(
57 - componentInstance,
58 - transaction,
59 - hostParent,
60 - hostContainerInfo,
61 -) {
62 - var image = ReactReconciler.mountComponent(
63 - componentInstance,
64 - transaction,
65 - null,
66 - hostContainerInfo,
67 - emptyObject,
68 - );
69 - componentInstance._renderedComponent._topLevelWrapper = componentInstance;
70 - return image;
71 -}
72 -
73 -/**
74 - * Batched mount.
75 - *
76 - * @param {ReactComponent} componentInstance The instance to mount.
77 - * @param {number} rootID ID of the root node.
78 - * @param {number} containerTag container element to mount into.
79 - */
80 -function batchedMountComponentIntoNode(componentInstance, options) {
81 - var transaction = ReactUpdates.ReactReconcileTransaction.getPooled(true);
82 - var image = transaction.perform(
83 - mountComponentIntoNode,
84 - null,
85 - componentInstance,
86 - transaction,
87 - null,
88 - options,
89 - );
90 - ReactUpdates.ReactReconcileTransaction.release(transaction);
91 - return image;
92 -}
93 -
94 -var ReactTestInstance = function(component) {
95 - this._component = component;
96 -};
97 -ReactTestInstance.prototype.getInstance = function() {
98 - return this._component._renderedComponent.getPublicInstance();
99 -};
100 -ReactTestInstance.prototype.update = function(nextElement) {
101 - invariant(
102 - this._component,
103 - "ReactTestRenderer: .update() can't be called after unmount.",
104 - );
105 - var nextWrappedElement = React.createElement(TopLevelWrapper, {
106 - child: nextElement,
107 - });
108 - var component = this._component;
109 - ReactUpdates.batchedUpdates(function() {
110 - var transaction = ReactUpdates.ReactReconcileTransaction.getPooled(true);
111 - transaction.perform(function() {
112 - ReactReconciler.receiveComponent(
113 - component,
114 - nextWrappedElement,
115 - transaction,
116 - emptyObject,
117 - );
118 - });
119 - ReactUpdates.ReactReconcileTransaction.release(transaction);
120 - });
121 -};
122 -ReactTestInstance.prototype.unmount = function(nextElement) {
123 - var component = this._component;
124 - ReactUpdates.batchedUpdates(function() {
125 - var transaction = ReactUpdates.ReactReconcileTransaction.getPooled(true);
126 - transaction.perform(function() {
127 - ReactReconciler.unmountComponent(
128 - component,
129 - false /* safely */,
130 - false /* skipLifecycle */,
131 - );
132 - });
133 - ReactUpdates.ReactReconcileTransaction.release(transaction);
134 - });
135 - this._component = null;
136 -};
137 -ReactTestInstance.prototype.toTree = function() {
138 - return toTree(this._component._renderedComponent);
139 -};
140 -ReactTestInstance.prototype.toJSON = function() {
141 - var inst = getHostComponentFromComposite(this._component);
142 - if (inst === null) {
143 - return null;
144 - }
145 - return inst.toJSON();
146 -};
147 -
148 -function toTree(component) {
149 - var element = component._currentElement;
150 - if (!React.isValidElement(element)) {
151 - return element;
152 - }
153 - if (!component._renderedComponent) {
154 - var rendered = [];
155 - for (var key in component._renderedChildren) {
156 - var inst = component._renderedChildren[key];
157 - var json = toTree(inst);
158 - if (json !== undefined) {
159 - rendered.push(json);
160 - }
161 - }
162 -
163 - return {
164 - nodeType: 'host',
165 - type: element.type,
166 - props: {...element.props},
167 - instance: component._nodeMock,
168 - rendered: rendered,
169 - };
170 - } else {
171 - return {
172 - nodeType: 'component',
173 - type: element.type,
174 - props: {...element.props},
175 - instance: component._instance,
176 - rendered: toTree(component._renderedComponent),
177 - };
178 - }
179 -}
180 -
181 -/**
182 - * As soon as `ReactMount` is refactored to not rely on the DOM, we can share
183 - * code between the two. For now, we'll hard code the ID logic.
184 - */
185 -var ReactTestMount = {
186 - render: function(
187 - nextElement: ReactElement<any>,
188 - options?: TestRendererOptions,
189 - ): ReactTestInstance {
190 - var nextWrappedElement = React.createElement(TopLevelWrapper, {
191 - child: nextElement,
192 - });
193 -
194 - var instance = instantiateReactComponent(nextWrappedElement, false);
195 -
196 - // The initial render is synchronous but any updates that happen during
197 - // rendering, in componentWillMount or componentDidMount, will be batched
198 - // according to the current batching strategy.
199 - ReactUpdates.batchedUpdates(
200 - batchedMountComponentIntoNode,
201 - instance,
202 - Object.assign({}, defaultTestOptions, options),
203 - );
204 - return new ReactTestInstance(instance);
205 - },
206 -};
207 -
208 -module.exports = ReactTestMount;
src/renderers/testing/stack/ReactTestReconcileTransaction.js deleted
-134
@@ -1,134 +0,0 @@
1 -/**
2 - * Copyright (c) 2015-present, Facebook, Inc.
3 - * All rights reserved.
4 - *
5 - * This source code is licensed under the BSD-style license found in the
6 - * LICENSE file in the root directory of this source tree. An additional grant
7 - * of patent rights can be found in the PATENTS file in the same directory.
8 - *
9 - * @providesModule ReactTestReconcileTransaction
10 - * @flow
11 - */
12 -'use strict';
13 -
14 -var CallbackQueue = require('CallbackQueue');
15 -var PooledClass = require('PooledClass');
16 -var Transaction = require('Transaction');
17 -var ReactUpdateQueue = require('ReactUpdateQueue');
18 -
19 -import type {TestRendererOptions} from 'ReactTestMount';
20 -
21 -/**
22 - * Provides a `CallbackQueue` queue for collecting `onDOMReady` callbacks during
23 - * the performing of the transaction.
24 - */
25 -var ON_DOM_READY_QUEUEING = {
26 - /**
27 - * Initializes the internal `onDOMReady` queue.
28 - */
29 - initialize: function() {
30 - this.reactMountReady.reset();
31 - },
32 -
33 - /**
34 - * After DOM is flushed, invoke all registered `onDOMReady` callbacks.
35 - */
36 - close: function() {
37 - this.reactMountReady.notifyAll();
38 - },
39 -};
40 -
41 -/**
42 - * Executed within the scope of the `Transaction` instance. Consider these as
43 - * being member methods, but with an implied ordering while being isolated from
44 - * each other.
45 - */
46 -var TRANSACTION_WRAPPERS = [ON_DOM_READY_QUEUEING];
47 -
48 -/**
49 - * Currently:
50 - * - The order that these are listed in the transaction is critical:
51 - * - Suppresses events.
52 - * - Restores selection range.
53 - *
54 - * Future:
55 - * - Restore document/overflow scroll positions that were unintentionally
56 - * modified via DOM insertions above the top viewport boundary.
57 - * - Implement/integrate with customized constraint based layout system and keep
58 - * track of which dimensions must be remeasured.
59 - *
60 - * @class ReactTestReconcileTransaction
61 - */
62 -function ReactTestReconcileTransaction(testOptions: TestRendererOptions) {
63 - this.reinitializeTransaction();
64 - this.testOptions = testOptions;
65 - this.reactMountReady = CallbackQueue.getPooled(this);
66 -}
67 -
68 -var Mixin = {
69 - /**
70 - * @see Transaction
71 - * @abstract
72 - * @final
73 - * @return {array<object>} List of operation wrap procedures.
74 - * TODO: convert to array<TransactionWrapper>
75 - */
76 - getTransactionWrappers: function() {
77 - return TRANSACTION_WRAPPERS;
78 - },
79 -
80 - /**
81 - * @return {object} The queue to collect `onDOMReady` callbacks with.
82 - * TODO: convert to ReactMountReady
83 - */
84 - getReactMountReady: function() {
85 - return this.reactMountReady;
86 - },
87 -
88 - /**
89 - * @return {object} the options passed to ReactTestRenderer
90 - */
91 - getTestOptions: function() {
92 - return this.testOptions;
93 - },
94 -
95 - /**
96 - * @return {object} The queue to collect React async events.
97 - */
98 - getUpdateQueue: function() {
99 - return ReactUpdateQueue;
100 - },
101 -
102 - /**
103 - * Save current transaction state -- if the return value from this method is
104 - * passed to `rollback`, the transaction will be reset to that state.
105 - */
106 - checkpoint: function() {
107 - // reactMountReady is the our only stateful wrapper
108 - return this.reactMountReady.checkpoint();
109 - },
110 -
111 - rollback: function(checkpoint) {
112 - this.reactMountReady.rollback(checkpoint);
113 - },
114 -
115 - /**
116 - * `PooledClass` looks for this, and will invoke this before allowing this
117 - * instance to be reused.
118 - */
119 - destructor: function() {
120 - CallbackQueue.release(this.reactMountReady);
121 - this.reactMountReady = null;
122 - },
123 -};
124 -
125 -Object.assign(
126 - ReactTestReconcileTransaction.prototype,
127 - Transaction,
128 - ReactTestReconcileTransaction,
129 - Mixin,
130 -);
131 -
132 -PooledClass.addPoolingTo(ReactTestReconcileTransaction);
133 -
134 -module.exports = ReactTestReconcileTransaction;
src/renderers/testing/stack/ReactTestRendererStack.js deleted
-173
@@ -1,173 +0,0 @@
1 -/**
2 - * Copyright 2013-present, Facebook, Inc.
3 - * All rights reserved.
4 - *
5 - * This source code is licensed under the BSD-style license found in the
6 - * LICENSE file in the root directory of this source tree. An additional grant
7 - * of patent rights can be found in the PATENTS file in the same directory.
8 - *
9 - * @providesModule ReactTestRendererStack
10 - * @preventMunge
11 - * @flow
12 - */
13 -
14 -'use strict';
15 -
16 -var ReactComponentEnvironment = require('ReactComponentEnvironment');
17 -var ReactDefaultBatchingStrategy = require('ReactDefaultBatchingStrategy');
18 -var ReactEmptyComponent = require('ReactEmptyComponent');
19 -var ReactMultiChild = require('ReactMultiChild');
20 -var ReactHostComponent = require('ReactHostComponent');
21 -var ReactTestMount = require('ReactTestMount');
22 -var ReactTestReconcileTransaction = require('ReactTestReconcileTransaction');
23 -var ReactUpdates = require('ReactUpdates');
24 -var ReactTestTextComponent = require('ReactTestTextComponent');
25 -var ReactTestEmptyComponent = require('ReactTestEmptyComponent');
26 -var invariant = require('fbjs/lib/invariant');
27 -
28 -import type {ReactInstance} from 'ReactInstanceType';
29 -import type {TestRendererOptions} from 'ReactTestMount';
30 -import type {ReactText} from 'ReactTypes';
31 -
32 -type ReactTestRendererJSON = {
33 - type: string,
34 - props: {[propName: string]: any},
35 - children: null | Array<ReactText | ReactTestRendererJSON>,
36 - $$typeof?: any,
37 -};
38 -
39 -let injected = false;
40 -function inject() {
41 - if (injected) {
42 - return;
43 - }
44 -
45 - injected = true;
46 -
47 - ReactUpdates.injection.injectReconcileTransaction(
48 - ReactTestReconcileTransaction,
49 - );
50 - ReactUpdates.injection.injectBatchingStrategy(ReactDefaultBatchingStrategy);
51 -
52 - ReactHostComponent.injection.injectGenericComponentClass(ReactTestComponent);
53 - ReactHostComponent.injection.injectTextComponentClass(ReactTestTextComponent);
54 - ReactEmptyComponent.injection.injectEmptyComponentFactory(function() {
55 - return new ReactTestEmptyComponent();
56 - });
57 -
58 - ReactComponentEnvironment.injection.injectEnvironment({
59 - processChildrenUpdates: function() {},
60 - replaceNodeWithMarkup: function() {},
61 - });
62 -}
63 -
64 -/**
65 - * Drill down (through composites and empty components) until we get a native or
66 - * native text component.
67 - *
68 - * This is pretty polymorphic but unavoidable with the current structure we have
69 - * for `_renderedChildren`.
70 - */
71 -function getRenderedHostOrTextFromComponent(component) {
72 - var rendered;
73 - while ((rendered = component._renderedComponent)) {
74 - component = rendered;
75 - }
76 - return component;
77 -}
78 -
79 -var UNSET = {};
80 -
81 -class ReactTestComponent {
82 - _currentElement: ReactElement<any>;
83 - _renderedChildren: null | Object;
84 - _topLevelWrapper: null | ReactInstance;
85 - _hostContainerInfo: null | Object;
86 - _nodeMock: Object;
87 -
88 - constructor(element: ReactElement<any>) {
89 - this._currentElement = element;
90 - this._renderedChildren = null;
91 - this._topLevelWrapper = null;
92 - this._hostContainerInfo = null;
93 - this._nodeMock = UNSET;
94 - }
95 -
96 - mountComponent(
97 - transaction: ReactTestReconcileTransaction,
98 - nativeParent: null | ReactTestComponent,
99 - hostContainerInfo: Object,
100 - context: Object,
101 - ) {
102 - var element = this._currentElement;
103 - this._hostContainerInfo = hostContainerInfo;
104 - this._nodeMock = hostContainerInfo.createNodeMock(element);
105 - // $FlowFixMe https://github.com/facebook/flow/issues/1805
106 - this.mountChildren(element.props.children, transaction, context);
107 - }
108 -
109 - receiveComponent(
110 - nextElement: ReactElement<any>,
111 - transaction: ReactTestReconcileTransaction,
112 - context: Object,
113 - ) {
114 - this._currentElement = nextElement;
115 - // $FlowFixMe https://github.com/facebook/flow/issues/1805
116 - this.updateChildren(nextElement.props.children, transaction, context);
117 - }
118 -
119 - getPublicInstance(): Object {
120 - invariant(
121 - this._nodeMock !== UNSET,
122 - 'getPublicInstance should not be called before component is mounted.',
123 - );
124 - return this._nodeMock;
125 - }
126 -
127 - toJSON(): ReactTestRendererJSON {
128 - // not using `children`, but I don't want to rewrite without destructuring
129 - // eslint-disable-next-line no-unused-vars
130 - var {children, ...props} = this._currentElement.props;
131 - var childrenJSON = [];
132 - for (var key in this._renderedChildren) {
133 - var inst = this._renderedChildren[key];
134 - inst = getRenderedHostOrTextFromComponent(inst);
135 - var json = inst.toJSON();
136 - if (json !== undefined) {
137 - childrenJSON.push(json);
138 - }
139 - }
140 - var object: ReactTestRendererJSON = {
141 - type: ((this._currentElement.type: any): string),
142 - props: props,
143 - children: childrenJSON.length ? childrenJSON : null,
144 - };
145 - Object.defineProperty(object, '$$typeof', {
146 - value: Symbol.for('react.test.json'),
147 - });
148 - return object;
149 - }
150 -
151 - getHostNode(): void {}
152 - unmountComponent(safely, skipLifecycle): void {
153 - // $FlowFixMe https://github.com/facebook/flow/issues/1805
154 - this.unmountChildren(safely, skipLifecycle);
155 - }
156 -}
157 -
158 -Object.assign(ReactTestComponent.prototype, ReactMultiChild);
159 -
160 -// =============================================================================
161 -
162 -var ReactTestRenderer = {
163 - create: (element: ReactElement<any>, options?: TestRendererOptions) => {
164 - inject();
165 -
166 - return ReactTestMount.render(element, options);
167 - },
168 - /* eslint-disable camelcase */
169 - unstable_batchedUpdates: ReactUpdates.batchedUpdates,
170 - /* eslint-enable camelcase */
171 -};
172 -
173 -module.exports = ReactTestRenderer;
src/renderers/testing/stack/ReactTestTextComponent.js deleted
-38
@@ -1,38 +0,0 @@
1 -/**
2 - * Copyright 2013-present, Facebook, Inc.
3 - * All rights reserved.
4 - *
5 - * This source code is licensed under the BSD-style license found in the
6 - * LICENSE file in the root directory of this source tree. An additional grant
7 - * of patent rights can be found in the PATENTS file in the same directory.
8 - *
9 - * @providesModule ReactTestTextComponent
10 - * @preventMunge
11 - * @flow
12 - */
13 -
14 -'use strict';
15 -
16 -import type {ReactText} from 'ReactTypes';
17 -
18 -class ReactTestTextComponent {
19 - _currentElement: ReactText;
20 -
21 - constructor(element: ReactText) {
22 - this._currentElement = element;
23 - }
24 -
25 - receiveComponent(nextElement: ReactText) {
26 - this._currentElement = nextElement;
27 - }
28 -
29 - toJSON(): ReactText {
30 - return this._currentElement;
31 - }
32 -
33 - mountComponent(): void {}
34 - getHostNode(): void {}
35 - unmountComponent(): void {}
36 -}
37 -
38 -module.exports = ReactTestTextComponent;