UNPKG

legit-tests

Version:

a chainable testing library for React

87 lines (69 loc) 2.77 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); exports['default'] = find; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var _reactAddonsTestUtils = require('react-addons-test-utils'); var _reactAddonsTestUtils2 = _interopRequireDefault(_reactAddonsTestUtils); var _lodash = require('lodash'); var _lodash2 = _interopRequireDefault(_lodash); function find(selector) { var self = this; var foundElements = []; var elements; var selector; if (_lodash2['default'].isFunction(selector)) { elements = _reactAddonsTestUtils2['default'].scryRenderedComponentsWithType(this.instance, selector); selector = (selector.name || selector.displayName).toLowerCase(); } else { var tokens = selector.split(/(?=\.)|(?=#)|(?=\[)/); tokens.forEach(function (subselector) { var els; switch (subselector[0]) { // class case '.': els = _reactAddonsTestUtils2['default'].scryRenderedDOMComponentsWithClass(self.instance, subselector.slice(1)); foundElements.push(Array.isArray(els) ? els : [els]); break; // id case '#': els = _reactAddonsTestUtils2['default'].findAllInRenderedTree(self.instance, function (component) { if (component.id === subselector.slice(1)) { return true; } }); foundElements.push(Array.isArray(els) ? els : [els]); break; // data attribute case '[': var attributeName = _lodash2['default'].first(subselector.slice(1, -1).split('=')); var attributeValue = subselector.slice(1, -1).split('=').slice(1).join('=').replace(/^"(.*)"$/, '$1'); els = _reactAddonsTestUtils2['default'].findAllInRenderedTree(self.instance, function (component) { if (component.getAttribute) { var val = component.getAttribute(attributeName); if (val === attributeValue || val === 'true' && attributeValue === '') { return true; } } }); foundElements.push(Array.isArray(els) ? els : [els]); break; // tag default: els = _reactAddonsTestUtils2['default'].scryRenderedDOMComponentsWithTag(self.instance, subselector); foundElements.push(Array.isArray(els) ? els : [els]); break; } }); elements = _lodash2['default'].intersection.apply(_lodash2['default'], foundElements); } if (elements) { if (Array.isArray(elements) && elements.length === 1) { this.elements[selector] = elements[0]; } else { this.elements[selector] = elements; } } } module.exports = exports['default'];