legit-tests
Version:
a chainable testing library for React
87 lines (69 loc) • 2.77 kB
JavaScript
;
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'];