UNPKG

stryker

Version:
150 lines 8.22 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var MutantTestMatcher_1 = require("./mutants/MutantTestMatcher"); var InputFileResolver_1 = require("./input/InputFileResolver"); var ScoreResultCalculator_1 = require("./ScoreResultCalculator"); var objectUtils_1 = require("./utils/objectUtils"); var TempFolder_1 = require("./utils/TempFolder"); var MutatorFacade_1 = require("./mutants/MutatorFacade"); var InitialTestExecutor_1 = require("./process/InitialTestExecutor"); var MutationTestExecutor_1 = require("./process/MutationTestExecutor"); var LogConfigurator_1 = require("./logging/LogConfigurator"); var TranspilerFacade_1 = require("./transpiler/TranspilerFacade"); var di_1 = require("./di"); var plugin_1 = require("stryker-api/plugin"); var MutantTranspileScheduler_1 = require("./transpiler/MutantTranspileScheduler"); var SandboxPool_1 = require("./SandboxPool"); var transpiler_1 = require("./transpiler"); var Stryker = /** @class */ (function () { /** * The Stryker mutation tester. * @constructor * @param {Object} [cliOptions] - Optional options. */ function Stryker(cliOptions) { LogConfigurator_1.default.configureMainProcess(cliOptions.logLevel, cliOptions.fileLogLevel, cliOptions.allowConsoleColors); this.injector = di_1.buildMainInjector(cliOptions); this.log = this.injector.resolve(plugin_1.commonTokens.getLogger)(Stryker.name); // Log level may have changed var options = this.config; LogConfigurator_1.default.configureMainProcess(options.logLevel, options.fileLogLevel, options.allowConsoleColors); } Object.defineProperty(Stryker.prototype, "reporter", { get: function () { return this.injector.resolve(di_1.coreTokens.reporter); }, enumerable: true, configurable: true }); Object.defineProperty(Stryker.prototype, "config", { get: function () { return this.injector.resolve(plugin_1.commonTokens.config); }, enumerable: true, configurable: true }); Object.defineProperty(Stryker.prototype, "timer", { get: function () { return this.injector.resolve(di_1.coreTokens.timer); }, enumerable: true, configurable: true }); Stryker.prototype.runMutationTest = function () { return tslib_1.__awaiter(this, void 0, void 0, function () { var loggingContext, inputFiles, inputFileInjector, initialTestRunProcess, initialRunResult, mutator, transpilerProvider, transpiler, transpiledFiles, mutationTestProcessInjector, testableMutants, mutationTestExecutor, mutantResults; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, LogConfigurator_1.default.configureLoggingServer(this.config.logLevel, this.config.fileLogLevel, this.config.allowConsoleColors)]; case 1: loggingContext = _a.sent(); this.timer.reset(); return [4 /*yield*/, this.injector.injectClass(InputFileResolver_1.default).resolve()]; case 2: inputFiles = _a.sent(); if (!inputFiles.files.length) return [3 /*break*/, 12]; TempFolder_1.TempFolder.instance().initialize(); inputFileInjector = this.injector .provideValue(di_1.coreTokens.loggingContext, loggingContext) .provideValue(di_1.coreTokens.inputFiles, inputFiles); initialTestRunProcess = inputFileInjector .provideValue(plugin_1.commonTokens.produceSourceMaps, this.config.coverageAnalysis !== 'off') .provideFactory(di_1.coreTokens.pluginCreatorTranspiler, di_1.PluginCreator.createFactory(plugin_1.PluginKind.Transpiler)) .provideClass(di_1.coreTokens.transpiler, TranspilerFacade_1.TranspilerFacade) .injectClass(InitialTestExecutor_1.default); return [4 /*yield*/, initialTestRunProcess.run()]; case 3: initialRunResult = _a.sent(); mutator = inputFileInjector.injectClass(MutatorFacade_1.MutatorFacade); transpilerProvider = inputFileInjector .provideValue(di_1.coreTokens.initialRunResult, initialRunResult) .provideValue(plugin_1.commonTokens.produceSourceMaps, false) .provideFactory(di_1.coreTokens.transpiler, transpiler_1.transpilerFactory); transpiler = transpilerProvider.resolve(di_1.coreTokens.transpiler); return [4 /*yield*/, transpiler.transpile(inputFiles.files)]; case 4: transpiledFiles = _a.sent(); mutationTestProcessInjector = transpilerProvider .provideValue(di_1.coreTokens.transpiledFiles, transpiledFiles) .provideClass(di_1.coreTokens.mutantTranspileScheduler, MutantTranspileScheduler_1.MutantTranspileScheduler) .provideClass(di_1.coreTokens.sandboxPool, SandboxPool_1.SandboxPool); return [4 /*yield*/, mutationTestProcessInjector .injectClass(MutantTestMatcher_1.MutantTestMatcher) .matchWithMutants(mutator.mutate(inputFiles.filesToMutate))]; case 5: testableMutants = _a.sent(); if (!(initialRunResult.runResult.tests.length && testableMutants.length)) return [3 /*break*/, 11]; mutationTestExecutor = mutationTestProcessInjector.injectClass(MutationTestExecutor_1.MutationTestExecutor); return [4 /*yield*/, mutationTestExecutor.run(testableMutants)]; case 6: mutantResults = _a.sent(); this.reportScore(mutantResults); return [4 /*yield*/, this.wrapUpReporter()]; case 7: _a.sent(); return [4 /*yield*/, TempFolder_1.TempFolder.instance().clean()]; case 8: _a.sent(); return [4 /*yield*/, this.logDone()]; case 9: _a.sent(); return [4 /*yield*/, LogConfigurator_1.default.shutdown()]; case 10: _a.sent(); return [2 /*return*/, mutantResults]; case 11: this.logRemark(); _a.label = 12; case 12: return [2 /*return*/, Promise.resolve([])]; } }); }); }; Stryker.prototype.wrapUpReporter = function () { var maybePromise = this.reporter.wrapUp(); if (objectUtils_1.isPromise(maybePromise)) { return maybePromise; } else { return Promise.resolve(); } }; Stryker.prototype.logDone = function () { this.log.info('Done in %s.', this.timer.humanReadableElapsed()); }; Stryker.prototype.logRemark = function () { if (!this.log.isTraceEnabled()) { this.log.info('Trouble figuring out what went wrong? Try `npx stryker run --fileLogLevel trace --logLevel debug` to get some more info.'); } }; Stryker.prototype.reportScore = function (mutantResults) { var calculator = this.injector.injectClass(ScoreResultCalculator_1.default); var score = calculator.calculate(mutantResults); this.reporter.onScoreCalculated(score); calculator.determineExitCode(score, this.config.thresholds); }; return Stryker; }()); exports.default = Stryker; //# sourceMappingURL=Stryker.js.map