eslint-plugin-ui-testing
Version:
ESLint rules for UI testing tools WebdriverIO, Cypress, TestCafe, Playwright, Puppeteer
156 lines (155 loc) • 5.36 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.getBrowserObjectNames = exports.getOpenUrlCommands = exports.getSelectorCommands = exports.getWaitCommandsNotInTest = exports.getHardWaitCommands = exports.isCalleeNameInCommands = exports.isObjectPropertyNameInCommands = exports.getArgumentValue = exports.createRule = void 0;
var experimental_utils_1 = require("@typescript-eslint/experimental-utils");
var path_1 = require("path");
function getCommandRegExp(command) {
return new RegExp("^" + command.replace('.', '[.]') + "$");
}
exports.createRule = experimental_utils_1.ESLintUtils.RuleCreator(function (name) {
var ruleName = (0, path_1.parse)(name).name;
return "https://github.com/kwoding/eslint-plugin-ui-testing/tree/master/docs/rules/" + ruleName + ".md";
});
function getArgumentValue(node) {
if (node.arguments.length && 'quasis' in node.arguments[0]) {
return node.arguments[0].quasis.map(function (x) { return x.value.cooked; }).join('');
}
return node.arguments.length ? node.arguments[0].value : '';
}
exports.getArgumentValue = getArgumentValue;
function isObjectPropertyNameInCommands(node, commands) {
return (commands.some(function (command) { return getCommandRegExp(command).test(node.callee.object.name + "." + node.callee.property.name); })
|| commands.some(function (command) { return getCommandRegExp(command).test("." + node.callee.property.name); }));
}
exports.isObjectPropertyNameInCommands = isObjectPropertyNameInCommands;
function isCalleeNameInCommands(node, commands) {
return commands.some(function (command) { return getCommandRegExp(command).test("" + node.callee.name); });
}
exports.isCalleeNameInCommands = isCalleeNameInCommands;
function getHardWaitCommands(automationTool) {
switch (automationTool) {
case 'cypress':
return ['cy.wait'];
case 'playwright':
return ['.waitForTimeout'];
case 'puppeteer':
return ['.waitFor'];
case 'testcafe':
return ['t.wait'];
case 'webdriverio':
return ['browser.pause'];
default:
return [];
}
}
exports.getHardWaitCommands = getHardWaitCommands;
function getWaitCommandsNotInTest(automationTool) {
switch (automationTool) {
case 'testcafe':
return ['t.wait'];
case 'playwright':
return ['.waitFor(\\D+)'];
case 'puppeteer':
return ['.waitFor', '.waitFor(\\D+)'];
case 'webdriverio':
return ['browser.pause', '.waitUntil', '.waitFor(\\D+)'];
case 'cypress':
default:
return [];
}
}
exports.getWaitCommandsNotInTest = getWaitCommandsNotInTest;
function getSelectorCommands(automationTool) {
switch (automationTool) {
case 'cypress':
return ['cy.get'];
case 'playwright':
return [
'.[\\$]',
'.(\\$\\$)',
'.[\\$]eval',
'.(\\$\\$)eval',
'.check',
'.click',
'.dblclick',
'.dispatchEvent',
'.fill',
'.focus',
'.getAttribute',
'.hover',
'.innerHTML',
'.innerText',
'.press',
'.selectOption',
'.setInputFiles',
'.textContent',
'.type',
'.uncheck',
'.waitForSelector',
];
case 'puppeteer':
return [
'.[\\$]',
'.(\\$\\$)',
'.[\\$]eval',
'.(\\$\\$)eval',
'.click',
'.focus',
'.hover',
'.select',
'.tap',
'.type',
'.waitFor',
'.waitForSelector',
];
case 'testcafe':
return [
'Selector',
't.click',
't.doubleClick',
't.rightClick',
't.typeText',
't.selectText',
't.hover',
't.drag',
't.setFilesToUpload',
't.takeElementScreenshot',
't.switchToIframe',
];
case 'webdriverio':
return ['[\\$]', '(\\$\\$)'];
default:
return [];
}
}
exports.getSelectorCommands = getSelectorCommands;
function getOpenUrlCommands(automationTool) {
switch (automationTool) {
case 'cypress':
return ['cy.visit'];
case 'playwright':
case 'puppeteer':
return ['.goto'];
case 'testcafe':
return ['fixture.page', 't.page'];
case 'webdriverio':
return ['browser.url'];
default:
return [];
}
}
exports.getOpenUrlCommands = getOpenUrlCommands;
function getBrowserObjectNames(automationTool) {
switch (automationTool) {
case 'playwright':
case 'puppeteer':
return ['page'];
case 'webdriverio':
return ['browser'];
case 'cypress':
case 'testcafe':
default:
return [];
}
}
exports.getBrowserObjectNames = getBrowserObjectNames;