/* eslint no-use-before-define:0 */
'use strict';
Object.defineProperty(exports, '__esModule', {
value: true
});
exports.propsOfNode = propsOfNode;
exports.onPrototype = onPrototype;
exports.getNode = getNode;
exports.childrenEqual = childrenEqual;
exports.nodeEqual = nodeEqual;
exports.propFromEvent = propFromEvent;
exports.withSetStateAllowed = withSetStateAllowed;
exports.splitSelector = splitSelector;
exports.isSimpleSelector = isSimpleSelector;
exports.selectorError = selectorError;
exports.AND = AND;
var _underscore = require('underscore');
var _reactCompat = require('./react-compat');
var _version = require('./version');
function propsOfNode(node) {
Iif (_version.REACT013) {
return node && node._store && node._store.props || {};
}
return node && node.props || {};
}
function onPrototype(Component, lifecycle, method) {
var proto = Component.prototype;
Object.getOwnPropertyNames(proto).forEach(function (name) {
Iif (typeof proto[name] !== 'function') return;
switch (name) {
case 'componentDidMount':
case 'componentWillMount':
case 'componentDidUnmount':
case 'componentWillUnmount':
case 'componentWillReceiveProps':
case 'componentDidUpdate':
case 'componentWillUpdate':
case 'shouldComponentUpdate':
case 'render':
Eif (lifecycle) lifecycle(proto, name);
break;
case 'constructor':
// don't spy on the constructor, even though it shows up in the prototype
break;
default:
Eif (method) method(proto, name);
break;
}
});
}
function getNode(node) {
return (0, _reactCompat.isDOMComponent)(node) ? (0, _reactCompat.findDOMNode)(node) : node;
}
function childrenEqual(a, b) {
Iif (a === b) return true;
Eif (!Array.isArray(a) && !Array.isArray(b)) {
return nodeEqual(a, b);
}
if (!a && !b) return true;
if (a.length !== b.length) return false;
if (a.length === 0 && b.length === 0) return true;
for (var i = 0; i < a.length; i++) {
if (!nodeEqual(a[i], b[i])) return false;
}
return true;
}
function nodeEqual(a, b) {
Iif (a === b) return true;
Iif (!a || !b) return false;
if (a.type !== b.type) return false;
var left = propsOfNode(a);
var leftKeys = Object.keys(left);
var right = propsOfNode(b);
for (var i = 0; i < leftKeys.length; i++) {
var prop = leftKeys[i];
if (!(prop in right)) return false;
if (prop === 'children') {
if (!childrenEqual(left.children, right.children)) return false;
} else if (right[prop] === left[prop]) {
// continue;
} else if (typeof right[prop] === typeof left[prop] && typeof left[prop] === 'object') {
if (!(0, _underscore.isEqual)(left[prop], right[prop])) return false;
} else {
return false;
}
}
return leftKeys.length === Object.keys(right).length;
}
// 'click' => 'onClick'
// 'mouseEnter' => 'onMouseEnter'
function propFromEvent(event) {
return 'on' + event[0].toUpperCase() + event.substring(1);
}
function withSetStateAllowed(fn) {
// NOTE(lmr):
// this is currently here to circumvent a React bug where `setState()` is
// not allowed without global being defined.
var cleanup = false;
Eif (typeof global.document === 'undefined') {
cleanup = true;
global.document = {};
}
fn();
Eif (cleanup) {
delete global.document;
}
}
function splitSelector(selector) {
return selector.split(/(?=\.)/);
}
function isSimpleSelector(selector) {
// any of these characters pretty much guarantee it's a complex selector
return !/[~\s\[\]:>]/.test(selector);
}
function selectorError(selector) {
return new TypeError('Enzyme received a complex CSS selector (\'' + selector + '\') that it does not currently support');
}
var isCompoundSelector = /[a-z]\.[a-z]/i;
exports.isCompoundSelector = isCompoundSelector;
function AND(fns) {
return function (x) {
var i = fns.length;
while (i--) {
if (!fns[i](x)) return false;
}
return true;
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9sZWxhbmRfcmljaGFyZHNvbi9jb2RlL3JlYWdlbnQvc3JjL1V0aWxzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OzswQkFDd0IsWUFBWTs7MkJBSTdCLGdCQUFnQjs7dUJBQ0UsV0FBVzs7QUFFN0IsU0FBUyxXQUFXLENBQUMsSUFBSSxFQUFFO0FBQ2hDLHlCQUFjO0FBQ1osV0FBTyxBQUFDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFLLEVBQUUsQ0FBQztHQUN6RDtBQUNELFNBQU8sQUFBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSyxFQUFFLENBQUM7Q0FDbkM7O0FBRU0sU0FBUyxXQUFXLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUU7QUFDeEQsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQztBQUNsQyxRQUFNLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUMsSUFBSSxFQUFLO0FBQ2xELFFBQUksT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxFQUFFLE9BQU87QUFDOUMsWUFBUSxJQUFJO0FBQ1osV0FBSyxtQkFBbUIsQ0FBQztBQUN6QixXQUFLLG9CQUFvQixDQUFDO0FBQzFCLFdBQUsscUJBQXFCLENBQUM7QUFDM0IsV0FBSyxzQkFBc0IsQ0FBQztBQUM1QixXQUFLLDJCQUEyQixDQUFDO0FBQ2pDLFdBQUssb0JBQW9CLENBQUM7QUFDMUIsV0FBSyxxQkFBcUIsQ0FBQztBQUMzQixXQUFLLHVCQUF1QixDQUFDO0FBQzdCLFdBQUssUUFBUTtBQUNYLFlBQUksU0FBUyxFQUFFLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDdEMsY0FBTTtBQUFBLEFBQ1IsV0FBSyxhQUFhOztBQUVoQixjQUFNO0FBQUEsQUFDUjtBQUNFLFlB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VUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEtBQUssQ0FBQztLQUM5QjtBQUNELFdBQU8sSUFBSSxDQUFDO0dBQ2IsQ0FBQztDQUNIIiwiZmlsZSI6Ii9Vc2Vycy9sZWxhbmRfcmljaGFyZHNvbi9jb2RlL3JlYWdlbnQvc3JjL1V0aWxzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50IG5vLXVzZS1iZWZvcmUtZGVmaW5lOjAgKi9cbmltcG9ydCB7IGlzRXF1YWwgfSBmcm9tICd1bmRlcnNjb3JlJztcbmltcG9ydCB7XG4gIGlzRE9NQ29tcG9uZW50LFxuICBmaW5kRE9NTm9kZSxcbn0gZnJvbSAnLi9yZWFjdC1jb21wYXQnO1xuaW1wb3J0IHsgUkVBQ1QwMTMgfSBmcm9tICcuL3ZlcnNpb24nO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJvcHNPZk5vZGUobm9kZSkge1xuICBpZiAoUkVBQ1QwMTMpIHtcbiAgICByZXR1cm4gKG5vZGUgJiYgbm9kZS5fc3RvcmUgJiYgbm9kZS5fc3RvcmUucHJvcHMpIHx8IHt9O1xuICB9XG4gIHJldHVybiAobm9kZSAmJiBub2RlLnByb3BzKSB8fCB7fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9uUHJvdG90eXBlKENvbXBvbmVudCwgbGlmZWN5Y2xlLCBtZXRob2QpIHtcbiAgY29uc3QgcHJvdG8gPSBDb21wb25lbnQucHJvdG90eXBlO1xuICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhwcm90bykuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgIGlmICh0eXBlb2YgcHJvdG9bbmFtZV0gIT09ICdmdW5jdGlvbicpIHJldHVybjtcbiAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICBjYXNlICdjb21wb25lbnREaWRNb3VudCc6XG4gICAgY2FzZSAnY29tcG9uZW50V2lsbE1vdW50JzpcbiAgICBjYXNlICdjb21wb25lbnREaWRVbm1vdW50JzpcbiAgICBjYXNlICdjb21wb25lbnRXaWxsVW5tb3VudCc6XG4gICAgY2FzZSAnY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyc6XG4gICAgY2FzZSAnY29tcG9uZW50RGlkVXBkYXRlJzpcbiAgICBjYXNlICdjb21wb25lbnRXaWxsVXBkYXRlJzpcbiAgICBjYXNlICdzaG91bGRDb21wb25lbnRVcGRhdGUnOlxuICAgIGNhc2UgJ3JlbmRlcic6XG4gICAgICBpZiAobGlmZWN5Y2xlKSBsaWZlY3ljbGUocHJvdG8sIG5hbWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29uc3RydWN0b3InOlxuICAgICAgLy8gZG9uJ3Qgc3B5IG9uIHRoZSBjb25zdHJ1Y3RvciwgZXZlbiB0aG91Z2ggaXQgc2hvd3MgdXAgaW4gdGhlIHByb3RvdHlwZVxuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGlmIChtZXRob2QpIG1ldGhvZChwcm90bywgbmFtZSk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Tm9kZShub2RlKSB7XG4gIHJldHVybiBpc0RPTUNvbXBvbmVudChub2RlKSA/IGZpbmRET01Ob2RlKG5vZGUpIDogbm9kZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoaWxkcmVuRXF1YWwoYSwgYikge1xuICBpZiAoYSA9PT0gYikgcmV0dXJuIHRydWU7XG4gIGlmICghQXJyYXkuaXNBcnJheShhKSAmJiAhQXJyYXkuaXNBcnJheShiKSkge1xuICAgIHJldHVybiBub2RlRXF1YWwoYSwgYik7XG4gIH1cbiAgaWYgKCFhICYmICFiKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoYS5sZW5ndGggPT09IDAgJiYgYi5sZW5ndGggPT09IDApIHJldHVybiB0cnVlO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoIW5vZGVFcXVhbChhW2ldLCBiW2ldKSkgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9kZUVxdWFsKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHJldHVybiB0cnVlO1xuICBpZiAoIWEgfHwgIWIpIHJldHVybiBmYWxzZTtcbiAgaWYgKGEudHlwZSAhPT0gYi50eXBlKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGxlZnQgPSBwcm9wc09mTm9kZShhKTtcbiAgY29uc3QgbGVmdEtleXMgPSBPYmplY3Qua2V5cyhsZWZ0KTtcbiAgY29uc3QgcmlnaHQgPSBwcm9wc09mTm9kZShiKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZWZ0S2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHByb3AgPSBsZWZ0S2V5c1tpXTtcbiAgICBpZiAoIShwcm9wIGluIHJpZ2h0KSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChwcm9wID09PSAnY2hpbGRyZW4nKSB7XG4gICAgICBpZiAoIWNoaWxkcmVuRXF1YWwobGVmdC5jaGlsZHJlbiwgcmlnaHQuY2hpbGRyZW4pKSByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIGlmIChyaWdodFtwcm9wXSA9PT0gbGVmdFtwcm9wXSkge1xuICAgICAgLy8gY29udGludWU7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcmlnaHRbcHJvcF0gPT09IHR5cGVvZiBsZWZ0W3Byb3BdICYmIHR5cGVvZiBsZWZ0W3Byb3BdID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKCFpc0VxdWFsKGxlZnRbcHJvcF0sIHJpZ2h0W3Byb3BdKSkgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiBsZWZ0S2V5cy5sZW5ndGggPT09IE9iamVjdC5rZXlzKHJpZ2h0KS5sZW5ndGg7XG59XG5cbi8vICdjbGljaycgPT4gJ29uQ2xpY2snXG4vLyAnbW91c2VFbnRlcicgPT4gJ29uTW91c2VFbnRlcidcbmV4cG9ydCBmdW5jdGlvbiBwcm9wRnJvbUV2ZW50KGV2ZW50KSB7XG4gIHJldHVybiBgb24ke2V2ZW50WzBdLnRvVXBwZXJDYXNlKCl9JHtldmVudC5zdWJzdHJpbmcoMSl9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhTZXRTdGF0ZUFsbG93ZWQoZm4pIHtcbiAgLy8gTk9URShsbXIpOlxuICAvLyB0aGlzIGlzIGN1cnJlbnRseSBoZXJlIHRvIGNpcmN1bXZlbnQgYSBSZWFjdCBidWcgd2hlcmUgYHNldFN0YXRlKClgIGlzXG4gIC8vIG5vdCBhbGxvd2VkIHdpdGhvdXQgZ2xvYmFsIGJlaW5nIGRlZmluZWQuXG4gIGxldCBjbGVhbnVwID0gZmFsc2U7XG4gIGlmICh0eXBlb2YgZ2xvYmFsLmRvY3VtZW50ID09PSAndW5kZWZpbmVkJykge1xuICAgIGNsZWFudXAgPSB0cnVlO1xuICAgIGdsb2JhbC5kb2N1bWVudCA9IHt9O1xuICB9XG4gIGZuKCk7XG4gIGlmIChjbGVhbnVwKSB7XG4gICAgZGVsZXRlIGdsb2JhbC5kb2N1bWVudDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRTZWxlY3RvcihzZWxlY3Rvcikge1xuICByZXR1cm4gc2VsZWN0b3Iuc3BsaXQoLyg/PVxcLikvKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2ltcGxlU2VsZWN0b3Ioc2VsZWN0b3IpIHtcbiAgLy8gYW55IG9mIHRoZXNlIGNoYXJhY3RlcnMgcHJldHR5IG11Y2ggZ3VhcmFudGVlIGl0J3MgYSBjb21wbGV4IHNlbGVjdG9yXG4gIHJldHVybiAhL1t+XFxzXFxbXFxdOj5dLy50ZXN0KHNlbGVjdG9yKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdG9yRXJyb3Ioc2VsZWN0b3IpIHtcbiAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXG4gICAgYFJlYWdlbnQgcmVjZWl2ZWQgYSBjb21wbGV4IENTUyBzZWxlY3RvciAoJyR7c2VsZWN0b3J9JykgdGhhdCBpdCBkb2VzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGBcbiAgKTtcbn1cblxuZXhwb3J0IGNvbnN0IGlzQ29tcG91bmRTZWxlY3RvciA9IC9bYS16XVxcLlthLXpdL2k7XG5cblxuZXhwb3J0IGZ1bmN0aW9uIEFORChmbnMpIHtcbiAgcmV0dXJuIHggPT4ge1xuICAgIGxldCBpID0gZm5zLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICBpZiAoIWZuc1tpXSh4KSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbn1cbiJdfQ== |