UNPKG

enzyme

Version:

JavaScript Testing utilities for React

176 lines (135 loc) 6.38 kB
Object.defineProperty(exports, "__esModule", { value: true }); var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; exports.typeName = typeName; exports.spaces = spaces; exports.indent = indent; exports.debugNode = debugNode; exports.debugNodes = debugNodes; exports.debugInst = debugInst; exports.debugInsts = debugInsts; var _without = require('lodash/without'); var _without2 = _interopRequireDefault(_without); var _escape = require('lodash/escape'); var _escape2 = _interopRequireDefault(_escape); var _compact = require('lodash/compact'); var _compact2 = _interopRequireDefault(_compact); var _object = require('object.values'); var _object2 = _interopRequireDefault(_object); var _functionPrototype = require('function.prototype.name'); var _functionPrototype2 = _interopRequireDefault(_functionPrototype); var _ShallowTraversal = require('./ShallowTraversal'); var _MountedTraversal = require('./MountedTraversal'); var _reactCompat = require('./react-compat'); var _Utils = require('./Utils'); var _version = require('./version'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } function typeName(node) { return typeof node.type === 'function' ? node.type.displayName || (0, _functionPrototype2['default'])(node.type) || 'Component' : node.type; } function spaces(n) { return Array(n + 1).join(' '); } function indent(depth, string) { return string.split('\n').map(function (x) { return '' + String(spaces(depth)) + String(x); }).join('\n'); } function propString(prop) { switch (typeof prop === 'undefined' ? 'undefined' : _typeof(prop)) { case 'function': return '{[Function]}'; case 'string': return '"' + String(prop) + '"'; case 'number': case 'boolean': return '{' + String(prop) + '}'; case 'object': return '{{...}}'; default: return '{[' + (typeof prop === 'undefined' ? 'undefined' : _typeof(prop)) + ']}'; } } function propsString(node) { var props = (0, _Utils.propsOfNode)(node); var keys = (0, _without2['default'])(Object.keys(props), 'children'); return keys.map(function (key) { return String(key) + '=' + String(propString(props[key])); }).join(' '); } function indentChildren(childrenStrs, indentLength) { return childrenStrs.length ? '\n' + String(childrenStrs.map(function (x) { return indent(indentLength, x); }).join('\n')) + '\n' : ''; } function debugNode(node) { var indentLength = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2; var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; if (typeof node === 'string' || typeof node === 'number') return (0, _escape2['default'])(node); if (!node) return ''; var childrenStrs = (0, _compact2['default'])((0, _ShallowTraversal.childrenOfNode)(node).map(function (n) { return debugNode(n, indentLength, options); })); var type = typeName(node); var props = options.ignoreProps ? '' : propsString(node); var beforeProps = props ? ' ' : ''; var afterProps = childrenStrs.length ? '>' : ' '; var childrenIndented = indentChildren(childrenStrs, indentLength); var nodeClose = childrenStrs.length ? '</' + String(type) + '>' : '/>'; return '<' + String(type) + beforeProps + String(props) + afterProps + String(childrenIndented) + nodeClose; } function debugNodes(nodes) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; return nodes.map(function (node) { return debugNode(node, undefined, options); }).join('\n\n\n'); } function debugInst(inst) { var indentLength = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2; var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; if (typeof inst === 'string' || typeof inst === 'number') return (0, _escape2['default'])(inst); if (!inst) return ''; if (inst._stringText) { return inst._stringText; } if (!inst.getPublicInstance) { var internal = (0, _Utils.internalInstance)(inst); return debugInst(internal, indentLength, options); } var publicInst = inst.getPublicInstance(); if (typeof publicInst === 'string' || typeof publicInst === 'number') return (0, _escape2['default'])(publicInst); if (!publicInst && !inst._renderedComponent) return ''; // do stuff with publicInst var currentElement = inst._currentElement; var type = typeName(currentElement); var props = options.ignoreProps ? '' : propsString(currentElement); var children = []; if ((0, _reactCompat.isDOMComponent)(publicInst)) { var renderedChildren = (0, _MountedTraversal.renderedChildrenOfInst)(inst); if (!renderedChildren) { children.push.apply(children, _toConsumableArray((0, _ShallowTraversal.childrenOfNode)(currentElement))); } else { children.push.apply(children, _toConsumableArray((0, _object2['default'])(renderedChildren))); } } else if (!_version.REACT013 && (0, _reactCompat.isElement)(currentElement) && typeof currentElement.type === 'function') { children.push(inst._renderedComponent); } else if (_version.REACT013 && (0, _reactCompat.isCompositeComponent)(publicInst)) { children.push(inst._renderedComponent); } var childrenStrs = (0, _compact2['default'])(children.map(function (n) { return debugInst(n, indentLength, options); })); var beforeProps = props ? ' ' : ''; var nodeClose = childrenStrs.length ? '</' + String(type) + '>' : '/>'; var afterProps = childrenStrs.length ? '>' : ' '; var childrenIndented = indentChildren(childrenStrs, indentLength); return '<' + String(type) + beforeProps + String(props) + afterProps + String(childrenIndented) + nodeClose; } function debugInsts(insts) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; return insts.map(function (inst) { return debugInst(inst, undefined, options); }).join('\n\n\n'); }