eslint-plugin-ui-testing
Version:
ESLint rules for UI testing tools WebdriverIO, Cypress, TestCafe, Playwright, Puppeteer
55 lines (54 loc) • 2.24 kB
JavaScript
;
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' });
}
},
};
},
});