UNPKG

@uuv/assistant

Version:

UUV Helper used to improve the life of testers and developers by generating cucumber phrases from the GUI.

158 lines (157 loc) 8.63 kB
"use strict"; /** * Software Name : UUV * * SPDX-License-Identifier: MIT * * This software is distributed under the MIT License, * see the "LICENSE" file for more details * * Authors: NJAKO MOLOM Louis Fredice & SERVICAL Stanley * Software description: Make test writing fast, understandable by any human * understanding English or French. */ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ExpectTranslator = void 0; const Commons_1 = require("../Commons"); const abstract_translator_1 = require("./abstract-translator"); const model_1 = require("./model"); const TextualTranslator = __importStar(require("./textual-translator")); const informative_nodes_helper_1 = require("../helper/informative-nodes-helper"); const dom_accessibility_api_1 = require("dom-accessibility-api"); const stepCase = model_1.StepCaseEnum.THEN; class ExpectTranslator extends abstract_translator_1.Translator { buildResponse(sentences) { const response = this.initResponse(); response.sentences = sentences.map(s => stepCase + s); return response; } getSentenceFromAccessibleRoleAndName(role, name) { const key = "key.then.element.withRoleAndName"; const sentence = this.computeSentenceFromKeyRoleAndName(key, role, name); return this.buildResponse([sentence]); } getSentenceFromAccessibleRoleAndNameAndContent(role, name, content) { const isDisabled = this.selectedHtmlElem.classList.contains(Commons_1.UUV_DISABLED_CLASS); const key = isDisabled ? "key.then.element.withRoleAndNameAndContentDisabled" : "key.then.element.withRoleAndNameAndContent"; const sentence = this.computeSentenceFromKeyRoleNameAndContent(key, role, name, content); return this.buildResponse([sentence]); } getSentenceFromDomSelector(domSelector, htmlElem) { const key = "key.then.element.withSelector"; const sentence = this.computeSentenceFromKeyAndSelector(key, domSelector); return this.buildResponse([sentence]); } computeTableSentenceFromKeyNameAndContent(sentenceKey, indefiniteArticle, roleName, accessibleName, headers, rows, cellRoleName) { var _a; if (!sentenceKey) { return ""; } const baseSentence = this.dictionary.getRoleBasedSentencesTemplate().find((v) => v.key === sentenceKey); const sentenceAvailable = `Then ${(_a = baseSentence === null || baseSentence === void 0 ? void 0 : baseSentence.wording) !== null && _a !== void 0 ? _a : ""}` .replace("$indefiniteArticle", `${indefiniteArticle}`) .replace("$roleName", `${roleName}`) .replace("{string}", `"${accessibleName}"`) .replace("{string}", ""); const headerValues = Array.from(headers.querySelectorAll("[role=columnheader], th")).map(c => (0, dom_accessibility_api_1.computeAccessibleName)(c)); const tableLines = ["| " + headerValues.join(" | ") + " |", "| " + headerValues.map(() => "---").join(" | ") + " |"]; rows.forEach(row => { const values = Array.from(row.querySelectorAll(`[role=${cellRoleName}], td, [role=columnheader], th`)).map(c => { if (c.classList.contains("ag-floating-filter")) { return Array.from(c.querySelectorAll("[role=button]:not(.ag-hidden [role=button]), button:not(.ag-hidden button)")).reduce((accumulator, button) => accumulator + (accumulator.length > 0 ? " " : "") + (0, dom_accessibility_api_1.computeAccessibleName)(button), ""); } return (0, dom_accessibility_api_1.computeAccessibleName)(c); }); tableLines.push("| " + values.join(" | ") + " |"); }); return sentenceAvailable + "\n" + this.formatMarkdownTable(tableLines).join("\n"); } computeDialogSentenceFromKeyNameAndContent(sentenceKey, accessibleName, row) { return __awaiter(this, void 0, void 0, function* () { const sentences = [`Then ${this.computeSentenceFromKeyRoleAndName(sentenceKey, "dialog", accessibleName)}`]; const getSentencesForNode = (node) => __awaiter(this, void 0, void 0, function* () { var _a, _b; if (TextualTranslator.isTextualNode(node)) { const res = yield TextualTranslator.computeSentence(node); return (_a = res === null || res === void 0 ? void 0 : res.sentences) !== null && _a !== void 0 ? _a : []; } const res = yield this.translate(node); return (_b = res === null || res === void 0 ? void 0 : res.sentences) !== null && _b !== void 0 ? _b : []; }); const handleElement = (element) => __awaiter(this, void 0, void 0, function* () { if (element.children.length === 1) { const informativeChildren = yield new informative_nodes_helper_1.InformativeNodesHelper().getAvailableChildren(element); for (const child of informativeChildren) { sentences.push(...(yield getSentencesForNode(child))); } } else { sentences.push(...(yield getSentencesForNode(element))); } }); yield Promise.all(Array.from(row.children).map(el => handleElement(el))); return sentences; }); } formatMarkdownTable(lines) { const headerLine = lines.find(line => !/^ *\|? *-+/.test(line)); const separatorLine = lines.find(line => /^ *\|? *-+/.test(line)); const dataLines = lines.filter(line => line !== headerLine && line !== separatorLine && line.trim()); const parse = (line) => line .replace(/^\||\|$/g, "") .split("|") .map(cell => cell.trim()); const header = parse(headerLine); const rows = dataLines.map(parse); const colCount = Math.max(header.length, ...rows.map(r => r.length)); const colWidths = Array(colCount).fill(0); [header, ...rows].forEach(r => r.forEach((cell, i) => (colWidths[i] = Math.max(colWidths[i], cell.length)))); const FORMAT_PREFFIX = " "; const formatRow = (row) => FORMAT_PREFFIX + "| " + row.map((cell, i) => cell.padEnd(colWidths[i])).join(" | ") + " |"; const separator = FORMAT_PREFFIX + "| " + colWidths.map(w => "-".repeat(w)).join(" | ") + " |"; return [formatRow(header), separator, ...rows.map(formatRow)]; } } exports.ExpectTranslator = ExpectTranslator;