UNPKG

eslint-plugin-ui-testing

Version:

ESLint rules for UI testing tools WebdriverIO, Cypress, TestCafe, Playwright, Puppeteer

55 lines (54 loc) 2.24 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.RULE_NAME = void 0; var data_1 = require("../data/data"); var utils_1 = require("../utils/utils"); function isCssPageLayoutSelector(value) { var nonCssPattern = new RegExp('^(([/]|[(]|(../)|(./)|(\\*/))|(=)|(-)|(\\*=)|([a-z][=])|(~)|(<))'); var cssPageLayoutPattern = new RegExp('(\\S+((\\s+[>]\\s+)|(\\s+))\\S+){2,}'); return !nonCssPattern.test(value) && cssPageLayoutPattern.test(value); } exports.RULE_NAME = __filename.slice(__dirname.length + 1, -3); exports.default = (0, utils_1.createRule)({ name: exports.RULE_NAME, meta: { docs: { description: 'Disallow css selector tied to page layout', recommended: 'error', }, messages: { noAutomationToolSet: data_1.NO_AUTOMATION_TOOL_SET_MESSAGE, noCssPageLayoutSelector: 'Avoid css selector tied to page layout', }, schema: [ { type: 'string', default: '', additionalProperties: false, }, ], type: 'suggestion', }, defaultOptions: [null], create: function (context, _a) { var automationApi = _a[0]; if (!automationApi) { context.report({ loc: data_1.LOC_SOF, messageId: 'noAutomationToolSet' }); } var selectorCommands = (0, utils_1.getSelectorCommands)(automationApi); return { 'CallExpression[callee.object.name][callee.property.name]': function rule(node) { if ((0, utils_1.isObjectPropertyNameInCommands)(node, selectorCommands) && isCssPageLayoutSelector((0, utils_1.getArgumentValue)(node))) { context.report({ node: node, messageId: 'noCssPageLayoutSelector' }); } }, 'CallExpression[callee.name]': function rule(node) { if ((0, utils_1.isCalleeNameInCommands)(node, selectorCommands) && isCssPageLayoutSelector((0, utils_1.getArgumentValue)(node))) { context.report({ node: node, messageId: 'noCssPageLayoutSelector' }); } }, }; }, });