aboutsummaryrefslogtreecommitdiff
path: root/node_modules/react-dom/lib/ReactShallowRenderer.js
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2017-05-03 15:35:00 +0200
committerFlorian Dold <florian.dold@gmail.com>2017-05-03 15:35:00 +0200
commitde98e0b232509d5f40c135d540a70e415272ff85 (patch)
treea79222a5b58484ab3b80d18efcaaa7ccc4769b33 /node_modules/react-dom/lib/ReactShallowRenderer.js
parente0c9d480a73fa629c1e4a47d3e721f1d2d345406 (diff)
node_modules
Diffstat (limited to 'node_modules/react-dom/lib/ReactShallowRenderer.js')
-rw-r--r--node_modules/react-dom/lib/ReactShallowRenderer.js150
1 files changed, 150 insertions, 0 deletions
diff --git a/node_modules/react-dom/lib/ReactShallowRenderer.js b/node_modules/react-dom/lib/ReactShallowRenderer.js
new file mode 100644
index 000000000..a2454a040
--- /dev/null
+++ b/node_modules/react-dom/lib/ReactShallowRenderer.js
@@ -0,0 +1,150 @@
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ */
+
+'use strict';
+
+var _prodInvariant = require('./reactProdInvariant'),
+ _assign = require('object-assign');
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var React = require('react/lib/React');
+var ReactCompositeComponent = require('./ReactCompositeComponent');
+var ReactDefaultBatchingStrategy = require('./ReactDefaultBatchingStrategy');
+var ReactReconciler = require('./ReactReconciler');
+var ReactReconcileTransaction = require('./ReactReconcileTransaction');
+var ReactUpdates = require('./ReactUpdates');
+
+var emptyObject = require('fbjs/lib/emptyObject');
+var getNextDebugID = require('react/lib/getNextDebugID');
+var invariant = require('fbjs/lib/invariant');
+
+function injectDefaults() {
+ ReactUpdates.injection.injectReconcileTransaction(ReactReconcileTransaction);
+ ReactUpdates.injection.injectBatchingStrategy(ReactDefaultBatchingStrategy);
+}
+
+var NoopInternalComponent = function () {
+ function NoopInternalComponent(element) {
+ _classCallCheck(this, NoopInternalComponent);
+
+ this._renderedOutput = element;
+ this._currentElement = element;
+
+ if (process.env.NODE_ENV !== 'production') {
+ this._debugID = getNextDebugID();
+ }
+ }
+
+ NoopInternalComponent.prototype.mountComponent = function mountComponent() {};
+
+ NoopInternalComponent.prototype.receiveComponent = function receiveComponent(element) {
+ this._renderedOutput = element;
+ this._currentElement = element;
+ };
+
+ NoopInternalComponent.prototype.unmountComponent = function unmountComponent() {};
+
+ NoopInternalComponent.prototype.getHostNode = function getHostNode() {
+ return undefined;
+ };
+
+ NoopInternalComponent.prototype.getPublicInstance = function getPublicInstance() {
+ return null;
+ };
+
+ return NoopInternalComponent;
+}();
+
+var ShallowComponentWrapper = function (element) {
+ // TODO: Consolidate with instantiateReactComponent
+ if (process.env.NODE_ENV !== 'production') {
+ this._debugID = getNextDebugID();
+ }
+
+ this.construct(element);
+};
+_assign(ShallowComponentWrapper.prototype, ReactCompositeComponent, {
+ _constructComponent: ReactCompositeComponent._constructComponentWithoutOwner,
+ _instantiateReactComponent: function (element) {
+ return new NoopInternalComponent(element);
+ },
+ _replaceNodeWithMarkup: function () {},
+ _renderValidatedComponent: ReactCompositeComponent._renderValidatedComponentWithoutOwnerOrContext
+});
+
+function _batchedRender(renderer, element, context) {
+ var transaction = ReactUpdates.ReactReconcileTransaction.getPooled(true);
+ renderer._render(element, transaction, context);
+ ReactUpdates.ReactReconcileTransaction.release(transaction);
+}
+
+var ReactShallowRenderer = function () {
+ function ReactShallowRenderer() {
+ _classCallCheck(this, ReactShallowRenderer);
+
+ this._instance = null;
+ }
+
+ ReactShallowRenderer.prototype.getMountedInstance = function getMountedInstance() {
+ return this._instance ? this._instance._instance : null;
+ };
+
+ ReactShallowRenderer.prototype.render = function render(element, context) {
+ // Ensure we've done the default injections. This might not be true in the
+ // case of a simple test that only requires React and the TestUtils in
+ // conjunction with an inline-requires transform.
+ injectDefaults();
+
+ !React.isValidElement(element) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactShallowRenderer render(): Invalid component element.%s', typeof element === 'function' ? ' Instead of passing a component class, make sure to instantiate ' + 'it by passing it to React.createElement.' : '') : _prodInvariant('12', typeof element === 'function' ? ' Instead of passing a component class, make sure to instantiate ' + 'it by passing it to React.createElement.' : '') : void 0;
+ !(typeof element.type !== 'string') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactShallowRenderer render(): Shallow rendering works only with custom components, not primitives (%s). Instead of calling `.render(el)` and inspecting the rendered output, look at `el.props` directly instead.', element.type) : _prodInvariant('13', element.type) : void 0;
+
+ if (!context) {
+ context = emptyObject;
+ }
+ ReactUpdates.batchedUpdates(_batchedRender, this, element, context);
+
+ return this.getRenderOutput();
+ };
+
+ ReactShallowRenderer.prototype.getRenderOutput = function getRenderOutput() {
+ return this._instance && this._instance._renderedComponent && this._instance._renderedComponent._renderedOutput || null;
+ };
+
+ ReactShallowRenderer.prototype.unmount = function unmount() {
+ if (this._instance) {
+ ReactReconciler.unmountComponent(this._instance, false);
+ }
+ };
+
+ ReactShallowRenderer.prototype.unstable_batchedUpdates = function unstable_batchedUpdates(callback, bookkeeping) {
+ // This is used by Enzyme for fake-simulating events in shallow mode.
+ injectDefaults();
+ return ReactUpdates.batchedUpdates(callback, bookkeeping);
+ };
+
+ ReactShallowRenderer.prototype._render = function _render(element, transaction, context) {
+ if (this._instance) {
+ ReactReconciler.receiveComponent(this._instance, element, transaction, context);
+ } else {
+ var instance = new ShallowComponentWrapper(element);
+ ReactReconciler.mountComponent(instance, transaction, null, null, context, 0);
+ this._instance = instance;
+ }
+ };
+
+ return ReactShallowRenderer;
+}();
+
+ReactShallowRenderer.createRenderer = function () {
+ return new ReactShallowRenderer();
+};
+
+module.exports = ReactShallowRenderer; \ No newline at end of file