UNPKG

cumulocity-cypress

Version:
131 lines (127 loc) 4.25 kB
'use strict'; var _ = require('lodash'); var util = require('../util-CJ8J1x_Y.js'); 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;