1 | ;
|
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
|
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
|
4 | };
|
5 | Object.defineProperty(exports, "__esModule", { value: true });
|
6 | const test_run_1 = require("../errors/test-run");
|
7 | const util_1 = __importDefault(require("util"));
|
8 | const runningTests = {};
|
9 | let handlingTestErrors = false;
|
10 | function printErrorMessagesAndTerminate(...messages) {
|
11 | // eslint-disable-next-line no-console
|
12 | messages.map(msg => console.log(msg));
|
13 | // eslint-disable-next-line no-process-exit
|
14 | setTimeout(() => process.exit(1), 0);
|
15 | }
|
16 | function handleTestRunError(ErrorCtor, message) {
|
17 | Object.values(runningTests).forEach(testRun => {
|
18 | testRun.addError(new ErrorCtor(message));
|
19 | removeRunningTest(testRun);
|
20 | });
|
21 | }
|
22 | function handleError(ErrorCtor, message) {
|
23 | if (handlingTestErrors)
|
24 | handleTestRunError(ErrorCtor, message);
|
25 | else
|
26 | printErrorMessagesAndTerminate(message);
|
27 | }
|
28 | function formatUnhandledRejectionReason(reason) {
|
29 | const reasonType = typeof reason;
|
30 | const isPrimitiveType = reasonType !== 'object' && reasonType !== 'function';
|
31 | if (isPrimitiveType)
|
32 | return String(reason);
|
33 | if (reason instanceof Error)
|
34 | return reason.stack;
|
35 | return util_1.default.inspect(reason, { depth: 2, breakLength: Infinity });
|
36 | }
|
37 | function formatError(ErrorCtor, error) {
|
38 | if (ErrorCtor === test_run_1.UncaughtExceptionError)
|
39 | return error.stack;
|
40 | if (ErrorCtor === test_run_1.UnhandledPromiseRejectionError)
|
41 | return formatUnhandledRejectionReason(error);
|
42 | return error;
|
43 | }
|
44 | function handleUnexpectedError(ErrorCtor, error) {
|
45 | try {
|
46 | handleError(ErrorCtor, formatError(ErrorCtor, error));
|
47 | }
|
48 | catch (e) {
|
49 | printErrorMessagesAndTerminate(error, e);
|
50 | }
|
51 | }
|
52 | function registerErrorHandlers() {
|
53 | process.on('unhandledRejection', e => handleUnexpectedError(test_run_1.UnhandledPromiseRejectionError, e));
|
54 | process.on('uncaughtException', e => handleUnexpectedError(test_run_1.UncaughtExceptionError, e));
|
55 | }
|
56 | exports.registerErrorHandlers = registerErrorHandlers;
|
57 | function addRunningTest(testRun) {
|
58 | runningTests[testRun.id] = testRun;
|
59 | }
|
60 | exports.addRunningTest = addRunningTest;
|
61 | function removeRunningTest(testRun) {
|
62 | if (testRun)
|
63 | delete runningTests[testRun.id];
|
64 | }
|
65 | exports.removeRunningTest = removeRunningTest;
|
66 | function startHandlingTestErrors() {
|
67 | handlingTestErrors = true;
|
68 | }
|
69 | exports.startHandlingTestErrors = startHandlingTestErrors;
|
70 | function stopHandlingTestErrors() {
|
71 | handlingTestErrors = false;
|
72 | }
|
73 | exports.stopHandlingTestErrors = stopHandlingTestErrors;
|
74 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlLWVycm9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9oYW5kbGUtZXJyb3JzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsaURBQTRGO0FBQzVGLGdEQUF3QjtBQUV4QixNQUFNLFlBQVksR0FBTyxFQUFFLENBQUM7QUFDNUIsSUFBSSxrQkFBa0IsR0FBRyxLQUFLLENBQUM7QUFFL0IsU0FBUyw4QkFBOEIsQ0FBRSxHQUFHLFFBQVE7SUFDaEQsc0NBQXNDO0lBQ3RDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFFdEMsMkNBQTJDO0lBQzNDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFFLFNBQVMsRUFBRSxPQUFPO0lBQzNDLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQzFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUV6QyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMvQixDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBRSxTQUFTLEVBQUUsT0FBTztJQUNwQyxJQUFJLGtCQUFrQjtRQUNsQixrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7O1FBRXZDLDhCQUE4QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2hELENBQUM7QUFFRCxTQUFTLDhCQUE4QixDQUFFLE1BQU07SUFDM0MsTUFBTSxVQUFVLEdBQVEsT0FBTyxNQUFNLENBQUM7SUFDdEMsTUFBTSxlQUFlLEdBQUcsVUFBVSxLQUFLLFFBQVEsSUFBSSxVQUFVLEtBQUssVUFBVSxDQUFDO0lBRTdFLElBQUksZUFBZTtRQUNmLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRTFCLElBQUksTUFBTSxZQUFZLEtBQUs7UUFDdkIsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBRXhCLE9BQU8sY0FBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBQ3JFLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBRSxTQUFTLEVBQUUsS0FBSztJQUNsQyxJQUFJLFNBQVMsS0FBSyxpQ0FBc0I7UUFDcEMsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDO0lBRXZCLElBQUksU0FBUyxLQUFLLHlDQUE4QjtRQUM1QyxPQUFPLDhCQUE4QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRWpELE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUM7QUFFRCxTQUFTLHFCQUFxQixDQUFFLFNBQVMsRUFBRSxLQUFLO0lBQzVDLElBQUk7UUFDQSxXQUFXLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztLQUN6RDtJQUNELE9BQU8sQ0FBQyxFQUFFO1FBQ04sOEJBQThCLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQzVDO0FBQ0wsQ0FBQztBQUVELFNBQWdCLHFCQUFxQjtJQUNqQyxPQUFPLENBQUMsRUFBRSxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMscUJBQXFCLENBQUMseUNBQThCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRyxPQUFPLENBQUMsRUFBRSxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMscUJBQXFCLENBQUMsaUNBQXNCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRixDQUFDO0FBSEQsc0RBR0M7QUFFRCxTQUFnQixjQUFjLENBQUUsT0FBTztJQUNuQyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQztBQUN2QyxDQUFDO0FBRkQsd0NBRUM7QUFFRCxTQUFnQixpQkFBaUIsQ0FBRSxPQUFPO0lBQ3RDLElBQUksT0FBTztRQUNQLE9BQU8sWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBSEQsOENBR0M7QUFFRCxTQUFnQix1QkFBdUI7SUFDbkMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO0FBQzlCLENBQUM7QUFGRCwwREFFQztBQUVELFNBQWdCLHNCQUFzQjtJQUNsQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7QUFDL0IsQ0FBQztBQUZELHdEQUVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVW5oYW5kbGVkUHJvbWlzZVJlamVjdGlvbkVycm9yLCBVbmNhdWdodEV4Y2VwdGlvbkVycm9yIH0gZnJvbSAnLi4vZXJyb3JzL3Rlc3QtcnVuJztcbmltcG9ydCB1dGlsIGZyb20gJ3V0aWwnO1xuXG5jb25zdCBydW5uaW5nVGVzdHMgICAgID0ge307XG5sZXQgaGFuZGxpbmdUZXN0RXJyb3JzID0gZmFsc2U7XG5cbmZ1bmN0aW9uIHByaW50RXJyb3JNZXNzYWdlc0FuZFRlcm1pbmF0ZSAoLi4ubWVzc2FnZXMpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIG1lc3NhZ2VzLm1hcChtc2cgPT4gY29uc29sZS5sb2cobXNnKSk7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvY2Vzcy1leGl0XG4gICAgc2V0VGltZW91dCgoKSA9PiBwcm9jZXNzLmV4aXQoMSksIDApO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVUZXN0UnVuRXJyb3IgKEVycm9yQ3RvciwgbWVzc2FnZSkge1xuICAgIE9iamVjdC52YWx1ZXMocnVubmluZ1Rlc3RzKS5mb3JFYWNoKHRlc3RSdW4gPT4ge1xuICAgICAgICB0ZXN0UnVuLmFkZEVycm9yKG5ldyBFcnJvckN0b3IobWVzc2FnZSkpO1xuXG4gICAgICAgIHJlbW92ZVJ1bm5pbmdUZXN0KHRlc3RSdW4pO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVFcnJvciAoRXJyb3JDdG9yLCBtZXNzYWdlKSB7XG4gICAgaWYgKGhhbmRsaW5nVGVzdEVycm9ycylcbiAgICAgICAgaGFuZGxlVGVzdFJ1bkVycm9yKEVycm9yQ3RvciwgbWVzc2FnZSk7XG4gICAgZWxzZVxuICAgICAgICBwcmludEVycm9yTWVzc2FnZXNBbmRUZXJtaW5hdGUobWVzc2FnZSk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVuaGFuZGxlZFJlamVjdGlvblJlYXNvbiAocmVhc29uKSB7XG4gICAgY29uc3QgcmVhc29uVHlwZSAgICAgID0gdHlwZW9mIHJlYXNvbjtcbiAgICBjb25zdCBpc1ByaW1pdGl2ZVR5cGUgPSByZWFzb25UeXBlICE9PSAnb2JqZWN0JyAmJiByZWFzb25UeXBlICE9PSAnZnVuY3Rpb24nO1xuXG4gICAgaWYgKGlzUHJpbWl0aXZlVHlwZSlcbiAgICAgICAgcmV0dXJuIFN0cmluZyhyZWFzb24pO1xuXG4gICAgaWYgKHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yKVxuICAgICAgICByZXR1cm4gcmVhc29uLnN0YWNrO1xuXG4gICAgcmV0dXJuIHV0aWwuaW5zcGVjdChyZWFzb24sIHsgZGVwdGg6IDIsIGJyZWFrTGVuZ3RoOiBJbmZpbml0eSB9KTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0RXJyb3IgKEVycm9yQ3RvciwgZXJyb3IpIHtcbiAgICBpZiAoRXJyb3JDdG9yID09PSBVbmNhdWdodEV4Y2VwdGlvbkVycm9yKVxuICAgICAgICByZXR1cm4gZXJyb3Iuc3RhY2s7XG5cbiAgICBpZiAoRXJyb3JDdG9yID09PSBVbmhhbmRsZWRQcm9taXNlUmVqZWN0aW9uRXJyb3IpXG4gICAgICAgIHJldHVybiBmb3JtYXRVbmhhbmRsZWRSZWplY3Rpb25SZWFzb24oZXJyb3IpO1xuXG4gICAgcmV0dXJuIGVycm9yO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVVbmV4cGVjdGVkRXJyb3IgKEVycm9yQ3RvciwgZXJyb3IpIHtcbiAgICB0cnkge1xuICAgICAgICBoYW5kbGVFcnJvcihFcnJvckN0b3IsIGZvcm1hdEVycm9yKEVycm9yQ3RvciwgZXJyb3IpKTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgcHJpbnRFcnJvck1lc3NhZ2VzQW5kVGVybWluYXRlKGVycm9yLCBlKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckVycm9ySGFuZGxlcnMgKCkge1xuICAgIHByb2Nlc3Mub24oJ3VuaGFuZGxlZFJlamVjdGlvbicsIGUgPT4gaGFuZGxlVW5leHBlY3RlZEVycm9yKFVuaGFuZGxlZFByb21pc2VSZWplY3Rpb25FcnJvciwgZSkpO1xuICAgIHByb2Nlc3Mub24oJ3VuY2F1Z2h0RXhjZXB0aW9uJywgZSA9PiBoYW5kbGVVbmV4cGVjdGVkRXJyb3IoVW5jYXVnaHRFeGNlcHRpb25FcnJvciwgZSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkUnVubmluZ1Rlc3QgKHRlc3RSdW4pIHtcbiAgICBydW5uaW5nVGVzdHNbdGVzdFJ1bi5pZF0gPSB0ZXN0UnVuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlUnVubmluZ1Rlc3QgKHRlc3RSdW4pIHtcbiAgICBpZiAodGVzdFJ1bilcbiAgICAgICAgZGVsZXRlIHJ1bm5pbmdUZXN0c1t0ZXN0UnVuLmlkXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0SGFuZGxpbmdUZXN0RXJyb3JzICgpIHtcbiAgICBoYW5kbGluZ1Rlc3RFcnJvcnMgPSB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RvcEhhbmRsaW5nVGVzdEVycm9ycyAoKSB7XG4gICAgaGFuZGxpbmdUZXN0RXJyb3JzID0gZmFsc2U7XG59XG4iXX0= |
\ | No newline at end of file |