@uuv/assistant
Version:
UUV Helper used to improve the life of testers and developers by generating cucumber phrases from the GUI.
73 lines (72 loc) • 3.4 kB
JavaScript
;
/**
* 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 __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.FormCompletionService = void 0;
const type_translator_1 = require("../translator/type-translator");
const click_translator_1 = require("../translator/click-translator");
const dom_accessibility_api_1 = require("dom-accessibility-api");
const abstract_component_service_1 = require("./abstract-component-service");
class FormCompletionService extends abstract_component_service_1.AbstractComponentService {
constructor() {
super(...arguments);
this.typeTranslator = new type_translator_1.TypeTranslator();
this.clickTranslator = new click_translator_1.ClickTranslator();
}
buildResultSentence(selectedForm) {
return __awaiter(this, void 0, void 0, function* () {
const elementsForCompletion = [].slice.call(selectedForm.getElementsByTagName("input"));
elementsForCompletion.push(...[].slice.call(selectedForm.getElementsByTagName("button")));
const sentences = [];
let foundSubmitButton = false;
const promises = elementsForCompletion
.filter(element => !this.isDisabled(element) && !this.isHidden(element))
.map((formElement) => __awaiter(this, void 0, void 0, function* () {
if (!this.isButton(formElement) || (this.isSubmitButton(formElement) && !foundSubmitButton)) {
let translator = this.typeTranslator;
if (this.isSubmitButton(formElement)) {
translator = this.clickTranslator;
foundSubmitButton = true;
}
const result = yield translator.translate(formElement);
sentences.push(...result.sentences);
}
return Promise.resolve("");
}));
yield Promise.all(promises);
return sentences;
});
}
isButton(element) {
return (0, dom_accessibility_api_1.getRole)(element) === "button";
}
isSubmitButton(element) {
return this.isButton(element) && element.getAttribute("type") === "submit";
}
isDisabled(element) {
return element.disabled;
}
isHidden(element) {
return element.type === "hidden";
}
}
exports.FormCompletionService = FormCompletionService;