enzyme-adapter-react-16
Advanced tools
Comparing version 1.10.0 to 1.11.0
@@ -27,2 +27,4 @@ 'use strict'; | ||
var _package = require('react-test-renderer/package'); | ||
var _testUtils = require('react-dom/test-utils'); | ||
@@ -32,2 +34,6 @@ | ||
var _semver = require('semver'); | ||
var _semver2 = _interopRequireDefault(_semver); | ||
var _checkPropTypes2 = require('prop-types/checkPropTypes'); | ||
@@ -73,3 +79,6 @@ | ||
var is166 = is165 && !_react2['default'].unstable_AsyncMode; // 16.6+ | ||
var is168 = is166 && typeof _testUtils2['default'].act === 'function'; | ||
var hasShouldComponentUpdateBug = _semver2['default'].satisfies(_package.version, '< 16.8'); | ||
// Lazily populated if DOM is available. | ||
@@ -325,2 +334,13 @@ var FiberTags = null; | ||
function wrapAct(fn) { | ||
if (!is168) { | ||
return fn(); | ||
} | ||
var returnVal = void 0; | ||
_testUtils2['default'].act(function () { | ||
returnVal = fn(); | ||
}); | ||
return returnVal; | ||
} | ||
var ReactSixteenAdapter = function (_EnzymeAdapter) { | ||
@@ -343,3 +363,5 @@ _inherits(ReactSixteenAdapter, _EnzymeAdapter); | ||
}, | ||
getDerivedStateFromProps: true, | ||
getDerivedStateFromProps: { | ||
hasShouldComponentUpdateBug: hasShouldComponentUpdateBug | ||
}, | ||
getSnapshotBeforeUpdate: true, | ||
@@ -375,21 +397,23 @@ setState: { | ||
function render(el, context, callback) { | ||
if (instance === null) { | ||
var type = el.type, | ||
props = el.props, | ||
ref = el.ref; | ||
return wrapAct(function () { | ||
if (instance === null) { | ||
var type = el.type, | ||
props = el.props, | ||
ref = el.ref; | ||
var wrapperProps = (0, _object2['default'])({ | ||
Component: type, | ||
props: props, | ||
context: context | ||
}, ref && { ref: ref }); | ||
var ReactWrapperComponent = (0, _enzymeAdapterUtils.createMountWrapper)(el, (0, _object2['default'])({}, options, { adapter: adapter })); | ||
var wrappedEl = _react2['default'].createElement(ReactWrapperComponent, wrapperProps); | ||
instance = hydrateIn ? _reactDom2['default'].hydrate(wrappedEl, domNode) : _reactDom2['default'].render(wrappedEl, domNode); | ||
if (typeof callback === 'function') { | ||
callback(); | ||
var wrapperProps = (0, _object2['default'])({ | ||
Component: type, | ||
props: props, | ||
context: context | ||
}, ref && { ref: ref }); | ||
var ReactWrapperComponent = (0, _enzymeAdapterUtils.createMountWrapper)(el, (0, _object2['default'])({}, options, { adapter: adapter })); | ||
var wrappedEl = _react2['default'].createElement(ReactWrapperComponent, wrapperProps); | ||
instance = hydrateIn ? _reactDom2['default'].hydrate(wrappedEl, domNode) : _reactDom2['default'].render(wrappedEl, domNode); | ||
if (typeof callback === 'function') { | ||
callback(); | ||
} | ||
} else { | ||
instance.setChildProps(el.props, context, callback); | ||
} | ||
} else { | ||
instance.setChildProps(el.props, context, callback); | ||
} | ||
}); | ||
} | ||
@@ -462,72 +486,74 @@ | ||
function render(el, unmaskedContext) { | ||
cachedNode = el; | ||
/* eslint consistent-return: 0 */ | ||
if (typeof el.type === 'string') { | ||
isDOM = true; | ||
} else { | ||
isDOM = false; | ||
var Component = el.type; | ||
return wrapAct(function () { | ||
cachedNode = el; | ||
/* eslint consistent-return: 0 */ | ||
if (typeof el.type === 'string') { | ||
isDOM = true; | ||
} else { | ||
isDOM = false; | ||
var Component = el.type; | ||
var isStateful = Component.prototype && (Component.prototype.isReactComponent || Array.isArray(Component.__reactAutoBindPairs) // fallback for createClass components | ||
); | ||
var isStateful = Component.prototype && (Component.prototype.isReactComponent || Array.isArray(Component.__reactAutoBindPairs) // fallback for createClass components | ||
); | ||
var context = (0, _enzymeAdapterUtils.getMaskedContext)(Component.contextTypes, unmaskedContext); | ||
var context = (0, _enzymeAdapterUtils.getMaskedContext)(Component.contextTypes, unmaskedContext); | ||
if (!isStateful && (0, _reactIs.isMemo)(el.type)) { | ||
var InnerComp = el.type.type; | ||
var wrappedEl = (0, _object2['default'])(function () { | ||
return InnerComp.apply(undefined, arguments); | ||
}, // eslint-disable-line new-cap | ||
InnerComp); | ||
return (0, _enzymeAdapterUtils.withSetStateAllowed)(function () { | ||
return renderer.render((0, _object2['default'])({}, el, { type: wrappedEl }), context); | ||
}); | ||
} | ||
if (!isStateful && (0, _reactIs.isMemo)(el.type)) { | ||
var InnerComp = el.type.type; | ||
var wrappedEl = (0, _object2['default'])(function () { | ||
return InnerComp.apply(undefined, arguments); | ||
}, // eslint-disable-line new-cap | ||
InnerComp); | ||
return (0, _enzymeAdapterUtils.withSetStateAllowed)(function () { | ||
return renderer.render((0, _object2['default'])({}, el, { type: wrappedEl }), context); | ||
}); | ||
} | ||
if (!isStateful && typeof Component === 'function') { | ||
var _wrappedEl = (0, _object2['default'])(function () { | ||
return Component.apply(undefined, arguments); | ||
}, // eslint-disable-line new-cap | ||
Component); | ||
return (0, _enzymeAdapterUtils.withSetStateAllowed)(function () { | ||
return renderer.render((0, _object2['default'])({}, el, { type: _wrappedEl }), context); | ||
}); | ||
} | ||
if (isStateful) { | ||
// fix react bug; see implementation of `getEmptyStateValue` | ||
var emptyStateValue = getEmptyStateValue(); | ||
if (emptyStateValue) { | ||
Object.defineProperty(Component.prototype, 'state', { | ||
configurable: true, | ||
enumerable: true, | ||
get: function () { | ||
function get() { | ||
return null; | ||
} | ||
if (!isStateful && typeof Component === 'function') { | ||
var _wrappedEl = (0, _object2['default'])(function () { | ||
return Component.apply(undefined, arguments); | ||
}, // eslint-disable-line new-cap | ||
Component); | ||
return (0, _enzymeAdapterUtils.withSetStateAllowed)(function () { | ||
return renderer.render((0, _object2['default'])({}, el, { type: _wrappedEl }), context); | ||
}); | ||
} | ||
if (isStateful) { | ||
// fix react bug; see implementation of `getEmptyStateValue` | ||
var emptyStateValue = getEmptyStateValue(); | ||
if (emptyStateValue) { | ||
Object.defineProperty(Component.prototype, 'state', { | ||
configurable: true, | ||
enumerable: true, | ||
get: function () { | ||
function get() { | ||
return null; | ||
} | ||
return get; | ||
}(), | ||
set: function () { | ||
function set(value) { | ||
if (value !== emptyStateValue) { | ||
Object.defineProperty(this, 'state', { | ||
configurable: true, | ||
enumerable: true, | ||
value: value, | ||
writable: true | ||
}); | ||
return get; | ||
}(), | ||
set: function () { | ||
function set(value) { | ||
if (value !== emptyStateValue) { | ||
Object.defineProperty(this, 'state', { | ||
configurable: true, | ||
enumerable: true, | ||
value: value, | ||
writable: true | ||
}); | ||
} | ||
return true; | ||
} | ||
return true; | ||
} | ||
return set; | ||
}() | ||
}); | ||
return set; | ||
}() | ||
}); | ||
} | ||
} | ||
return (0, _enzymeAdapterUtils.withSetStateAllowed)(function () { | ||
return renderer.render(el, context); | ||
}); | ||
} | ||
return (0, _enzymeAdapterUtils.withSetStateAllowed)(function () { | ||
return renderer.render(el, context); | ||
}); | ||
} | ||
}); | ||
} | ||
@@ -534,0 +560,0 @@ |
{ | ||
"name": "enzyme-adapter-react-16", | ||
"version": "1.10.0", | ||
"version": "1.11.0", | ||
"description": "JavaScript Testing utilities for React", | ||
@@ -38,8 +38,9 @@ "homepage": "http://airbnb.io/enzyme/", | ||
"dependencies": { | ||
"enzyme-adapter-utils": "^1.10.0", | ||
"enzyme-adapter-utils": "^1.10.1", | ||
"object.assign": "^4.1.0", | ||
"object.values": "^1.1.0", | ||
"prop-types": "^15.6.2", | ||
"react-is": "^16.7.0", | ||
"react-test-renderer": "^16.0.0-0" | ||
"prop-types": "^15.7.2", | ||
"react-is": "^16.8.4", | ||
"react-test-renderer": "^16.0.0-0", | ||
"semver": "^5.6.0" | ||
}, | ||
@@ -56,3 +57,3 @@ "peerDependencies": { | ||
"enzyme": "^3.0.0", | ||
"eslint": "^5.13.0", | ||
"eslint": "^5.15.1", | ||
"eslint-config-airbnb": "^17.1.0", | ||
@@ -59,0 +60,0 @@ "eslint-plugin-import": "^2.16.0", |
@@ -8,4 +8,6 @@ /* eslint no-use-before-define: 0 */ | ||
import ShallowRenderer from 'react-test-renderer/shallow'; | ||
import { version as testRendererVersion } from 'react-test-renderer/package'; | ||
// eslint-disable-next-line import/no-unresolved | ||
import TestUtils from 'react-dom/test-utils'; | ||
import semver from 'semver'; | ||
import checkPropTypes from 'prop-types/checkPropTypes'; | ||
@@ -54,3 +56,6 @@ import { | ||
const is166 = is165 && !React.unstable_AsyncMode; // 16.6+ | ||
const is168 = is166 && typeof TestUtils.act === 'function'; | ||
const hasShouldComponentUpdateBug = semver.satisfies(testRendererVersion, '< 16.8'); | ||
// Lazily populated if DOM is available. | ||
@@ -284,2 +289,11 @@ let FiberTags = null; | ||
function wrapAct(fn) { | ||
if (!is168) { | ||
return fn(); | ||
} | ||
let returnVal; | ||
TestUtils.act(() => { returnVal = fn(); }); | ||
return returnVal; | ||
} | ||
class ReactSixteenAdapter extends EnzymeAdapter { | ||
@@ -298,3 +312,5 @@ constructor() { | ||
}, | ||
getDerivedStateFromProps: true, | ||
getDerivedStateFromProps: { | ||
hasShouldComponentUpdateBug, | ||
}, | ||
getSnapshotBeforeUpdate: true, | ||
@@ -323,21 +339,23 @@ setState: { | ||
render(el, context, callback) { | ||
if (instance === null) { | ||
const { type, props, ref } = el; | ||
const wrapperProps = { | ||
Component: type, | ||
props, | ||
context, | ||
...(ref && { ref }), | ||
}; | ||
const ReactWrapperComponent = createMountWrapper(el, { ...options, adapter }); | ||
const wrappedEl = React.createElement(ReactWrapperComponent, wrapperProps); | ||
instance = hydrateIn | ||
? ReactDOM.hydrate(wrappedEl, domNode) | ||
: ReactDOM.render(wrappedEl, domNode); | ||
if (typeof callback === 'function') { | ||
callback(); | ||
return wrapAct(() => { | ||
if (instance === null) { | ||
const { type, props, ref } = el; | ||
const wrapperProps = { | ||
Component: type, | ||
props, | ||
context, | ||
...(ref && { ref }), | ||
}; | ||
const ReactWrapperComponent = createMountWrapper(el, { ...options, adapter }); | ||
const wrappedEl = React.createElement(ReactWrapperComponent, wrapperProps); | ||
instance = hydrateIn | ||
? ReactDOM.hydrate(wrappedEl, domNode) | ||
: ReactDOM.render(wrappedEl, domNode); | ||
if (typeof callback === 'function') { | ||
callback(); | ||
} | ||
} else { | ||
instance.setChildProps(el.props, context, callback); | ||
} | ||
} else { | ||
instance.setChildProps(el.props, context, callback); | ||
} | ||
}); | ||
}, | ||
@@ -386,59 +404,61 @@ unmount() { | ||
render(el, unmaskedContext) { | ||
cachedNode = el; | ||
/* eslint consistent-return: 0 */ | ||
if (typeof el.type === 'string') { | ||
isDOM = true; | ||
} else { | ||
isDOM = false; | ||
const { type: Component } = el; | ||
return wrapAct(() => { | ||
cachedNode = el; | ||
/* eslint consistent-return: 0 */ | ||
if (typeof el.type === 'string') { | ||
isDOM = true; | ||
} else { | ||
isDOM = false; | ||
const { type: Component } = el; | ||
const isStateful = Component.prototype && ( | ||
Component.prototype.isReactComponent | ||
|| Array.isArray(Component.__reactAutoBindPairs) // fallback for createClass components | ||
); | ||
const isStateful = Component.prototype && ( | ||
Component.prototype.isReactComponent | ||
|| Array.isArray(Component.__reactAutoBindPairs) // fallback for createClass components | ||
); | ||
const context = getMaskedContext(Component.contextTypes, unmaskedContext); | ||
const context = getMaskedContext(Component.contextTypes, unmaskedContext); | ||
if (!isStateful && isMemo(el.type)) { | ||
const InnerComp = el.type.type; | ||
const wrappedEl = Object.assign( | ||
(...args) => InnerComp(...args), // eslint-disable-line new-cap | ||
InnerComp, | ||
); | ||
return withSetStateAllowed(() => renderer.render({ ...el, type: wrappedEl }, context)); | ||
} | ||
if (!isStateful && isMemo(el.type)) { | ||
const InnerComp = el.type.type; | ||
const wrappedEl = Object.assign( | ||
(...args) => InnerComp(...args), // eslint-disable-line new-cap | ||
InnerComp, | ||
); | ||
return withSetStateAllowed(() => renderer.render({ ...el, type: wrappedEl }, context)); | ||
} | ||
if (!isStateful && typeof Component === 'function') { | ||
const wrappedEl = Object.assign( | ||
(...args) => Component(...args), // eslint-disable-line new-cap | ||
Component, | ||
); | ||
return withSetStateAllowed(() => renderer.render({ ...el, type: wrappedEl }, context)); | ||
} | ||
if (isStateful) { | ||
// fix react bug; see implementation of `getEmptyStateValue` | ||
const emptyStateValue = getEmptyStateValue(); | ||
if (emptyStateValue) { | ||
Object.defineProperty(Component.prototype, 'state', { | ||
configurable: true, | ||
enumerable: true, | ||
get() { | ||
return null; | ||
}, | ||
set(value) { | ||
if (value !== emptyStateValue) { | ||
Object.defineProperty(this, 'state', { | ||
configurable: true, | ||
enumerable: true, | ||
value, | ||
writable: true, | ||
}); | ||
} | ||
return true; | ||
}, | ||
}); | ||
if (!isStateful && typeof Component === 'function') { | ||
const wrappedEl = Object.assign( | ||
(...args) => Component(...args), // eslint-disable-line new-cap | ||
Component, | ||
); | ||
return withSetStateAllowed(() => renderer.render({ ...el, type: wrappedEl }, context)); | ||
} | ||
if (isStateful) { | ||
// fix react bug; see implementation of `getEmptyStateValue` | ||
const emptyStateValue = getEmptyStateValue(); | ||
if (emptyStateValue) { | ||
Object.defineProperty(Component.prototype, 'state', { | ||
configurable: true, | ||
enumerable: true, | ||
get() { | ||
return null; | ||
}, | ||
set(value) { | ||
if (value !== emptyStateValue) { | ||
Object.defineProperty(this, 'state', { | ||
configurable: true, | ||
enumerable: true, | ||
value, | ||
writable: true, | ||
}); | ||
} | ||
return true; | ||
}, | ||
}); | ||
} | ||
} | ||
return withSetStateAllowed(() => renderer.render(el, context)); | ||
} | ||
return withSetStateAllowed(() => renderer.render(el, context)); | ||
} | ||
}); | ||
}, | ||
@@ -445,0 +465,0 @@ unmount() { |
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
73219
1667
10
+ Addedsemver@^5.6.0
+ Addedsemver@5.7.2(transitive)
Updatedenzyme-adapter-utils@^1.10.1
Updatedprop-types@^15.7.2
Updatedreact-is@^16.8.4