gauge-ts
Version:
Typescript runner for Gauge
68 lines (67 loc) • 2.95 kB
JavaScript
;
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;