cumulocity-cypress
Version:
Cypress commands for Cumulocity IoT
133 lines (129 loc) • 4.3 kB
JavaScript
;
var _ = require('lodash');
var util = require('../util-C7wrzo9A.js');
require('set-cookie-parser');
require('cookie');
function getSelector(selector, predefined, language) {
if (!selector)
return undefined;
const getResolvedSelector = (name) => {
if (!predefined)
return name;
let result = name;
if (_.isArray(predefined)) {
for (const item of predefined) {
const sortedKeys = Object.keys(item).sort((a, b) => b.length - a.length);
for (const key of sortedKeys) {
result = result.split(key).join(item[key]);
}
}
}
else {
const sortedKeys = Object.keys(predefined).sort((a, b) => b.length - a.length);
for (const key of sortedKeys) {
result = result.split(key).join(predefined[key]);
}
}
return result;
};
if (_.isArray(selector)) {
return selector.map((s) => getResolvedSelector(s)).join(" ");
}
if (_.isString(selector)) {
return getResolvedSelector(selector);
}
if (_.isPlainObject(selector)) {
if (language != null) {
if ("localized" in selector) {
return selector.localized[language];
}
if ("language" in selector) {
const l = selector.language;
if (_.isArray(l) && !l.includes(language)) {
return undefined;
}
else if (_.isString(l) && l !== language) {
return undefined;
}
}
}
if ("data-cy" in selector) {
return `[data-cy=${_.get(selector, "data-cy")}]`;
}
if ("selector" in selector) {
return getSelector(selector.selector, predefined);
}
}
return undefined;
}
/**
* Simple parser for parsing DOM selector components into an array
* representing its sub-selectors. Its only used to get the individual
* sub-selectors from a compound selector string without analyzing the
* actual structure of the component.
* @param {string} selector - The selector string to parse
* @returns {string[]} - The selector components as an array
*/
function parseSelector(selector) {
const result = [];
let buffer = "";
let inBrackets = false;
let inParentheses = false;
for (let i = 0; i < selector.length; i++) {
const char = selector[i];
if (char === "[") {
inBrackets = true;
}
else if (char === "]") {
inBrackets = false;
}
else if (char === "(") {
inParentheses = true;
}
else if (char === ")") {
inParentheses = false;
}
if ((char === " " || char === ">") && !inBrackets && !inParentheses) {
if (buffer.trim()) {
result.push(buffer.trim());
}
buffer = "";
}
else {
buffer += char;
}
}
if (buffer.trim()) {
result.push(buffer.trim());
}
return result;
}
function imageName(name, language) {
const n = name.replace(/.png$/i, "");
return language ? `${n}_${language}` : n;
}
function buildTestHierarchyWithOptions(objects, options) {
return util.buildTestHierarchy(objects, (item) => {
if (options.tags != null && item.tags != null) {
if (_.intersection(options.tags, util.to_array(item.tags) ?? []).length === 0) {
return undefined;
}
}
const titles = util.to_array(item.title) ?? item.image?.split(/[/\\]/);
if (options.titles != null && titles != null && !_.isEmpty(titles)) {
if (!options.titles.every((title, index) => titles[index] === title)) {
return undefined;
}
}
if (options.images != null && item.image != null) {
if (!options.images.includes(item.image)) {
return undefined;
}
}
return titles;
});
}
exports.buildTestHierarchyWithOptions = buildTestHierarchyWithOptions;
exports.getSelector = getSelector;
exports.imageName = imageName;
exports.parseSelector = parseSelector;