UNPKG

testcafe

Version:

Automated browser testing for the modern web development stack.

50 lines 6.72 kB
"use strict"; // ------------------------------------------------------------- // 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) { let text = node.innerText; // NOTE: In Firefox, <option> elements don't have `innerText`. // So, we fallback to `textContent` in that case (see GH-861). if (node.tagName.toLowerCase() === 'option') { const textContent = node.textContent; if (!text && textContent) text = textContent; } return checkNodeText(text); } // Document if (node.nodeType === 9) { // NOTE: latest version of Edge doesn't have `innerText` for `document`, // `html` and `body`. So we check their children instead. 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0b3ItdGV4dC1maWx0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY2xpZW50LWZ1bmN0aW9ucy9zZWxlY3RvcnMvc2VsZWN0b3ItdGV4dC1maWx0ZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLGdFQUFnRTtBQUNoRSxnRUFBZ0U7QUFDaEUsK0NBQStDO0FBQy9DLGdFQUFnRTs7QUFFaEUsNkJBQTZCO0FBQzdCLFNBQXdCLGtCQUFrQixDQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFVBQVU7SUFFM0UsU0FBUyxtQkFBbUIsQ0FBRSxVQUFVO1FBQ3BDLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO1FBRTdDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDOUIsSUFBSSxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDO2dCQUMzRSxPQUFPLElBQUksQ0FBQztTQUNuQjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxTQUFTLGFBQWEsQ0FBRSxJQUFJO1FBQ3hCLElBQUksVUFBVSxZQUFZLE1BQU07WUFDNUIsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sVUFBVSxLQUFLLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsVUFBVTtJQUNWLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxDQUFDLEVBQUU7UUFDckIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUUxQiw4REFBOEQ7UUFDOUQsOERBQThEO1FBQzlELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsS0FBSyxRQUFRLEVBQUU7WUFDekMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUVyQyxJQUFJLENBQUMsSUFBSSxJQUFJLFdBQVc7Z0JBQ3BCLElBQUksR0FBRyxXQUFXLENBQUM7U0FDMUI7UUFFRCxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUM5QjtJQUVELFdBQVc7SUFDWCxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssQ0FBQyxFQUFFO1FBQ3JCLHdFQUF3RTtRQUN4RSx5REFBeUQ7UUFDekQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXhDLE9BQU8sbUJBQW1CLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLG1CQUFtQixDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztLQUN6RjtJQUVELG1CQUFtQjtJQUNuQixJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssRUFBRTtRQUNwQixPQUFPLG1CQUFtQixDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztJQUVqRCxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDM0MsQ0FBQztBQWxERCxxQ0FrREM7QUFDRCw0QkFBNEIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBXQVJOSU5HOiB0aGlzIGZpbGUgaXMgdXNlZCBieSBib3RoIHRoZSBjbGllbnQgYW5kIHRoZSBzZXJ2ZXIuXG4vLyBEbyBub3QgdXNlIGFueSBicm93c2VyIG9yIG5vZGUtc3BlY2lmaWMgQVBJIVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2VsZWN0b3JUZXh0RmlsdGVyIChub2RlLCBpbmRleCwgb3JpZ2luTm9kZSwgdGV4dEZpbHRlcikge1xuXG4gICAgZnVuY3Rpb24gaGFzQ2hpbGRyZW5XaXRoVGV4dCAocGFyZW50Tm9kZSkge1xuICAgICAgICBjb25zdCBjbkNvdW50ID0gcGFyZW50Tm9kZS5jaGlsZE5vZGVzLmxlbmd0aDtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNuQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgaWYgKHNlbGVjdG9yVGV4dEZpbHRlcihwYXJlbnROb2RlLmNoaWxkTm9kZXNbaV0sIGluZGV4LCBvcmlnaW5Ob2RlLCB0ZXh0RmlsdGVyKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGVja05vZGVUZXh0ICh0ZXh0KSB7XG4gICAgICAgIGlmICh0ZXh0RmlsdGVyIGluc3RhbmNlb2YgUmVnRXhwKVxuICAgICAgICAgICAgcmV0dXJuIHRleHRGaWx0ZXIudGVzdCh0ZXh0KTtcbiAgICAgICAgcmV0dXJuIHRleHRGaWx0ZXIgPT09IHRleHQudHJpbSgpO1xuICAgIH1cblxuICAgIC8vIEVsZW1lbnRcbiAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gMSkge1xuICAgICAgICBsZXQgdGV4dCA9IG5vZGUuaW5uZXJUZXh0O1xuXG4gICAgICAgIC8vIE5PVEU6IEluIEZpcmVmb3gsIDxvcHRpb24+IGVsZW1lbnRzIGRvbid0IGhhdmUgYGlubmVyVGV4dGAuXG4gICAgICAgIC8vIFNvLCB3ZSBmYWxsYmFjayB0byBgdGV4dENvbnRlbnRgIGluIHRoYXQgY2FzZSAoc2VlIEdILTg2MSkuXG4gICAgICAgIGlmIChub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ29wdGlvbicpIHtcbiAgICAgICAgICAgIGNvbnN0IHRleHRDb250ZW50ID0gbm9kZS50ZXh0Q29udGVudDtcblxuICAgICAgICAgICAgaWYgKCF0ZXh0ICYmIHRleHRDb250ZW50KVxuICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0Q29udGVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjaGVja05vZGVUZXh0KHRleHQpO1xuICAgIH1cblxuICAgIC8vIERvY3VtZW50XG4gICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IDkpIHtcbiAgICAgICAgLy8gTk9URTogbGF0ZXN0IHZlcnNpb24gb2YgRWRnZSBkb2Vzbid0IGhhdmUgYGlubmVyVGV4dGAgZm9yIGBkb2N1bWVudGAsXG4gICAgICAgIC8vIGBodG1sYCBhbmQgYGJvZHlgLiBTbyB3ZSBjaGVjayB0aGVpciBjaGlsZHJlbiBpbnN0ZWFkLlxuICAgICAgICBjb25zdCBoZWFkID0gbm9kZS5xdWVyeVNlbGVjdG9yKCdoZWFkJyk7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBub2RlLnF1ZXJ5U2VsZWN0b3IoJ2JvZHknKTtcblxuICAgICAgICByZXR1cm4gaGFzQ2hpbGRyZW5XaXRoVGV4dChoZWFkLCB0ZXh0RmlsdGVyKSB8fCBoYXNDaGlsZHJlbldpdGhUZXh0KGJvZHksIHRleHRGaWx0ZXIpO1xuICAgIH1cblxuICAgIC8vIERvY3VtZW50RnJhZ21lbnRcbiAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gMTEpXG4gICAgICAgIHJldHVybiBoYXNDaGlsZHJlbldpdGhUZXh0KG5vZGUsIHRleHRGaWx0ZXIpO1xuXG4gICAgcmV0dXJuIGNoZWNrTm9kZVRleHQobm9kZS50ZXh0Q29udGVudCk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG5vLXVuZGVmICovXG4iXX0=