UNPKG

beater

Version:

beater: bouzuya's easy test runner. it is inspired by eater.

132 lines (119 loc) 3.65 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.runWithOptions = void 0; var __awaiter = void 0 && (void 0).__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()); }); }; const parseStack = stack => { if (stack === null) return null; const line = stack.split("\n")[1]; if (typeof line === "undefined") return null; const match = line.match(/\(?([^:]+):(\d+):(\d+)\)?$/); if (match === null) return null; const fileName = match[1]; const lineNumber = parseInt(match[2], 10); const columnNumber = parseInt(match[3], 10); return { columnNumber, fileName, lineNumber }; }; const error = e => { var _a, _b, _c; if (typeof e === "object") { const name = typeof e.name === "string" ? e.name : "Error"; const message = typeof e.message === "string" ? e.message : ""; const stack = typeof e.stack === "string" ? e.stack : null; const parsedStack = parseStack(stack); return { columnNumber: typeof e.columnNumber === "number" ? e.columnNumber : (_a = parsedStack === null || parsedStack === void 0 ? void 0 : parsedStack.columnNumber) !== null && _a !== void 0 ? _a : null, fileName: typeof e.fileName === "string" ? e.fileName : (_b = parsedStack === null || parsedStack === void 0 ? void 0 : parsedStack.fileName) !== null && _b !== void 0 ? _b : null, lineNumber: typeof e.lineNumber === "number" ? e.lineNumber : (_c = parsedStack === null || parsedStack === void 0 ? void 0 : parsedStack.lineNumber) !== null && _c !== void 0 ? _c : null, message, name, stack }; } else { const name = "Error"; const message = String(e); return { columnNumber: null, lineNumber: null, fileName: null, message, name, stack: null }; } }; const callTestFn = test => __awaiter(void 0, void 0, void 0, function* () { try { yield test(); return { test }; } catch (e) { return { error: error(e), test }; } }); const runTestWithOptions = options => { return test => __awaiter(void 0, void 0, void 0, function* () { const { reporter } = options; reporter.testStarted(test); const result = yield callTestFn(test); reporter.testFinished(result); return result; }); }; const runWithOptions = options => { const runTest = runTestWithOptions(options); return tests => __awaiter(void 0, void 0, void 0, function* () { const { reporter } = options; reporter.started(tests); const results = []; yield tests.reduce((promise, test) => __awaiter(void 0, void 0, void 0, function* () { yield promise; const result = yield runTest(test); results.push(result); }), Promise.resolve()); reporter.finished(results); return results.some(({ error }) => typeof error !== "undefined") ? Promise.reject(results) : Promise.resolve(results); }); }; exports.runWithOptions = runWithOptions;