UNPKG

gauge-ts

Version:
68 lines (67 loc) 2.95 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.StepExecutionProcessor = void 0; const spec_pb_1 = require("../gen/spec_pb"); const StepRegistry_1 = require("../models/StepRegistry"); const Screenshot_1 = require("../screenshot/Screenshot"); const MessageStore_1 = require("../stores/MessageStore"); const ScreenshotStore_1 = require("../stores/ScreenshotStore"); const ExecutionProcessor_1 = require("./ExecutionProcessor"); class StepExecutionProcessor extends ExecutionProcessor_1.ExecutionProcessor { parsingChain; constructor(parameterParsingChain) { super(); this.parsingChain = parameterParsingChain; } async process(req) { if (!StepRegistry_1.default.isImplemented(req.getParsedsteptext())) { return Promise.resolve(this.executionError("Step Implementation not found")); } const result = await this.execute(req); return this.createExecutionResponse(result); } async execute(req) { const start = Date.now(); const result = new spec_pb_1.ProtoExecutionResult(); result.setFailed(false); const mi = StepRegistry_1.default.get(req.getParsedsteptext()); const params = req .getParametersList() .map((p) => this.parsingChain.parse(p)); const method = mi.getMethod(); try { if (method.length !== params.length) { throw new Error(`Argument length mismatch for \`${req.getActualsteptext()}\`.` + ` Actual Count: [${method.length}], Expected Count: [${params.length}]`); } await this.executeMethod(mi.getInstance(), method, params); } catch (err) { const error = err; result.setFailed(true); const cofErrors = StepRegistry_1.default.getContinueOnFailureFunctions(method); if (cofErrors?.includes(error.constructor.name)) { result.setRecoverableerror(true); } result.setErrormessage(error.message); result.setStacktrace(error.stack ?? ""); if (process.env.screenshot_on_failure !== "false") { const s = await Screenshot_1.Screenshot.capture(); result.setFailurescreenshotfile(s); } } result.setExecutiontime(Date.now() - start); result.setMessageList(MessageStore_1.MessageStore.pendingMessages()); result.setScreenshotfilesList(ScreenshotStore_1.ScreenshotStore.pendingScreenshots()); return result; } executionError(message) { const result = new spec_pb_1.ProtoExecutionResult(); result.setFailed(true); result.setRecoverableerror(false); result.setExecutiontime(0); result.setErrormessage(message); return this.createExecutionResponse(result); } } exports.StepExecutionProcessor = StepExecutionProcessor;