testcafe
Version:
Automated browser testing for the modern web development stack.
43 lines • 5.76 kB
JavaScript
;
// -------------------------------------------------------------
// WARNING: this file is used by both the client and the server.
// Do not use any browser or node-specific API!
// -------------------------------------------------------------
Object.defineProperty(exports, "__esModule", { value: true });
/* eslint-disable no-undef */
function selectorTextFilter(node, index, originNode, textFilter) {
function hasChildrenWithText(parentNode) {
const cnCount = parentNode.childNodes.length;
for (let i = 0; i < cnCount; i++) {
if (selectorTextFilter(parentNode.childNodes[i], index, originNode, textFilter))
return true;
}
return false;
}
function checkNodeText(text) {
if (textFilter instanceof RegExp)
return textFilter.test(text);
return textFilter === text.trim();
}
// Element
if (node.nodeType === 1) {
// NOTE: In Firefox, <option> elements don't have `innerText`.
// So, we fallback to `textContent` in that case (see GH-861).
// SVG elements do not have `innerText` property as well
return checkNodeText(node.innerText || node.textContent);
}
// Document
if (node.nodeType === 9) {
const head = node.querySelector('head');
const body = node.querySelector('body');
return hasChildrenWithText(head, textFilter) || hasChildrenWithText(body, textFilter);
}
// DocumentFragment
if (node.nodeType === 11)
return hasChildrenWithText(node, textFilter);
return checkNodeText(node.textContent);
}
exports.default = selectorTextFilter;
/* eslint-enable no-undef */
module.exports = exports.default;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0b3ItdGV4dC1maWx0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY2xpZW50LWZ1bmN0aW9ucy9zZWxlY3RvcnMvc2VsZWN0b3ItdGV4dC1maWx0ZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLGdFQUFnRTtBQUNoRSxnRUFBZ0U7QUFDaEUsK0NBQStDO0FBQy9DLGdFQUFnRTs7QUFFaEUsNkJBQTZCO0FBQzdCLFNBQXdCLGtCQUFrQixDQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFVBQVU7SUFFM0UsU0FBUyxtQkFBbUIsQ0FBRSxVQUFVO1FBQ3BDLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO1FBRTdDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDOUIsSUFBSSxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDO2dCQUMzRSxPQUFPLElBQUksQ0FBQztTQUNuQjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxTQUFTLGFBQWEsQ0FBRSxJQUFJO1FBQ3hCLElBQUksVUFBVSxZQUFZLE1BQU07WUFDNUIsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sVUFBVSxLQUFLLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsVUFBVTtJQUNWLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxDQUFDLEVBQUU7UUFDckIsOERBQThEO1FBQzlELDhEQUE4RDtRQUM5RCx3REFBd0Q7UUFDeEQsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7S0FDNUQ7SUFFRCxXQUFXO0lBQ1gsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLENBQUMsRUFBRTtRQUNyQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFeEMsT0FBTyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksbUJBQW1CLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0tBQ3pGO0lBRUQsbUJBQW1CO0lBQ25CLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxFQUFFO1FBQ3BCLE9BQU8sbUJBQW1CLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBRWpELE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBeENELHFDQXdDQztBQUNELDRCQUE0QiIsInNvdXJjZXNDb250ZW50IjpbIi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFdBUk5JTkc6IHRoaXMgZmlsZSBpcyB1c2VkIGJ5IGJvdGggdGhlIGNsaWVudCBhbmQgdGhlIHNlcnZlci5cbi8vIERvIG5vdCB1c2UgYW55IGJyb3dzZXIgb3Igbm9kZS1zcGVjaWZpYyBBUEkhXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzZWxlY3RvclRleHRGaWx0ZXIgKG5vZGUsIGluZGV4LCBvcmlnaW5Ob2RlLCB0ZXh0RmlsdGVyKSB7XG5cbiAgICBmdW5jdGlvbiBoYXNDaGlsZHJlbldpdGhUZXh0IChwYXJlbnROb2RlKSB7XG4gICAgICAgIGNvbnN0IGNuQ291bnQgPSBwYXJlbnROb2RlLmNoaWxkTm9kZXMubGVuZ3RoO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY25Db3VudDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoc2VsZWN0b3JUZXh0RmlsdGVyKHBhcmVudE5vZGUuY2hpbGROb2Rlc1tpXSwgaW5kZXgsIG9yaWdpbk5vZGUsIHRleHRGaWx0ZXIpKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoZWNrTm9kZVRleHQgKHRleHQpIHtcbiAgICAgICAgaWYgKHRleHRGaWx0ZXIgaW5zdGFuY2VvZiBSZWdFeHApXG4gICAgICAgICAgICByZXR1cm4gdGV4dEZpbHRlci50ZXN0KHRleHQpO1xuICAgICAgICByZXR1cm4gdGV4dEZpbHRlciA9PT0gdGV4dC50cmltKCk7XG4gICAgfVxuXG4gICAgLy8gRWxlbWVudFxuICAgIGlmIChub2RlLm5vZGVUeXBlID09PSAxKSB7XG4gICAgICAgIC8vIE5PVEU6IEluIEZpcmVmb3gsIDxvcHRpb24+IGVsZW1lbnRzIGRvbid0IGhhdmUgYGlubmVyVGV4dGAuXG4gICAgICAgIC8vIFNvLCB3ZSBmYWxsYmFjayB0byBgdGV4dENvbnRlbnRgIGluIHRoYXQgY2FzZSAoc2VlIEdILTg2MSkuXG4gICAgICAgIC8vIFNWRyBlbGVtZW50cyBkbyBub3QgaGF2ZSBgaW5uZXJUZXh0YCBwcm9wZXJ0eSBhcyB3ZWxsXG4gICAgICAgIHJldHVybiBjaGVja05vZGVUZXh0KG5vZGUuaW5uZXJUZXh0IHx8IG5vZGUudGV4dENvbnRlbnQpO1xuICAgIH1cblxuICAgIC8vIERvY3VtZW50XG4gICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IDkpIHtcbiAgICAgICAgY29uc3QgaGVhZCA9IG5vZGUucXVlcnlTZWxlY3RvcignaGVhZCcpO1xuICAgICAgICBjb25zdCBib2R5ID0gbm9kZS5xdWVyeVNlbGVjdG9yKCdib2R5Jyk7XG5cbiAgICAgICAgcmV0dXJuIGhhc0NoaWxkcmVuV2l0aFRleHQoaGVhZCwgdGV4dEZpbHRlcikgfHwgaGFzQ2hpbGRyZW5XaXRoVGV4dChib2R5LCB0ZXh0RmlsdGVyKTtcbiAgICB9XG5cbiAgICAvLyBEb2N1bWVudEZyYWdtZW50XG4gICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IDExKVxuICAgICAgICByZXR1cm4gaGFzQ2hpbGRyZW5XaXRoVGV4dChub2RlLCB0ZXh0RmlsdGVyKTtcblxuICAgIHJldHVybiBjaGVja05vZGVUZXh0KG5vZGUudGV4dENvbnRlbnQpO1xufVxuLyogZXNsaW50LWVuYWJsZSBuby11bmRlZiAqL1xuIl19