beater
Version:
beater: bouzuya's easy test runner. it is inspired by eater.
132 lines (119 loc) • 3.65 kB
JavaScript
;
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;