UNPKG

@chalbert/enzyme-adapter-react-18

Version:
1,185 lines (973 loc) 122 kB
"use strict"; var _react = _interopRequireDefault(require("react")); var _reactDom = require("react-dom"); var _client = require("react-dom/client"); var _server = _interopRequireDefault(require("react-dom/server")); var _shallow = _interopRequireDefault(require("react-test-renderer/shallow")); var _testUtils = _interopRequireDefault(require("react-dom/test-utils")); var _checkPropTypes2 = _interopRequireDefault(require("prop-types/checkPropTypes")); var _has = _interopRequireDefault(require("has")); var _reactIs = require("react-is"); var _enzyme = require("enzyme"); var _Utils = require("enzyme/build/Utils"); var _enzymeShallowEqual = _interopRequireDefault(require("enzyme-shallow-equal")); var _enzymeAdapterUtils = require("@chalbert/enzyme-adapter-utils"); var _findCurrentFiberUsingSlowPath = _interopRequireDefault(require("./findCurrentFiberUsingSlowPath")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } // Lazily populated if DOM is available. function nodeAndSiblingsArray(nodeWithSibling) { var array = []; var node = nodeWithSibling; while (node != null) { array.push(node); node = node.sibling; } return array; } function flatten(arr) { var result = []; var stack = [{ i: 0, array: arr }]; while (stack.length) { var n = stack.pop(); while (n.i < n.array.length) { var el = n.array[n.i]; n.i += 1; if (Array.isArray(el)) { stack.push(n); stack.push({ i: 0, array: el }); break; } result.push(el); } } return result; } function nodeTypeFromType(type) { if (type === _reactIs.Portal) { return 'portal'; } return (0, _enzymeAdapterUtils.nodeTypeFromType)(type); } function isMemo(type) { return (0, _enzymeAdapterUtils.compareNodeTypeOf)(type, _reactIs.Memo); } function isLazy(type) { return (0, _enzymeAdapterUtils.compareNodeTypeOf)(type, _reactIs.Lazy); } function unmemoType(type) { return isMemo(type) ? type.type : type; } function checkIsSuspenseAndCloneElement(el, _ref) { var suspenseFallback = _ref.suspenseFallback; if (!(0, _reactIs.isSuspense)(el)) { return el; } var children = el.props.children; if (suspenseFallback) { var fallback = el.props.fallback; children = replaceLazyWithFallback(children, fallback); } var FakeSuspenseWrapper = function FakeSuspenseWrapper(props) { return /*#__PURE__*/_react["default"].createElement(el.type, _objectSpread(_objectSpread({}, el.props), props), children); }; return /*#__PURE__*/_react["default"].createElement(FakeSuspenseWrapper, null, children); } function elementToTree(el) { if (!(0, _reactIs.isPortal)(el)) { return (0, _enzymeAdapterUtils.elementToTree)(el, elementToTree); } var children = el.children, containerInfo = el.containerInfo; var props = { children: children, containerInfo: containerInfo }; return { nodeType: 'portal', type: _reactIs.Portal, props: props, key: (0, _enzymeAdapterUtils.ensureKeyOrUndefined)(el.key), ref: el.ref || null, instance: null, rendered: elementToTree(el.children) }; } function _toTree(vnode) { if (vnode == null) { return null; } // TODO(lmr): I'm not really sure I understand whether or not this is what // i should be doing, or if this is a hack for something i'm doing wrong // somewhere else. Should talk to sebastian about this perhaps var node = (0, _findCurrentFiberUsingSlowPath["default"])(vnode); switch (node.tag) { case _enzymeAdapterUtils.TAG_CODES.HostRoot: return childrenToTree(node.child); case _enzymeAdapterUtils.TAG_CODES.HostPortal: { var containerInfo = node.stateNode.containerInfo, children = node.memoizedProps; var props = { containerInfo: containerInfo, children: children }; return { nodeType: 'portal', type: _reactIs.Portal, props: props, key: (0, _enzymeAdapterUtils.ensureKeyOrUndefined)(node.key), ref: node.ref, instance: null, rendered: childrenToTree(node.child) }; } case _enzymeAdapterUtils.TAG_CODES.IndeterminateComponent: return { nodeType: 'indeterminate', type: node.type, props: _objectSpread({}, node.memoizedProps), key: (0, _enzymeAdapterUtils.ensureKeyOrUndefined)(node.key), ref: node.ref, instance: node.stateNode, rendered: childrenToTree(node.child) }; case _enzymeAdapterUtils.TAG_CODES.IncompleteClassComponent: case _enzymeAdapterUtils.TAG_CODES.ClassComponent: return { nodeType: 'class', type: node.type, props: _objectSpread({}, node.memoizedProps), key: (0, _enzymeAdapterUtils.ensureKeyOrUndefined)(node.key), ref: node.ref, instance: node.stateNode, rendered: childrenToTree(node.child) }; case _enzymeAdapterUtils.TAG_CODES.FunctionComponent: return { nodeType: 'function', type: node.type, props: _objectSpread({}, node.memoizedProps), key: (0, _enzymeAdapterUtils.ensureKeyOrUndefined)(node.key), ref: node.ref, instance: null, rendered: childrenToTree(node.child) }; case _enzymeAdapterUtils.TAG_CODES.MemoClass: return { nodeType: 'class', type: node.elementType.type, props: _objectSpread({}, node.memoizedProps), key: (0, _enzymeAdapterUtils.ensureKeyOrUndefined)(node.key), ref: node.ref, instance: node.stateNode, rendered: childrenToTree(node.child.child) }; case _enzymeAdapterUtils.TAG_CODES.MemoSFC: { var renderedNodes = flatten(nodeAndSiblingsArray(node.child).map(_toTree)); if (renderedNodes.length === 0) { renderedNodes = [node.memoizedProps.children]; } return { nodeType: 'function', type: node.elementType, props: _objectSpread({}, node.memoizedProps), key: (0, _enzymeAdapterUtils.ensureKeyOrUndefined)(node.key), ref: node.ref, instance: null, rendered: renderedNodes }; } case _enzymeAdapterUtils.TAG_CODES.HostComponent: { var _renderedNodes = flatten(nodeAndSiblingsArray(node.child).map(_toTree)); if (_renderedNodes.length === 0) { _renderedNodes = [node.memoizedProps.children]; } return { nodeType: 'host', type: node.type, props: _objectSpread({}, node.memoizedProps), key: (0, _enzymeAdapterUtils.ensureKeyOrUndefined)(node.key), ref: node.ref, instance: node.stateNode, rendered: _renderedNodes }; } case _enzymeAdapterUtils.TAG_CODES.HostText: return node.memoizedProps; case _enzymeAdapterUtils.TAG_CODES.DehydratedFragment: case _enzymeAdapterUtils.TAG_CODES.Fragment: case _enzymeAdapterUtils.TAG_CODES.Mode: case _enzymeAdapterUtils.TAG_CODES.ContextProvider: case _enzymeAdapterUtils.TAG_CODES.ContextConsumer: return childrenToTree(node.child); case _enzymeAdapterUtils.TAG_CODES.Profiler: case _enzymeAdapterUtils.TAG_CODES.MemoComponent: case _enzymeAdapterUtils.TAG_CODES.SimpleMemoComponent: case _enzymeAdapterUtils.TAG_CODES.ForwardRef: { return { nodeType: 'function', type: node.type, props: _objectSpread({}, node.pendingProps), key: (0, _enzymeAdapterUtils.ensureKeyOrUndefined)(node.key), ref: node.ref, instance: null, rendered: childrenToTree(node.child) }; } case _enzymeAdapterUtils.TAG_CODES.SuspenseListComponent: case _enzymeAdapterUtils.TAG_CODES.SuspenseComponent: { var _children = flatten(nodeAndSiblingsArray(node.child.child).map(_toTree)); return { nodeType: 'function', type: _reactIs.Suspense, props: _objectSpread({}, node.memoizedProps), key: (0, _enzymeAdapterUtils.ensureKeyOrUndefined)(node.key), ref: node.ref, instance: null, rendered: _children.length ? _children : childrenToTree(node.child) }; } case _enzymeAdapterUtils.TAG_CODES.LazyComponent: return childrenToTree(node.child); case _enzymeAdapterUtils.TAG_CODES.ScopeComponent: case _enzymeAdapterUtils.TAG_CODES.OffscreenComponent: case _enzymeAdapterUtils.TAG_CODES.LegacyHiddenComponent: case _enzymeAdapterUtils.TAG_CODES.CacheComponent: case _enzymeAdapterUtils.TAG_CODES.TracingMarkerComponent: return _toTree(node.child); default: throw new Error("Enzyme Internal Error: unknown node with tag ".concat(node.tag)); } } function childrenToTree(node) { if (!node) { return null; } var children = nodeAndSiblingsArray(node); if (children.length === 0) { return null; } if (children.length === 1) { return _toTree(children[0]); } return flatten(children.map(_toTree)); } function _nodeToHostNode(_node) { // NOTE(lmr): node could be a function component // which wont have an instance prop, but we can get the // host node associated with its return value at that point. // Although this breaks down if the return value is an array, // as is possible with React 16. var node = _node; while (node && !Array.isArray(node) && node.instance === null) { node = node.rendered; } // if the SFC returned null effectively, there is no host node. if (!node) { return null; } var mapper = function mapper(item) { if (item && item.instance) return (0, _reactDom.findDOMNode)(item.instance); return null; }; if (Array.isArray(node)) { return node.map(mapper); } if (Array.isArray(node.rendered) && node.nodeType === 'class') { return node.rendered.map(mapper); } return mapper(node); } function replaceLazyWithFallback(node, fallback) { if (!node) { return null; } if (Array.isArray(node)) { return node.map(function (el) { return replaceLazyWithFallback(el, fallback); }); } if (isLazy(node.type)) { // console.log('-----------------replaceLazyWithFallback'); return fallback; } return _objectSpread(_objectSpread({}, node), {}, { props: _objectSpread(_objectSpread({}, node.props), {}, { children: replaceLazyWithFallback(node.props.children, fallback) }) }); } function getEmptyStateValue() { // this handles a bug in React 16.0 - 16.2 // see https://github.com/facebook/react/commit/39be83565c65f9c522150e52375167568a2a1459 // also see https://github.com/facebook/react/pull/11965 var EmptyState = /*#__PURE__*/function (_React$Component) { _inherits(EmptyState, _React$Component); var _super = _createSuper(EmptyState); function EmptyState() { _classCallCheck(this, EmptyState); return _super.apply(this, arguments); } _createClass(EmptyState, [{ key: "render", value: function render() { return null; } }]); return EmptyState; }(_react["default"].Component); var testRenderer = new _shallow["default"](); testRenderer.render( /*#__PURE__*/_react["default"].createElement(EmptyState)); return testRenderer._instance.state; } function wrapAct(fn) { var returnVal; _testUtils["default"].act(function () { returnVal = fn(); }); return returnVal; } function getProviderDefaultValue(Provider) { // React stores references to the Provider's defaultValue differently across versions. if ('_defaultValue' in Provider._context) { return Provider._context._defaultValue; } if ('_currentValue' in Provider._context) { return Provider._context._currentValue; } throw new Error('Enzyme Internal Error: can’t figure out how to get Provider’s default value'); } function makeFakeElement(type) { return { $$typeof: _reactIs.Element, type: type }; } function isStateful(Component) { return Component.prototype && (Component.prototype.isReactComponent || Array.isArray(Component.__reactAutoBindPairs)) // fallback for createClass components ; } var ReactEighteenAdapter = /*#__PURE__*/function (_EnzymeAdapter) { _inherits(ReactEighteenAdapter, _EnzymeAdapter); var _super2 = _createSuper(ReactEighteenAdapter); function ReactEighteenAdapter() { var _this; _classCallCheck(this, ReactEighteenAdapter); _this = _super2.call(this); // Monkey patching so we don't have to wrap in 'act' each time var _ReactWrapper$prototy = _enzyme.ReactWrapper.prototype, setProps = _ReactWrapper$prototy.setProps, setState = _ReactWrapper$prototy.setState; _enzyme.ReactWrapper.prototype.setProps = function () { var _this2 = this; for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return wrapAct(function () { return setProps.apply(_this2, args); }); }; _enzyme.ReactWrapper.prototype.setState = function () { var _this3 = this; for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { args[_key2] = arguments[_key2]; } return wrapAct(function () { return setState.apply(_this3, args); }); }; var lifecycles = _this.options.lifecycles; _this.options = _objectSpread(_objectSpread({}, _this.options), {}, { enableComponentDidUpdateOnSetState: true, // TODO: remove, semver-major legacyContextMode: 'parent', lifecycles: _objectSpread(_objectSpread({}, lifecycles), {}, { componentDidUpdate: { onSetState: true }, getDerivedStateFromProps: { hasShouldComponentUpdateBug: false }, getSnapshotBeforeUpdate: true, setState: { skipsComponentDidUpdateOnNullish: true }, getChildContext: { calledByRenderer: false }, getDerivedStateFromError: true }) }); return _this; } _createClass(ReactEighteenAdapter, [{ key: "createMountRenderer", value: function createMountRenderer(options) { (0, _enzymeAdapterUtils.assertDomAvailable)('mount'); if ((0, _has["default"])(options, 'suspenseFallback')) { throw new TypeError('`suspenseFallback` is not supported by the `mount` renderer'); } var attachTo = options.attachTo, hydrateIn = options.hydrateIn, wrappingComponentProps = options.wrappingComponentProps; var domNode = hydrateIn || attachTo || global.document.createElement('div'); var instance = null; var adapter = this; var root; return { render: function render(el, context, callback) { return wrapAct(function () { if (instance === null) { var type = el.type, props = el.props, ref = el.ref; var wrapperProps = _objectSpread({ Component: type, props: props, wrappingComponentProps: wrappingComponentProps, context: context }, ref && { refProp: ref }); var wrappedEl; var ReactWrapperComponent = (0, _enzymeAdapterUtils.createMountWrapper)(el, _objectSpread(_objectSpread({}, options), {}, { adapter: adapter })); wrappedEl = /*#__PURE__*/_react["default"].createElement(ReactWrapperComponent, wrapperProps); root = hydrateIn ? (0, _client.hydrateRoot)(domNode, wrappedEl) : (0, _client.createRoot)(domNode); (0, _reactDom.flushSync)(function () { root.render(wrappedEl); }); instance = (0, _enzymeAdapterUtils.getPublicRootInstance)(root); if (typeof callback === 'function') { callback(); } } else { instance.setChildProps(el.props, context, callback); } }); }, unmount: function unmount() { wrapAct(function () { var _root; (_root = root) === null || _root === void 0 ? void 0 : _root.unmount(); }); instance = null; }, getNode: function getNode() { if (!instance) { return null; } return (0, _enzymeAdapterUtils.getNodeFromRootFinder)(adapter.isCustomComponent, _toTree(instance._reactInternals), options); }, simulateError: function simulateError(nodeHierarchy, rootNode, error) { var isErrorBoundary = function isErrorBoundary(_ref2) { var elInstance = _ref2.instance, type = _ref2.type; if (type && type.getDerivedStateFromError) { return true; } return elInstance && elInstance.componentDidCatch; }; var _ref3 = nodeHierarchy.find(isErrorBoundary) || {}, catchingInstance = _ref3.instance, catchingType = _ref3.type; _testUtils["default"].act(function () { (0, _enzymeAdapterUtils.simulateError)(error, catchingInstance, rootNode, nodeHierarchy, nodeTypeFromType, adapter.displayNameOfNode, catchingType); }); }, simulateEvent: function simulateEvent(node, event, mock) { var mappedEvent = (0, _enzymeAdapterUtils.mapNativeEventNames)(event); var eventFn = _testUtils["default"].Simulate[mappedEvent]; if (!eventFn) { throw new TypeError("ReactWrapper::simulate() event '".concat(event, "' does not exist")); } wrapAct(function () { eventFn(adapter.nodeToHostNode(node), mock); }); }, batchedUpdates: function batchedUpdates(fn) { return fn(); }, getWrappingComponentRenderer: function getWrappingComponentRenderer() { return _objectSpread(_objectSpread({}, this), (0, _enzymeAdapterUtils.getWrappingComponentMountRenderer)({ toTree: function toTree(inst) { return _toTree(inst._reactInternals); }, getMountWrapperInstance: function getMountWrapperInstance() { return instance; } })); }, wrapInvoke: wrapAct }; } }, { key: "createShallowRenderer", value: function createShallowRenderer() { var _this4 = this; var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var adapter = this; var renderer = new _shallow["default"](); var suspenseFallback = options.suspenseFallback; if (typeof suspenseFallback !== 'undefined' && typeof suspenseFallback !== 'boolean') { throw TypeError('`options.suspenseFallback` should be boolean or undefined'); } var isDOM = false; var cachedNode = null; var lastComponent = null; var wrappedComponent = null; var sentinel = {}; // wrap memo components with a PureComponent, or a class component with sCU var wrapPureComponent = function wrapPureComponent(Component, compare) { if (lastComponent !== Component) { if (isStateful(Component)) { wrappedComponent = /*#__PURE__*/function (_Component) { _inherits(wrappedComponent, _Component); var _super3 = _createSuper(wrappedComponent); function wrappedComponent() { _classCallCheck(this, wrappedComponent); return _super3.apply(this, arguments); } return _createClass(wrappedComponent); }(Component); if (compare) { wrappedComponent.prototype.shouldComponentUpdate = function (nextProps) { return !compare(_this4.props, nextProps); }; } else { wrappedComponent.prototype.isPureReactComponent = true; } } else { var memoized = sentinel; var prevProps; wrappedComponent = function wrappedComponentFn(props) { var shouldUpdate = memoized === sentinel || (compare ? !compare(prevProps, props) : !(0, _enzymeShallowEqual["default"])(prevProps, props)); if (shouldUpdate) { for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) { args[_key3 - 1] = arguments[_key3]; } memoized = Component.apply(void 0, [_objectSpread(_objectSpread({}, Component.defaultProps), props)].concat(args)); prevProps = props; } return memoized; }; } Object.assign(wrappedComponent, Component, { displayName: adapter.displayNameOfNode({ type: Component }) }); lastComponent = Component; } return wrappedComponent; }; // Wrap functional components on versions prior to 16.5, // to avoid inadvertently pass a `this` instance to it. var wrapFunctionalComponent = function wrapFunctionalComponent(Component) { if ((0, _has["default"])(Component, 'defaultProps')) { if (lastComponent !== Component) { wrappedComponent = Object.assign(function (props) { for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) { args[_key4 - 1] = arguments[_key4]; } return Component.apply(void 0, [_objectSpread(_objectSpread({}, Component.defaultProps), props)].concat(args)); }, Component, { displayName: adapter.displayNameOfNode({ type: Component }) }); lastComponent = Component; } return wrappedComponent; } return Component; }; var renderElement = function renderElement(elConfig) { for (var _len5 = arguments.length, rest = new Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) { rest[_key5 - 1] = arguments[_key5]; } // console.log('**************** renderElement'); var renderedEl = renderer.render.apply(renderer, [elConfig].concat(rest)); var typeIsExisted = !!(renderedEl && renderedEl.type); if (typeIsExisted) { var clonedEl = checkIsSuspenseAndCloneElement(renderedEl, { suspenseFallback: suspenseFallback }); var elementIsChanged = clonedEl.type !== renderedEl.type; if (elementIsChanged) { return renderer.render.apply(renderer, [_objectSpread(_objectSpread({}, elConfig), {}, { type: clonedEl.type })].concat(rest)); } } return renderedEl; }; return { render: function render(el, unmaskedContext) { var _ref4 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, _ref4$providerValues = _ref4.providerValues, providerValues = _ref4$providerValues === void 0 ? new Map() : _ref4$providerValues; cachedNode = el; if (typeof el.type === 'string') { isDOM = true; } else if ((0, _reactIs.isContextProvider)(el)) { providerValues.set(el.type, el.props.value); var MockProvider = Object.assign(function (props) { return props.children; }, el.type); return (0, _enzymeAdapterUtils.withSetStateAllowed)(function () { return renderElement(_objectSpread(_objectSpread({}, el), {}, { type: MockProvider })); }); } else if ((0, _reactIs.isContextConsumer)(el)) { var Provider = adapter.getProviderFromConsumer(el.type); var value = providerValues.has(Provider) ? providerValues.get(Provider) : getProviderDefaultValue(Provider); var MockConsumer = Object.assign(function (props) { return props.children(value); }, el.type); return (0, _enzymeAdapterUtils.withSetStateAllowed)(function () { return renderElement(_objectSpread(_objectSpread({}, el), {}, { type: MockConsumer })); }); } else { isDOM = false; var renderedEl = el; if (isLazy(renderedEl)) { throw TypeError('`React.lazy` is not supported by shallow rendering.'); } renderedEl = checkIsSuspenseAndCloneElement(renderedEl, { suspenseFallback: suspenseFallback }); var _renderedEl = renderedEl, Component = _renderedEl.type; var context = (0, _enzymeAdapterUtils.getMaskedContext)(Component.contextTypes, unmaskedContext); if (isMemo(el.type)) { var _el$type = el.type, InnerComp = _el$type.type, compare = _el$type.compare; return (0, _enzymeAdapterUtils.withSetStateAllowed)(function () { return renderElement(_objectSpread(_objectSpread({}, el), {}, { type: wrapPureComponent(InnerComp, compare) }), context); }); } var isComponentStateful = isStateful(Component); if (!isComponentStateful && typeof Component === 'function') { return (0, _enzymeAdapterUtils.withSetStateAllowed)(function () { return renderElement(_objectSpread(_objectSpread({}, renderedEl), {}, { type: wrapFunctionalComponent(Component) }), context); }); } if (isComponentStateful) { if (renderer._instance && el.props === renderer._instance.props && !(0, _enzymeShallowEqual["default"])(context, renderer._instance.context)) { var _spyMethod = (0, _enzymeAdapterUtils.spyMethod)(renderer, '_updateClassComponent', function (originalMethod) { return function _updateClassComponent() { var props = renderer._instance.props; var clonedProps = _objectSpread({}, props); renderer._instance.props = clonedProps; for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) { args[_key6] = arguments[_key6]; } var result = originalMethod.apply(renderer, args); renderer._instance.props = props; restore(); return result; }; }), restore = _spyMethod.restore; } // fix react bug; see implementation of `getEmptyStateValue` var emptyStateValue = getEmptyStateValue(); if (emptyStateValue) { Object.defineProperty(Component.prototype, 'state', { configurable: true, enumerable: true, get: function get() { return null; }, set: function set(value) { if (value !== emptyStateValue) { Object.defineProperty(this, 'state', { configurable: true, enumerable: true, value: value, writable: true }); } } }); } } return (0, _enzymeAdapterUtils.withSetStateAllowed)(function () { return renderElement(renderedEl, context); }); } }, unmount: function unmount() { renderer.unmount(); }, getNode: function getNode() { if (isDOM) { return elementToTree(cachedNode); } var output = renderer.getRenderOutput(); return { nodeType: nodeTypeFromType(cachedNode.type), type: cachedNode.type, props: cachedNode.props, key: (0, _enzymeAdapterUtils.ensureKeyOrUndefined)(cachedNode.key), ref: cachedNode.ref, instance: renderer._instance, rendered: Array.isArray(output) ? flatten(output).map(function (el) { return elementToTree(el); }) : elementToTree(output) }; }, simulateError: function simulateError(nodeHierarchy, rootNode, error) { (0, _enzymeAdapterUtils.simulateError)(error, renderer._instance, cachedNode, nodeHierarchy.concat(cachedNode), nodeTypeFromType, adapter.displayNameOfNode, cachedNode.type); }, simulateEvent: function simulateEvent(node, event) { for (var _len7 = arguments.length, args = new Array(_len7 > 2 ? _len7 - 2 : 0), _key7 = 2; _key7 < _len7; _key7++) { args[_key7 - 2] = arguments[_key7]; } var handler = node.props[(0, _enzymeAdapterUtils.propFromEvent)(event)]; if (handler) { (0, _enzymeAdapterUtils.withSetStateAllowed)(function () { // TODO(lmr): create/use synthetic events // TODO(lmr): emulate React's event propagation handler.apply(void 0, args); }); } }, batchedUpdates: function batchedUpdates(fn) { return fn(); }, checkPropTypes: function checkPropTypes(typeSpecs, values, location, hierarchy) { return (0, _checkPropTypes2["default"])(typeSpecs, values, location, (0, _enzymeAdapterUtils.displayNameOfNode)(cachedNode), function () { return (0, _enzymeAdapterUtils.getComponentStack)(hierarchy.concat([cachedNode])); }); } }; } }, { key: "createStringRenderer", value: function createStringRenderer(options) { if ((0, _has["default"])(options, 'suspenseFallback')) { throw new TypeError('`suspenseFallback` should not be specified in options of string renderer'); } return { render: function render(el, context) { if (options.context && (el.type.contextTypes || options.childContextTypes)) { var childContextTypes = _objectSpread(_objectSpread({}, el.type.contextTypes || {}), options.childContextTypes); var ContextWrapper = (0, _enzymeAdapterUtils.createRenderWrapper)(el, context, childContextTypes); return _server["default"].renderToStaticMarkup( /*#__PURE__*/_react["default"].createElement(ContextWrapper)); } return _server["default"].renderToStaticMarkup(el); } }; } // Provided a bag of options, return an `EnzymeRenderer`. Some options can be implementation // specific, like `attach` etc. for React, but not part of this interface explicitly. }, { key: "createRenderer", value: function createRenderer(options) { switch (options.mode) { case _enzyme.EnzymeAdapter.MODES.MOUNT: return this.createMountRenderer(options); case _enzyme.EnzymeAdapter.MODES.SHALLOW: return this.createShallowRenderer(options); case _enzyme.EnzymeAdapter.MODES.STRING: return this.createStringRenderer(options); default: throw new Error("Enzyme Internal Error: Unrecognized mode: ".concat(options.mode)); } } }, { key: "wrap", value: function wrap(element) { return (0, _enzymeAdapterUtils.wrap)(element); } // converts an RSTNode to the corresponding JSX Pragma Element. This will be needed // in order to implement the `Wrapper.mount()` and `Wrapper.shallow()` methods, but should // be pretty straightforward for people to implement. }, { key: "nodeToElement", value: function nodeToElement(node) { if (!node || _typeof(node) !== 'object') return null; var type = node.type; return /*#__PURE__*/_react["default"].createElement(unmemoType(type), (0, _enzymeAdapterUtils.propsWithKeysAndRef)(node)); } }, { key: "matchesElementType", value: function matchesElementType(node, matchingType) { if (!node) { return node; } var type = node.type; return unmemoType(type) === unmemoType(matchingType); } }, { key: "elementToNode", value: function elementToNode(element) { return elementToTree(element); } }, { key: "nodeToHostNode", value: function nodeToHostNode(node) { var supportsArray = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var nodes = _nodeToHostNode(node); if (Array.isArray(nodes) && !supportsArray) { // get the first non-null node return nodes.filter(Boolean)[0]; } return nodes; } }, { key: "displayNameOfNode", value: function displayNameOfNode(node) { if (!node) return null; var type = node.type, $$typeof = node.$$typeof; var adapter = this; var nodeType = type || $$typeof; // newer node types may be undefined, so only test if the nodeType exists if (nodeType) { switch (nodeType) { case _reactIs.ConcurrentMode || NaN: return 'ConcurrentMode'; case _reactIs.Fragment || NaN: return 'Fragment'; case _reactIs.StrictMode || NaN: return 'StrictMode'; case _reactIs.Profiler || NaN: return 'Profiler'; case _reactIs.Portal || NaN: return 'Portal'; case _reactIs.Suspense || NaN: return 'Suspense'; default: } } var $$typeofType = type && type.$$typeof; switch ($$typeofType) { case _reactIs.ContextConsumer || NaN: return 'ContextConsumer'; case _reactIs.ContextProvider || NaN: return 'ContextProvider'; case _reactIs.Memo || NaN: { var nodeName = (0, _enzymeAdapterUtils.displayNameOfNode)(node); return typeof nodeName === 'string' ? nodeName : "Memo(".concat(adapter.displayNameOfNode(type), ")"); } case _reactIs.ForwardRef || NaN: { if (type.displayName) { return type.displayName; } var name = adapter.displayNameOfNode({ type: type.render }); return name ? "ForwardRef(".concat(name, ")") : 'ForwardRef'; } case _reactIs.Lazy || NaN: { return 'lazy'; } default: return (0, _enzymeAdapterUtils.displayNameOfNode)(node); } } }, { key: "isValidElement", value: function isValidElement(element) { return (0, _reactIs.isElement)(element); } }, { key: "isValidElementType", value: function isValidElementType(object) { return !!object && (0, _reactIs.isValidElementType)(object); } }, { key: "isFragment", value: function isFragment(fragment) { return (0, _Utils.typeOfNode)(fragment) === _reactIs.Fragment; } }, { key: "isCustomComponent", value: function isCustomComponent(type) { var fakeElement = makeFakeElement(type); return !!type && (typeof type === 'function' || (0, _reactIs.isForwardRef)(fakeElement) || (0, _reactIs.isContextProvider)(fakeElement) || (0, _reactIs.isContextConsumer)(fakeElement) || (0, _reactIs.isSuspense)(fakeElement)); } }, { key: "isContextConsumer", value: function isContextConsumer(type) { return !!type && (0, _reactIs.isContextConsumer)(makeFakeElement(type)); } }, { key: "isCustomComponentElement", value: function isCustomComponentElement(inst) { if (!inst || !this.isValidElement(inst)) { return false; } return this.isCustomComponent(inst.type); } }, { key: "getProviderFromConsumer", value: function getProviderFromConsumer(Consumer) { // React stores references to the Provider on a Consumer differently across versions. if (Consumer) { var Provider; if (Consumer._context) { // check this first, to avoid a deprecation warning Provider = Consumer._context.Provider; } else if (Consumer.Provider) { Provider = Consumer.Provider; } if (Provider) { return Provider; } } throw new Error('Enzyme Internal Error: can’t figure out how to get Provider from Consumer'); } }, { key: "createElement", value: function createElement() { for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) { args[_key8] = arguments[_key8]; } return wrapAct(function () { return /*#__PURE__*/_react["default"].createElement.apply(_react["default"], args); }); } }, { key: "wrapWithWrappingComponent", value: function wrapWithWrappingComponent(node, options) { return { RootFinder: _enzymeAdapterUtils.RootFinder, node: (0, _enzymeAdapterUtils.wrapWithWrappingComponent)(_react["default"].createElement, node, options) }; } }]); return ReactEighteenAdapter; }(_enzyme.EnzymeAdapter); module.exports = ReactEighteenAdapter; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJub2RlQW5kU2libGluZ3NBcnJheSIsIm5vZGVXaXRoU2libGluZyIsImFycmF5Iiwibm9kZSIsInB1c2giLCJzaWJsaW5nIiwiZmxhdHRlbiIsImFyciIsInJlc3VsdCIsInN0YWNrIiwiaSIsImxlbmd0aCIsIm4iLCJwb3AiLCJlbCIsIkFycmF5IiwiaXNBcnJheSIsIm5vZGVUeXBlRnJvbVR5cGUiLCJ0eXBlIiwiUG9ydGFsIiwidXRpbE5vZGVUeXBlRnJvbVR5cGUiLCJpc01lbW8iLCJjb21wYXJlTm9kZVR5cGVPZiIsIk1lbW8iLCJpc0xhenkiLCJMYXp5IiwidW5tZW1vVHlwZSIsImNoZWNrSXNTdXNwZW5zZUFuZENsb25lRWxlbWVudCIsInN1c3BlbnNlRmFsbGJhY2siLCJpc1N1c3BlbnNlIiwiY2hpbGRyZW4iLCJwcm9wcyIsImZhbGxiYWNrIiwicmVwbGFjZUxhenlXaXRoRmFsbGJhY2siLCJGYWtlU3VzcGVuc2VXcmFwcGVyIiwiUmVhY3QiLCJjcmVhdGVFbGVtZW50IiwiZWxlbWVudFRvVHJlZSIsImlzUG9ydGFsIiwidXRpbEVsZW1lbnRUb1RyZWUiLCJjb250YWluZXJJbmZvIiwibm9kZVR5cGUiLCJrZXkiLCJlbnN1cmVLZXlPclVuZGVmaW5lZCIsInJlZiIsImluc3RhbmNlIiwicmVuZGVyZWQiLCJ0b1RyZWUiLCJ2bm9kZSIsImZpbmRDdXJyZW50RmliZXJVc2luZ1Nsb3dQYXRoIiwidGFnIiwiVEFHX0NPREVTIiwiSG9zdFJvb3QiLCJjaGlsZHJlblRvVHJlZSIsImNoaWxkIiwiSG9zdFBvcnRhbCIsInN0YXRlTm9kZSIsIm1lbW9pemVkUHJvcHMiLCJJbmRldGVybWluYXRlQ29tcG9uZW50IiwiSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50IiwiQ2xhc3NDb21wb25lbnQiLCJGdW5jdGlvbkNvbXBvbmVudCIsIk1lbW9DbGFzcyIsImVsZW1lbnRUeXBlIiwiTWVtb1NGQyIsInJlbmRlcmVkTm9kZXMiLCJtYXAiLCJIb3N0Q29tcG9uZW50IiwiSG9zdFRleHQiLCJEZWh5ZHJhdGVkRnJhZ21lbnQiLCJGcmFnbWVudCIsIk1vZGUiLCJDb250ZXh0UHJvdmlkZXIiLCJDb250ZXh0Q29uc3VtZXIiLCJQcm9maWxlciIsIk1lbW9Db21wb25lbnQiLCJTaW1wbGVNZW1vQ29tcG9uZW50IiwiRm9yd2FyZFJlZiIsInBlbmRpbmdQcm9wcyIsIlN1c3BlbnNlTGlzdENvbXBvbmVudCIsIlN1c3BlbnNlQ29tcG9uZW50IiwiU3VzcGVuc2UiLCJMYXp5Q29tcG9uZW50IiwiU2NvcGVDb21wb25lbnQiLCJPZmZzY3JlZW5Db21wb25lbnQiLCJMZWdhY3lIaWRkZW5Db21wb25lbnQiLCJDYWNoZUNvbXBvbmVudCIsIlRyYWNpbmdNYXJrZXJDb21wb25lbnQiLCJFcnJvciIsIm5vZGVUb0hvc3ROb2RlIiwiX25vZGUiLCJtYXBwZXIiLCJpdGVtIiwiZmluZERPTU5vZGUiLCJnZXRFbXB0eVN0YXRlVmFsdWUiLCJFbXB0eVN0YXRlIiwiQ29tcG9uZW50IiwidGVzdFJlbmRlcmVyIiwiU2hhbGxvd1JlbmRlcmVyIiwicmVuZGVyIiwiX2luc3RhbmNlIiwic3RhdGUiLCJ3cmFwQWN0IiwiZm4iLCJyZXR1cm5WYWwiLCJUZXN0VXRpbHMiLCJhY3QiLCJnZXRQcm92aWRlckRlZmF1bHRWYWx1ZSIsIlByb3ZpZGVyIiwiX2NvbnRleHQiLCJfZGVmYXVsdFZhbHVlIiwiX2N1cnJlbnRWYWx1ZSIsIm1ha2VGYWtlRWxlbWVudCIsIiQkdHlwZW9mIiwiRWxlbWVudCIsImlzU3RhdGVmdWwiLCJwcm90b3R5cGUiLCJpc1JlYWN0Q29tcG9uZW50IiwiX19yZWFjdEF1dG9CaW5kUGFpcnMiLCJSZWFjdEVpZ2h0ZWVuQWRhcHRlciIsIlJlYWN0V3JhcHBlciIsInNldFByb3BzIiwic2V0U3RhdGUiLCJhcmdzIiwiYXBwbHkiLCJsaWZlY3ljbGVzIiwib3B0aW9ucyIsImVuYWJsZUNvbXBvbmVudERpZFVwZGF0ZU9uU2V0U3RhdGUiLCJsZWdhY3lDb250ZXh0TW9kZSIsImNvbXBvbmVudERpZFVwZGF0ZSIsIm9uU2V0U3RhdGUiLCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMiLCJoYXNTaG91bGRDb21wb25lbnRVcGRhdGVCdWciLCJnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSIsInNraXBzQ29tcG9uZW50RGlkVXBkYXRlT25OdWxsaXNoIiwiZ2V0Q2hpbGRDb250ZXh0IiwiY2FsbGVkQnlSZW5kZXJlciIsImdldERlcml2ZWRTdGF0ZUZyb21FcnJvciIsImFzc2VydERvbUF2YWlsYWJsZSIsImhhcyIsIlR5cGVFcnJvciIsImF0dGFjaFRvIiwiaHlkcmF0ZUluIiwid3JhcHBpbmdDb21wb25lbnRQcm9wcyIsImRvbU5vZGUiLCJnbG9iYWwiLCJkb2N1bWVudCIsImFkYXB0ZXIiLCJyb290IiwiY29udGV4dCIsImNhbGxiYWNrIiwid3JhcHBlclByb3BzIiwicmVmUHJvcCIsIndyYXBwZWRFbCIsIlJlYWN0V3JhcHBlckNvbXBvbmVudCIsImNyZWF0ZU1vdW50V3JhcHBlciIsImh5ZHJhdGVSb290IiwiY3JlYXRlUm9vdCIsImZsdXNoU3luYyIsImdldFB1YmxpY1Jvb3RJbnN0YW5jZSIsInNldENoaWxkUHJvcHMiLCJ1bm1vdW50IiwiZ2V0Tm9kZSIsImdldE5vZGVGcm9tUm9vdEZpbmRlciIsImlzQ3VzdG9tQ29tcG9uZW50IiwiX3JlYWN0SW50ZXJuYWxzIiwic2ltdWxhdGVFcnJvciIsIm5vZGVIaWVyYXJjaHkiLCJyb290Tm9kZSIsImVycm9yIiwiaXNFcnJvckJvdW5kYXJ5IiwiZWxJbnN0YW5jZSIsImNvbXBvbmVudERpZENhdGNoIiwiZmluZCIsImNhdGNoaW5nSW5zdGFuY2UiLCJjYXRjaGluZ1R5cGUiLCJkaXNwbGF5TmFtZU9mTm9kZSIsInNpbXVsYXRlRXZlbnQiLCJldmVudCIsIm1vY2siLCJtYXBwZWRFdmVudCIsIm1hcE5hdGl2ZUV2ZW50TmFtZXMiLCJldmVudEZuIiwiU2ltdWxhdGUiLCJiYXRjaGVkVXBkYXRlcyIsImdldFdyYXBwaW5nQ29tcG9uZW50UmVuZGVyZXIiLCJnZXRXcmFwcGluZ0NvbXBvbmVudE1vdW50UmVuZGVyZXIiLCJpbnN0IiwiZ2V0TW91bnRXcmFwcGVySW5zdGFuY2UiLCJ3cmFwSW52b2tlIiwicmVuZGVyZXIiLCJpc0RPTSIsImNhY2hlZE5vZGUiLCJsYXN0Q29tcG9uZW50Iiwid3JhcHBlZENvbXBvbmVudCIsInNlbnRpbmVsIiwid3JhcFB1cmVDb21wb25lbnQiLCJjb21wYXJlIiwic2hvdWxkQ29tcG9uZW50VXBkYXRlIiwibmV4dFByb3BzIiwiaXNQdXJlUmVhY3RDb21wb25lbnQiLCJtZW1vaXplZCIsInByZXZQcm9wcyIsIndyYXBwZWRDb21wb25lbnRGbiIsInNob3VsZFVwZGF0ZSIsInNoYWxsb3dFcXVhbCIsImRlZmF1bHRQcm9wcyIsIk9iamVjdCIsImFzc2lnbiIsImRpc3BsYXlOYW1lIiwid3JhcEZ1bmN0aW9uYWxDb21wb25lbnQiLCJyZW5kZXJFbGVtZW50IiwiZWxDb25maWciLCJyZXN0IiwicmVuZGVyZWRFbCIsInR5cGVJc0V4aXN0ZWQiLCJjbG9uZWRFbCIsImVsZW1lbnRJc0NoYW5nZWQiLCJ1bm1hc2tlZENvbnRleHQiLCJwcm92aWRlclZhbHVlcyIsIk1hcCIsImlzQ29udGV4dFByb3ZpZGVyIiwic2V0IiwidmFsdWUiLCJNb2NrUHJvdmlkZXIiLCJ3aXRoU2V0U3RhdGVBbGxvd2VkIiwiaXNDb250ZXh0Q29uc3VtZXIiLCJnZXRQcm92aWRlckZyb21Db25zdW1lciIsImdldCIsIk1vY2tDb25zdW1lciIsImdldE1hc2tlZENvbnRleHQiLCJjb250ZXh0VHlwZXMiLCJJbm5lckNvbXAiLCJpc0NvbXBvbmVudFN0YXRlZnVsIiwic3B5TWV0aG9kIiwib3JpZ2luYWxNZXRob2QiLCJfdXBkYXRlQ2xhc3NDb21wb25lbnQiLCJjbG9uZWRQcm9wcyIsInJlc3RvcmUiLCJlbXB0eVN0YXRlVmFsdWUiLCJkZWZpbmVQcm9wZXJ0eSIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsIm91dHB1dCIsImdldFJlbmRlck91dHB1dCIsImNvbmNhdCIsImhhbmRsZXIiLCJwcm9wRnJvbUV2ZW50IiwiY2hlY2tQcm9wVHlwZXMiLCJ0eXBlU3BlY3MiLCJ2YWx1ZXMiLCJsb2NhdGlvbiIsImhpZXJhcmNoeSIsImdldENvbXBvbmVudFN0YWNrIiwiY2hpbGRDb250ZXh0VHlwZXMiLCJDb250ZXh0V3JhcHBlciIsImNyZWF0ZVJlbmRlcldyYXBwZXIiLCJSZWFjdERPTVNlcnZlciIsInJlbmRlclRvU3RhdGljTWFya3VwIiwibW9kZSIsIkVuenltZUFkYXB0ZXIiLCJNT0RFUyIsIk1PVU5UIiwiY3JlYXRlTW91bnRSZW5kZXJlciIsIlNIQUxMT1ciLCJjcmVhdGVTaGFsbG93UmVuZGVyZXIiLCJTVFJJTkciLCJjcmVhdGVTdHJpbmdSZW5kZXJlciIsImVsZW1lbnQiLCJ3cmFwIiwicHJvcHNXaXRoS2V5c0FuZFJlZiIsIm1hdGNoaW5nVHlwZSIsInN1cHBvcnRzQXJyYXkiLCJub2RlcyIsImZpbHRlciIsIkJvb2xlYW4iLCJDb25jdXJyZW50TW9kZSIsIk5hTiIsIlN0cmljdE1vZGUiLCIkJHR5cGVvZlR5cGUiLCJub2RlTmFtZSIsIm5hbWUiLCJpc0VsZW1lbnQiLCJvYmplY3QiLCJpc1ZhbGlkRWxlbWVudFR5cGUiLCJmcmFnbWVudCIsInR5cGVPZk5vZGUiLCJmYWtlRWxlbWVudCIsImlzRm9yd2FyZFJlZiIsImlzVmFsaWRFbGVtZW50IiwiQ29uc3VtZXIiLCJSb290RmluZGVyIiwid3JhcFdpdGhXcmFwcGluZ0NvbXBvbmVudCIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi9zcmMvUmVhY3RFaWdodGVlbkFkYXB0ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGZsdXNoU3luYywgZmluZERPTU5vZGUgfSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IHsgY3JlYXRlUm9vdCwgaHlkcmF0ZVJvb3QgfSBmcm9tICdyZWFjdC1kb20vY2xpZW50JztcbmltcG9ydCBSZWFjdERPTVNlcnZlciBmcm9tICdyZWFjdC1kb20vc2VydmVyJztcbmltcG9ydCBTaGFsbG93UmVuZGVyZXIgZnJvbSAncmVhY3QtdGVzdC1yZW5kZXJlci9zaGFsbG93JztcbmltcG9ydCBUZXN0VXRpbHMgZnJvbSAncmVhY3QtZG9tL3Rlc3QtdXRpbHMnO1xuaW1wb3J0IGNoZWNrUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMvY2hlY2tQcm9wVHlwZXMnO1xuaW1wb3J0IGhhcyBmcm9tICdoYXMnO1xuaW1wb3J0IHtcbiAgQ29uY3VycmVudE1vZGUsXG4gIENvbnRleHRDb25zdW1lcixcbiAgQ29udGV4dFByb3ZpZGVyLFxuICBFbGVtZW50LFxuICBGb3J3YXJkUmVmLFxuICBGcmFnbWVudCxcbiAgaXNDb250ZXh0Q29uc3VtZXIsXG4gIGlzQ29udGV4dFByb3ZpZGVyLFxuICBpc0VsZW1lbnQsXG4gIGlzRm9yd2FyZFJlZixcbiAgaXNQb3J0YWwsXG4gIGlzU3VzcGVuc2UsXG4gIGlzVmFsaWRFbGVtZW50VHlwZSxcbiAgTGF6eSxcbiAgTWVtbyxcbiAgUG9ydGFsLFxuICBQcm9maWxlcixcbiAgU3RyaWN0TW9kZSxcbiAgU3VzcGVuc2UsXG59IGZyb20gJ3JlYWN0LWlzJztcbmltcG9ydCB7IEVuenltZUFkYXB0ZXIsIFJlYWN0V3JhcHBlciB9IGZyb20gJ2VuenltZSc7XG5pbXBvcnQgeyB0eXBlT2ZOb2RlIH0gZnJvbSAnZW56eW1lL2J1aWxkL1V0aWxzJztcbmltcG9ydCBzaGFsbG93RXF1YWwgZnJvbSAnZW56eW1lLXNoYWxsb3ctZXF1YWwnO1xuaW1wb3J0IHtcbiAgZGlzcGxheU5hbWVPZk5vZGUsXG4gIGVsZW1lbnRUb1RyZWUgYXMgdXRpbEVsZW1lbnRUb1RyZWUsXG4gIG5vZGVUeXBlRnJvbVR5cGUgYXMgdXRpbE5vZGVUeXBlRnJvbVR5cGUsXG4gIG1hcE5hdGl2ZUV2ZW50TmFtZXMsXG4gIHByb3BGcm9tRXZlbnQsXG4gIGFzc2VydERvbUF2YWlsYWJsZSxcbiAgd2l0aFNldFN0YXRlQWxsb3dlZCxcbiAgY3JlYXRlUmVuZGVyV3JhcHBlcixcbiAgY3JlYXRlTW91bnRXcmFwcGVyLFxuICBwcm9wc1dpdGhLZXlzQW5kUmVmLFxuICBlbnN1cmVLZXlPclVuZGVmaW5lZCxcbiAgc2ltdWxhdGVFcnJvcixcbiAgd3JhcCxcbiAgZ2V0TWFza2VkQ29udGV4dCxcbiAgZ2V0Q29tcG9uZW50U3RhY2ssXG4gIFJvb3RGaW5kZXIsXG4gIGdldE5vZGVGcm9tUm9vdEZpbmRlcixcbiAgd3JhcFdpdGhXcmFwcGluZ0NvbXBvbmVudCxcbiAgZ2V0V3JhcHBpbmdDb21wb25lbnRNb3VudFJlbmRlcmVyLFxuICBjb21wYXJlTm9kZVR5cGVPZixcbiAgc3B5TWV0aG9kLFxuICBnZXRQdWJsaWNSb290SW5zdGFuY2UsXG4gIFRBR19DT0RFUyxcbn0gZnJvbSAnQGNoYWxiZXJ0L2VuenltZS1hZGFwdGVyLXV0aWxzJztcbmltcG9yd