UNPKG

askui

Version:

Reliable, automated end-to-end-testing that depends on what is shown on your screen instead of the technology you are running on

101 lines (100 loc) 4.68 kB
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()); }); }; import { DefaultStep } from './default-step'; import { logger } from '../../lib/logger'; import { maxSnapshotDetailLevel } from './snapshot-detail-level'; function buildReportersWithPromiseQueue(reporter) { if (reporter === undefined) { return []; } if (Array.isArray(reporter)) { return reporter.map((r) => ({ reporter: r, promiseQueue: Promise.resolve(), })); } return [ { reporter, promiseQueue: Promise.resolve(), }, ]; } export class StepReporter { constructor(reporter) { this.reporters = buildReportersWithPromiseQueue(reporter); this.config = { withScreenshots: maxSnapshotDetailLevel(...this.reporters.map((r) => { var _a, _b; return (_b = (_a = r.reporter.config) === null || _a === void 0 ? void 0 : _a.withScreenshots) !== null && _b !== void 0 ? _b : 'onFailure'; })), withDetectedElements: maxSnapshotDetailLevel(...this.reporters.map((r) => { var _a, _b; return (_b = (_a = r.reporter.config) === null || _a === void 0 ? void 0 : _a.withDetectedElements) !== null && _b !== void 0 ? _b : 'onFailure'; })), }; } flush() { return Promise.all(this.reporters.map((reporter) => reporter.promiseQueue)).then(() => { }); } get currentStep() { return this._currentStep; } resetStep(instruction) { this._currentStep = new DefaultStep(instruction); } enqueueReporterCalls(type, step) { this.reporters = this.reporters.map((reporter) => (Object.assign(Object.assign({}, reporter), { promiseQueue: reporter.promiseQueue .then(() => { var _a, _b, _c; return (_c = (_b = (_a = reporter.reporter)[type]) === null || _b === void 0 ? void 0 : _b.call(_a, step)) !== null && _c !== void 0 ? _c : Promise.resolve(); }) .catch((error) => { logger.error(error); return Promise.resolve(); }) }))); } onStepBegin(snapshot) { return __awaiter(this, void 0, void 0, function* () { if (this._currentStep === undefined) { logger.error('Cannot begin step if step is undefined.'); return Promise.resolve(); } if (this._currentStep.status !== 'pending') { logger.error('Cannot begin step that is not pending.'); return Promise.resolve(); } this._currentStep = this._currentStep.onBegin(snapshot); this.enqueueReporterCalls('onStepBegin', this._currentStep); return Promise.resolve(); }); } onStepRetry(snapshot, error) { return __awaiter(this, void 0, void 0, function* () { if (this._currentStep === undefined) { logger.error('Cannot retry step if step is undefined.'); return Promise.resolve(); } if (this._currentStep.status !== 'running') { logger.error('Cannot retry step that has not been running.'); return Promise.resolve(); } this._currentStep = this._currentStep.onRetry(snapshot, error); this.enqueueReporterCalls('onStepRetry', this._currentStep); return Promise.resolve(); }); } onStepEnd(snapshot, error) { return __awaiter(this, void 0, void 0, function* () { if (this._currentStep === undefined) { logger.error('Cannot end step if step is undefined.'); return Promise.resolve(); } if (this._currentStep.status !== 'running') { logger.error('Cannot end step that has not been running.'); return Promise.resolve(); } this._currentStep = this._currentStep.onEnd(snapshot, error); this.enqueueReporterCalls('onStepEnd', this._currentStep); return Promise.resolve(); }); } }