UNPKG

playwright-trx-reporter

Version:

TRX reporter for playwright

102 lines (101 loc) 4.63 kB
"use strict"; 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()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.TrxReporter = void 0; const path_1 = __importDefault(require("path")); const fs_1 = require("fs"); const serialization_1 = require("./serialization"); const utils_1 = require("./utils"); const trxWriter_1 = require("./trxWriter"); const outputFileEnv = 'PLAYWRIGHT_TRX_OUTPUT_NAME'; const runUserEnv = 'PLAYWRIGHT_TRX_RUN_USER_NAME'; const logPrefix = 'pw_trx_reporter: '; class TrxReporter { constructor(options = {}) { var _a, _b, _c; this.verbose = false; const outputFilePath = (typeof options.outputFile === 'string' ? options.outputFile : undefined) || process.env[outputFileEnv]; this.outputFileInfo = outputFilePath !== null && outputFilePath !== void 0 ? outputFilePath : options.outputFile; this.ownerAnnotation = (_a = options.ownerAnnotation) !== null && _a !== void 0 ? _a : 'owner'; this.priorityAnnotation = (_b = options.priorityAnnotation) !== null && _b !== void 0 ? _b : 'priority'; this.verbose = (_c = options.verbose) !== null && _c !== void 0 ? _c : false; } log(str) { console.log(logPrefix + str); } warn(str) { console.log(logPrefix + str); } printsToStdio() { return !this.outputFileInfo; } onBegin(config, suite) { this.config = config; this.suite = suite; this.startTimeDate = new Date(); this.totalTestCount = suite.allTests().length; } onEnd(result) { return __awaiter(this, void 0, void 0, function* () { const endTime = new Date(); const finalRunUser = process.env[runUserEnv] || utils_1.runUser; const finalTrxsBuilder = typeof this.outputFileInfo === 'string' ? new trxWriter_1.SingleTrxBuilder() : new trxWriter_1.MultiTrxsBuilder(); const testRuns = finalTrxsBuilder.analytics(this.suite, { ownerAnnotation: this.ownerAnnotation, priorityAnnotation: this.priorityAnnotation, testRunBuilderOptions: { id: (0, utils_1.createUuid)(), name: `${finalRunUser} ${this.startTimeDate.toISOString()}`, startTime: this.startTimeDate.toISOString(), endTime: endTime.toISOString(), runUser: finalRunUser, }, }); const tasks = testRuns.map((testRun, index) => __awaiter(this, void 0, void 0, function* () { const lines = []; (0, serialization_1.serialize2Xml)(lines, 'TestRun', testRun, true); const reportString = lines.join('\n'); const outputFile = getFilePath(this.outputFileInfo, index); if (outputFile) { yield fs_1.promises.mkdir(path_1.default.dirname(outputFile), { recursive: true }); yield fs_1.promises.writeFile(outputFile, reportString); if (this.verbose) { console.log(`${logPrefix} writing file to ${outputFile}`); } } else { console.log(reportString); } })); yield Promise.all(tasks); }); } } exports.TrxReporter = TrxReporter; function getFilePath(info, index) { switch (true) { // single file output case typeof info === 'string': return info; // multi file output case typeof info === 'object': { const { folder, prefix } = info; return path_1.default.resolve(folder, `${prefix}_${index}.trx`); } // console output case info === undefined: default: return undefined; } }