UNPKG

@tsdi/unit

Version:

unit testing framework, base on AOP, Ioc container

263 lines (261 loc) 11.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SuiteRunner = void 0; var tslib_1 = require("tslib"); var ioc_1 = require("@tsdi/ioc"); var boot_1 = require("@tsdi/boot"); var decorators_1 = require("../decorators"); var assert_1 = require("../assert/assert"); /** * Suite runner. * * @export * @class SuiteRunner * @implements {IRunner<any>} */ var SuiteRunner = /** @class */ (function (_super) { tslib_1.__extends(SuiteRunner, _super); function SuiteRunner() { return _super !== null && _super.apply(this, arguments) || this; } SuiteRunner.prototype.configureService = function (ctx) { return tslib_1.__awaiter(this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) { this.context = ctx; return [2 /*return*/]; }); }); }; /** * get suite describe. * * @returns {ISuiteDescribe} * @memberof SuiteRunner */ SuiteRunner.prototype.getSuiteDescribe = function () { var meta = this.context.getTargetReflect().getAnnoation(); this.timeout = (meta && meta.timeout) ? meta.timeout : (3 * 60 * 60 * 1000); this.describe = meta.describe || ioc_1.lang.getClassName(this.getBootType()); return { timeout: this.timeout, describe: this.describe, cases: [] }; }; SuiteRunner.prototype.run = function (data) { return tslib_1.__awaiter(this, void 0, void 0, function () { var desc, err_1; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: _a.trys.push([0, 2, , 3]); desc = this.getSuiteDescribe(); return [4 /*yield*/, this.runSuite(desc)]; case 1: _a.sent(); return [3 /*break*/, 3]; case 2: err_1 = _a.sent(); return [3 /*break*/, 3]; case 3: return [2 /*return*/]; } }); }); }; SuiteRunner.prototype.runSuite = function (desc) { return tslib_1.__awaiter(this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, this.runBefore(desc)]; case 1: _a.sent(); return [4 /*yield*/, this.runTest(desc)]; case 2: _a.sent(); return [4 /*yield*/, this.runAfter(desc)]; case 3: _a.sent(); return [2 /*return*/]; } }); }); }; SuiteRunner.prototype.runTimeout = function (key, describe, timeout) { var instance = this.getBoot(); var defer = ioc_1.PromiseUtil.defer(); var injector = this.getContext().injector; var timer = setTimeout(function () { if (timer) { clearTimeout(timer); var assert = injector.resolve(assert_1.Assert); var err = new assert.AssertionError({ message: describe + ", timeout " + timeout, stackStartFunction: instance[key], stackStartFn: instance[key] }); defer.reject(err); } }, timeout || this.timeout); Promise.resolve(injector.invoke(instance, key, { provide: assert_1.RunCaseToken, useValue: instance[key] }, { provide: assert_1.RunSuiteToken, useValue: instance })) .then(function (r) { clearTimeout(timer); timer = null; defer.resolve(r); }) .catch(function (err) { clearTimeout(timer); timer = null; defer.reject(err); }); return defer.promise; }; SuiteRunner.prototype.runBefore = function (describe) { return tslib_1.__awaiter(this, void 0, void 0, function () { var methodMaps; var _this = this; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: methodMaps = this.context.reflects.getMethodMetadata(decorators_1.Before, this.getBoot()); return [4 /*yield*/, ioc_1.PromiseUtil.step(Object.keys(methodMaps) .map(function (key) { return function () { var meta = methodMaps[key].find(function (m) { return ioc_1.isNumber(m.timeout); }); return _this.runTimeout(key, 'sutie before ' + key, meta ? meta.timeout : describe.timeout); }; }))]; case 1: _a.sent(); return [2 /*return*/]; } }); }); }; SuiteRunner.prototype.runBeforeEach = function () { return tslib_1.__awaiter(this, void 0, void 0, function () { var methodMaps; var _this = this; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: methodMaps = this.context.reflects.getMethodMetadata(decorators_1.BeforeEach, this.getBoot()); return [4 /*yield*/, ioc_1.PromiseUtil.step(Object.keys(methodMaps) .map(function (key) { return function () { var meta = methodMaps[key].find(function (m) { return ioc_1.isNumber(m.timeout); }); return _this.runTimeout(key, 'before each ' + key, meta ? meta.timeout : _this.timeout); }; }))]; case 1: _a.sent(); return [2 /*return*/]; } }); }); }; SuiteRunner.prototype.runAfterEach = function () { return tslib_1.__awaiter(this, void 0, void 0, function () { var methodMaps; var _this = this; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: methodMaps = this.context.reflects.getMethodMetadata(decorators_1.AfterEach, this.getBoot()); return [4 /*yield*/, ioc_1.PromiseUtil.step(Object.keys(methodMaps) .map(function (key) { return function () { var meta = methodMaps[key].find(function (m) { return ioc_1.isNumber(m.timeout); }); return _this.runTimeout(key, 'after each ' + key, meta ? meta.timeout : _this.timeout); }; }))]; case 1: _a.sent(); return [2 /*return*/]; } }); }); }; SuiteRunner.prototype.runAfter = function (describe) { return tslib_1.__awaiter(this, void 0, void 0, function () { var methodMaps; var _this = this; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: methodMaps = this.context.reflects.getMethodMetadata(decorators_1.After, this.getBoot()); return [4 /*yield*/, ioc_1.PromiseUtil.step(Object.keys(methodMaps) .map(function (key) { return function () { var meta = methodMaps[key].find(function (m) { return ioc_1.isNumber(m.timeout); }); return _this.runTimeout(key, 'sutie after ' + key, meta ? meta.timeout : describe.timeout); }; }))]; case 1: _a.sent(); return [2 /*return*/]; } }); }); }; SuiteRunner.prototype.runTest = function (desc) { return tslib_1.__awaiter(this, void 0, void 0, function () { var methodMaps, keys; var _this = this; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: methodMaps = this.context.reflects.getMethodMetadata(decorators_1.Test, this.getBoot()); keys = Object.keys(methodMaps); return [4 /*yield*/, ioc_1.PromiseUtil.step(keys.map(function (key) { var meta = methodMaps[key].find(function (m) { return ioc_1.isNumber(m.setp); }); var timeoutMeta = methodMaps[key].find(function (m) { return ioc_1.isNumber(m.timeout); }); var title = methodMaps[key].map(function (m) { return m.title; }).filter(function (t) { return t; }).join('; '); return { key: key, order: meta ? meta.setp : keys.length, timeout: timeoutMeta ? timeoutMeta.timeout : _this.timeout, title: title || key }; }) .sort(function (a, b) { return b.order - a.order; }) .map(function (caseDesc) { return function () { return _this.runCase(caseDesc); }; }))]; case 1: _a.sent(); return [2 /*return*/]; } }); }); }; SuiteRunner.prototype.runCase = function (caseDesc) { return tslib_1.__awaiter(this, void 0, void 0, function () { var err_2; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: _a.trys.push([0, 4, , 5]); return [4 /*yield*/, this.runBeforeEach()]; case 1: _a.sent(); return [4 /*yield*/, this.runTimeout(caseDesc.key, caseDesc.title, caseDesc.timeout)]; case 2: _a.sent(); return [4 /*yield*/, this.runAfterEach()]; case 3: _a.sent(); return [3 /*break*/, 5]; case 4: err_2 = _a.sent(); caseDesc.error = err_2; return [3 /*break*/, 5]; case 5: return [2 /*return*/, caseDesc]; } }); }); }; SuiteRunner.ρAnn = function () { return { "name": "SuiteRunner", "params": { "configureService": ["ctx"], "run": ["data"], "runSuite": ["desc"], "runTimeout": ["key", "describe", "timeout"], "runBefore": ["describe"], "runAfter": ["describe"], "runTest": ["desc"], "runCase": ["caseDesc"] } }; }; SuiteRunner = tslib_1.__decorate([ ioc_1.Injectable(), ioc_1.Refs('@Suite', boot_1.Startup) ], SuiteRunner); return SuiteRunner; }(boot_1.Runnable)); exports.SuiteRunner = SuiteRunner; //# sourceMappingURL=../sourcemaps/runner/SuiteRunner.js.map