Stryker

Stryker.js - Stryker report

Summary

File Based on all code Based on code coverage
Stryker.js
96%
62/64 96% 62/64

Code

'use strict';
var _ = require('lodash');
var MutatorOrchestrator_1 = require('./MutatorOrchestrator');
var config_1 = require('stryker-api/config');
var TestRunnerOrchestrator_1 = require('./TestRunnerOrchestrator');
var ReporterOrchestrator_1 = require('./ReporterOrchestrator');
require('./jasmine_test_selector/JasmineTestSelector');
var test_runner_1 = require('stryker-api/test_runner');
var TestSelectorOrchestrator_1 = require('./TestSelectorOrchestrator');
var MutantRunResultMatcher_1 = require('./MutantRunResultMatcher');
var InputFileResolver_1 = require('./InputFileResolver');
var ConfigReader_1 = require('./ConfigReader');
var PluginLoader_1 = require('./PluginLoader');
var objectUtils_1 = require('./utils/objectUtils');
var StrykerTempFolder_1 = require('./utils/StrykerTempFolder');
var log4js = require('log4js');
var log = log4js.getLogger('Stryker');
var Stryker = (function () 0{
    function Stryker(options) 1{
        var configReader = new ConfigReader_1.default(options);
        this.config = configReader.readConfig();
        this.setGlobalLogLevel();
        this.loadPlugins();
        this.applyConfigWriters();
        this.setGlobalLogLevel();
        this.freezeConfig();
    }

    Stryker.prototype.runMutationTest = function () 2{
        var _this = this;
        var reporter = new ReporterOrchestrator_1.default(this.config).createBroadcastReporter();
        var testSelector = new TestSelectorOrchestrator_1.default(this.config).determineTestSelector();
        return new InputFileResolver_1.default(this.config.mutate, this.config.files).resolve()
            .then(function (inputFiles) 3{
            var testRunnerOrchestrator = new TestRunnerOrchestrator_1.default(_this.config, inputFiles, testSelector, reporter);
            return testRunnerOrchestrator.initialRun().then(function (runResults) 4{ return ({ runResults: runResults, inputFiles: inputFiles, testRunnerOrchestrator: testRunnerOrchestrator }); });
        })
            .then(function (tuple) 5{
            var runResults = tuple.runResults;
            var inputFiles = tuple.inputFiles;
            var testRunnerOrchestrator = tuple.testRunnerOrchestrator;
            var unsuccessfulTests = _this.filterOutUnsuccesfulResults(runResults);
            if (678unsuccessfulTests.length === 0) 9{
                _this.logInitialTestRunSucceeded(runResults);
                var mutatorOrchestrator = new MutatorOrchestrator_1.default(reporter);
                var mutants = mutatorOrchestrator.generateMutants(inputFiles
                    .filter(function (inputFile) 10{ return inputFile.mutated; })
                    .map(function (file) 11{ return file.path; }));
                log.info(12mutants.length + " Mutant(s) generated");
                var mutantRunResultMatcher = new MutantRunResultMatcher_1.default(mutants, runResults);
                mutantRunResultMatcher.matchWithMutants();
                return testRunnerOrchestrator.runMutations(mutants);
            }

            else 13{
                _this.logFailedTests(unsuccessfulTests);
                throw new Error('There were failed tests in the initial test run');
            }

        }).then(function (mutantResults) 14{
            var maybePromise = reporter.wrapUp();
            if (1516objectUtils_1.isPromise(maybePromise)) 17{
                return maybePromise.then(function () 18{ return mutantResults; });
            }

            else 19{
                return mutantResults;
            }

        }).then(function (mutantResults) 20{ return StrykerTempFolder_1.default.clean().then(function () 21{ return mutantResults; }); });
    };
    Stryker.prototype.filterOutUnsuccesfulResults = function (runResults) 22{
        return runResults.filter(function (runResult) 23{ return !(24!runResult.failed && 25runResult.result === test_runner_1.TestResult.Complete); });
    };
    Stryker.prototype.loadPlugins = function () 26{
        if (2728this.config.plugins) 29{
            new PluginLoader_1.default(this.config.plugins).load();
        }

    };
    Stryker.prototype.applyConfigWriters = function () 30{
        var _this = this;
        config_1.ConfigWriterFactory.instance().knownNames().forEach(function (configWriterName) 31{
            config_1.ConfigWriterFactory.instance().create(configWriterName, undefined).write(_this.config);
        });
    };
    Stryker.prototype.freezeConfig = function () 32{
        objectUtils_1.freezeRecursively(this.config);
        if (3334log.isDebugEnabled()) 35{
            log.debug(36"Using config: " + JSON.stringify(this.config));
        }

    };
    Stryker.prototype.logInitialTestRunSucceeded = function (runResults) 37{
        var totalAmountOfTests = 0;
        runResults.forEach(function (result) 38{
            if (3940result.succeeded) 41{
                totalAmountOfTests += result.succeeded;
            }

        });
        log.info('Initial test run succeeded. Ran %s tests.', totalAmountOfTests);
    };
    Stryker.prototype.setGlobalLogLevel = function () 42{
        log4js.setGlobalLogLevel(this.config.logLevel);
    };
    Stryker.prototype.logFailedTests = function (unsuccessfulTests) 43{
        var failedSpecNames = _.uniq(_.flatten(unsuccessfulTests
            .filter(function (runResult) 44{ return 45runResult.result === test_runner_1.TestResult.Complete; })
            .map(function (runResult) 46{ return runResult.testNames; })))
            .sort();
        if (47484950failedSpecNames.length > 0) 51{
            var message_1 = 'One or more tests failed in the inial test run:';
            failedSpecNames.forEach(function (filename) 52{ return message_1 += 53"\n\t" + filename; });
            log.error(message_1);
        }

        var errors = _.flatten(unsuccessfulTests
            .filter(function (runResult) 54{ return 55runResult.result === test_runner_1.TestResult.Error; })
            .map(function (runResult) 56{ return runResult.errorMessages; }))
            .sort();
        if (57585960errors.length > 0) 61{
            var message_2 = 'One or more tests errored in the initial test run:';
            errors.forEach(function (error) 62{ return message_2 += 63"\n\t" + error; });
            log.error(message_2);
        }

    };
    return Stryker;
}());
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = Stryker;
//# sourceMappingURL=Stryker.js.map