Simon Priet 9e2991e668 init
2021-09-05 22:53:58 +02:00

162 lines
12 KiB
JavaScript

'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _bluebird = require('bluebird');
var _bluebird2 = _interopRequireDefault(_bluebird);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
var _lodash = require('lodash');
var _lodash2 = _interopRequireDefault(_lodash);
var _helpers = require('../formatter/helpers');
var _stack_trace_filter = require('./stack_trace_filter');
var _stack_trace_filter2 = _interopRequireDefault(_stack_trace_filter);
var _status = require('../status');
var _status2 = _interopRequireDefault(_status);
var _test_case_runner = require('./test_case_runner');
var _test_case_runner2 = _interopRequireDefault(_test_case_runner);
var _user_code_runner = require('../user_code_runner');
var _user_code_runner2 = _interopRequireDefault(_user_code_runner);
var _verror = require('verror');
var _verror2 = _interopRequireDefault(_verror);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var Runtime = function () {
// options - {dryRun, failFast, filterStacktraces, strict}
function Runtime(_ref) {
var eventBroadcaster = _ref.eventBroadcaster,
options = _ref.options,
supportCodeLibrary = _ref.supportCodeLibrary,
testCases = _ref.testCases;
(0, _classCallCheck3.default)(this, Runtime);
this.eventBroadcaster = eventBroadcaster;
this.options = options || {};
this.stackTraceFilter = new _stack_trace_filter2.default();
this.supportCodeLibrary = supportCodeLibrary;
this.testCases = testCases || [];
this.result = {
duration: 0,
success: true
};
}
(0, _createClass3.default)(Runtime, [{
key: 'runTestRunHooks',
value: function () {
var _ref2 = (0, _bluebird.coroutine)(function* (key, name) {
var _this = this;
yield _bluebird2.default.each(this.supportCodeLibrary[key], function () {
var _ref3 = (0, _bluebird.coroutine)(function* (hookDefinition) {
var _ref4 = yield _user_code_runner2.default.run({
argsArray: [],
fn: hookDefinition.code,
thisArg: null,
timeoutInMilliseconds: hookDefinition.options.timeout || _this.supportCodeLibrary.defaultTimeout
}),
error = _ref4.error;
if (error) {
var location = (0, _helpers.formatLocation)(hookDefinition);
throw new _verror2.default(error, name + ' hook errored, process exiting: ' + location);
}
});
return function (_x3) {
return _ref3.apply(this, arguments);
};
}());
});
function runTestRunHooks(_x, _x2) {
return _ref2.apply(this, arguments);
}
return runTestRunHooks;
}()
}, {
key: 'runTestCase',
value: function () {
var _ref5 = (0, _bluebird.coroutine)(function* (testCase) {
var skip = this.options.dryRun || this.options.failFast && !this.result.success;
var testCaseRunner = new _test_case_runner2.default({
eventBroadcaster: this.eventBroadcaster,
skip: skip,
supportCodeLibrary: this.supportCodeLibrary,
testCase: testCase,
worldParameters: this.options.worldParameters
});
var testCaseResult = yield testCaseRunner.run();
if (testCaseResult.duration) {
this.result.duration += testCaseResult.duration;
}
if (this.shouldCauseFailure(testCaseResult.status)) {
this.result.success = false;
}
});
function runTestCase(_x4) {
return _ref5.apply(this, arguments);
}
return runTestCase;
}()
}, {
key: 'start',
value: function () {
var _ref6 = (0, _bluebird.coroutine)(function* () {
if (this.options.filterStacktraces) {
this.stackTraceFilter.filter();
}
this.eventBroadcaster.emit('test-run-started');
yield this.runTestRunHooks('beforeTestRunHookDefinitions', 'a BeforeAll');
yield _bluebird2.default.each(this.testCases, this.runTestCase.bind(this));
yield this.runTestRunHooks('afterTestRunHookDefinitions', 'an AfterAll');
this.eventBroadcaster.emit('test-run-finished', { result: this.result });
if (this.options.filterStacktraces) {
this.stackTraceFilter.unfilter();
}
return this.result.success;
});
function start() {
return _ref6.apply(this, arguments);
}
return start;
}()
}, {
key: 'shouldCauseFailure',
value: function shouldCauseFailure(status) {
return _lodash2.default.includes([_status2.default.AMBIGUOUS, _status2.default.FAILED, _status2.default.UNDEFINED], status) || status === _status2.default.PENDING && this.options.strict;
}
}]);
return Runtime;
}();
exports.default = Runtime;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL2luZGV4LmpzIl0sIm5hbWVzIjpbIlJ1bnRpbWUiLCJldmVudEJyb2FkY2FzdGVyIiwib3B0aW9ucyIsInN1cHBvcnRDb2RlTGlicmFyeSIsInRlc3RDYXNlcyIsInN0YWNrVHJhY2VGaWx0ZXIiLCJyZXN1bHQiLCJkdXJhdGlvbiIsInN1Y2Nlc3MiLCJrZXkiLCJuYW1lIiwiZWFjaCIsImhvb2tEZWZpbml0aW9uIiwicnVuIiwiYXJnc0FycmF5IiwiZm4iLCJjb2RlIiwidGhpc0FyZyIsInRpbWVvdXRJbk1pbGxpc2Vjb25kcyIsInRpbWVvdXQiLCJkZWZhdWx0VGltZW91dCIsImVycm9yIiwibG9jYXRpb24iLCJ0ZXN0Q2FzZSIsInNraXAiLCJkcnlSdW4iLCJmYWlsRmFzdCIsInRlc3RDYXNlUnVubmVyIiwid29ybGRQYXJhbWV0ZXJzIiwidGVzdENhc2VSZXN1bHQiLCJzaG91bGRDYXVzZUZhaWx1cmUiLCJzdGF0dXMiLCJmaWx0ZXJTdGFja3RyYWNlcyIsImZpbHRlciIsImVtaXQiLCJydW5UZXN0UnVuSG9va3MiLCJydW5UZXN0Q2FzZSIsInVuZmlsdGVyIiwiaW5jbHVkZXMiLCJBTUJJR1VPVVMiLCJGQUlMRUQiLCJVTkRFRklORUQiLCJQRU5ESU5HIiwic3RyaWN0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7OztBQUNBOztBQUVBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7OztJQUVxQkEsTztBQUNuQjtBQUNBLHlCQUEwRTtBQUFBLFFBQTVEQyxnQkFBNEQsUUFBNURBLGdCQUE0RDtBQUFBLFFBQTFDQyxPQUEwQyxRQUExQ0EsT0FBMEM7QUFBQSxRQUFqQ0Msa0JBQWlDLFFBQWpDQSxrQkFBaUM7QUFBQSxRQUFiQyxTQUFhLFFBQWJBLFNBQWE7QUFBQTs7QUFDeEUsU0FBS0gsZ0JBQUwsR0FBd0JBLGdCQUF4QjtBQUNBLFNBQUtDLE9BQUwsR0FBZUEsV0FBVyxFQUEx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U0FBekMsQ0FBWCxFQUFnRVYsTUFBaEUsS0FDQ0EsV0FBVyxpQkFBT1csT0FBbEIsSUFBNkIsS0FBS3hDLE9BQUwsQ0FBYXlDLE1BRjdDO0FBSUQ7Ozs7O2tCQXpFa0IzQyxPIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJ1xuaW1wb3J0IHsgZm9ybWF0TG9jYXRpb24gfSBmcm9tICcuLi9mb3JtYXR0ZXIvaGVscGVycydcbmltcG9ydCBQcm9taXNlIGZyb20gJ2JsdWViaXJkJ1xuaW1wb3J0IFN0YWNrVHJhY2VGaWx0ZXIgZnJvbSAnLi9zdGFja190cmFjZV9maWx0ZXInXG5pbXBvcnQgU3RhdHVzIGZyb20gJy4uL3N0YXR1cydcbmltcG9ydCBUZXN0Q2FzZVJ1bm5lciBmcm9tICcuL3Rlc3RfY2FzZV9ydW5uZXInXG5pbXBvcnQgVXNlckNvZGVSdW5uZXIgZnJvbSAnLi4vdXNlcl9jb2RlX3J1bm5lcidcbmltcG9ydCBWRXJyb3IgZnJvbSAndmVycm9yJ1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdW50aW1lIHtcbiAgLy8gb3B0aW9ucyAtIHtkcnlSdW4sIGZhaWxGYXN0LCBmaWx0ZXJTdGFja3RyYWNlcywgc3RyaWN0fVxuICBjb25zdHJ1Y3Rvcih7IGV2ZW50QnJvYWRjYXN0ZXIsIG9wdGlvbnMsIHN1cHBvcnRDb2RlTGlicmFyeSwgdGVzdENhc2VzIH0pIHtcbiAgICB0aGlzLmV2ZW50QnJvYWRjYXN0ZXIgPSBldmVudEJyb2FkY2FzdGVyXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuICAgIHRoaXMuc3RhY2tUcmFjZUZpbHRlciA9IG5ldyBTdGFja1RyYWNlRmlsdGVyKClcbiAgICB0aGlzLnN1cHBvcnRDb2RlTGlicmFyeSA9IHN1cHBvcnRDb2RlTGlicmFyeVxuICAgIHRoaXMudGVzdENhc2VzID0gdGVzdENhc2VzIHx8IFtdXG4gICAgdGhpcy5yZXN1bHQgPSB7XG4gICAgICBkdXJhdGlvbjogMCxcbiAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcnVuVGVzdFJ1bkhvb2tzKGtleSwgbmFtZSkge1xuICAgIGF3YWl0IFByb21pc2UuZWFjaCh0aGlzLnN1cHBvcnRDb2RlTGlicmFyeVtrZXldLCBhc3luYyBob29rRGVmaW5pdGlvbiA9PiB7XG4gICAgICBjb25zdCB7IGVycm9yIH0gPSBhd2FpdCBVc2VyQ29kZVJ1bm5lci5ydW4oe1xuICAgICAgICBhcmdzQXJyYXk6IFtdLFxuICAgICAgICBmbjogaG9va0RlZmluaXRpb24uY29kZSxcbiAgICAgICAgdGhpc0FyZzogbnVsbCxcbiAgICAgICAgdGltZW91dEluTWlsbGlzZWNvbmRzOlxuICAgICAgICAgIGhvb2tEZWZpbml0aW9uLm9wdGlvbnMudGltZW91dCB8fFxuICAgICAgICAgIHRoaXMuc3VwcG9ydENvZGVMaWJyYXJ5LmRlZmF1bHRUaW1lb3V0LFxuICAgICAgfSlcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICBjb25zdCBsb2NhdGlvbiA9IGZvcm1hdExvY2F0aW9uKGhvb2tEZWZpbml0aW9uKVxuICAgICAgICB0aHJvdyBuZXcgVkVycm9yKFxuICAgICAgICAgIGVycm9yLFxuICAgICAgICAgIGAke25hbWV9IGhvb2sgZXJyb3JlZCwgcHJvY2VzcyBleGl0aW5nOiAke2xvY2F0aW9ufWBcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBhc3luYyBydW5UZXN0Q2FzZSh0ZXN0Q2FzZSkge1xuICAgIGNvbnN0IHNraXAgPVxuICAgICAgdGhpcy5vcHRpb25zLmRyeVJ1biB8fCAodGhpcy5vcHRpb25zLmZhaWxGYXN0ICYmICF0aGlzLnJlc3VsdC5zdWNjZXNzKVxuICAgIGNvbnN0IHRlc3RDYXNlUnVubmVyID0gbmV3IFRlc3RDYXNlUnVubmVyKHtcbiAgICAgIGV2ZW50QnJvYWRjYXN0ZXI6IHRoaXMuZXZlbnRCcm9hZGNhc3RlcixcbiAgICAgIHNraXAsXG4gICAgICBzdXBwb3J0Q29kZUxpYnJhcnk6IHRoaXMuc3VwcG9ydENvZGVMaWJyYXJ5LFxuICAgICAgdGVzdENhc2UsXG4gICAgICB3b3JsZFBhcmFtZXRlcnM6IHRoaXMub3B0aW9ucy53b3JsZFBhcmFtZXRlcnMsXG4gICAgfSlcbiAgICBjb25zdCB0ZXN0Q2FzZVJlc3VsdCA9IGF3YWl0IHRlc3RDYXNlUnVubmVyLnJ1bigpXG4gICAgaWYgKHRlc3RDYXNlUmVzdWx0LmR1cmF0aW9uKSB7XG4gICAgICB0aGlzLnJlc3VsdC5kdXJhdGlvbiArPSB0ZXN0Q2FzZVJlc3VsdC5kdXJhdGlvblxuICAgIH1cbiAgICBpZiAodGhpcy5zaG91bGRDYXVzZUZhaWx1cmUodGVzdENhc2VSZXN1bHQuc3RhdHVzKSkge1xuICAgICAgdGhpcy5yZXN1bHQuc3VjY2VzcyA9IGZhbHNlXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3RhcnQoKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5maWx0ZXJTdGFja3RyYWNlcykge1xuICAgICAgdGhpcy5zdGFja1RyYWNlRmlsdGVyLmZpbHRlcigpXG4gICAgfVxuICAgIHRoaXMuZXZlbnRCcm9hZGNhc3Rlci5lbWl0KCd0ZXN0LXJ1bi1zdGFydGVkJylcbiAgICBhd2FpdCB0aGlzLnJ1blRlc3RSdW5Ib29rcygnYmVmb3JlVGVzdFJ1bkhvb2tEZWZpbml0aW9ucycsICdhIEJlZm9yZUFsbCcpXG4gICAgYXdhaXQgUHJvbWlzZS5lYWNoKHRoaXMudGVzdENhc2VzLCA6OnRoaXMucnVuVGVzdENhc2UpXG4gICAgYXdhaXQgdGhpcy5ydW5UZXN0UnVuSG9va3MoJ2FmdGVyVGVzdFJ1bkhvb2tEZWZpbml0aW9ucycsICdhbiBBZnRlckFsbCcpXG4gICAgdGhpcy5ldmVudEJyb2FkY2FzdGVyLmVtaXQoJ3Rlc3QtcnVuLWZpbmlzaGVkJywgeyByZXN1bHQ6IHRoaXMucmVzdWx0IH0pXG4gICAgaWYgKHRoaXMub3B0aW9ucy5maWx0ZXJTdGFja3RyYWNlcykge1xuICAgICAgdGhpcy5zdGFja1RyYWNlRmlsdGVyLnVuZmlsdGVyKClcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucmVzdWx0LnN1Y2Nlc3NcbiAgfVxuXG4gIHNob3VsZENhdXNlRmFpbHVyZShzdGF0dXMpIHtcbiAgICByZXR1cm4gKFxuICAgICAgXy5pbmNsdWRlcyhbU3RhdHVzLkFNQklHVU9VUywgU3RhdHVzLkZBSUxFRCwgU3RhdHVzLlVOREVGSU5FRF0sIHN0YXR1cykgfHxcbiAgICAgIChzdGF0dXMgPT09IFN0YXR1cy5QRU5ESU5HICYmIHRoaXMub3B0aW9ucy5zdHJpY3QpXG4gICAgKVxuICB9XG59XG4iXX0=