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;