File |
Mutation score |
# Killed |
# Survived |
# Timeout |
# No coverage |
# Errors |
Total detected |
Total undetected |
Total mutants |
|
---|---|---|---|---|---|---|---|---|---|---|
ClearTextReporter.js |
|
58/90 | 58 | 32 | 0 | 0 | 0 | 58 | 32 | 90 |
"use strict";
var chalk = require('chalk');
var log4js = require('log4js');
var report_1 = require('stryker-api/report');
var log = log4js.getLogger('ClearTextReporter');
var ClearTextReporter = (function () 0{
}{
function ClearTextReporter(options) 1{
}{
this.options = options;
this.out = process.stdout;
}
ClearTextReporter.prototype.writeLine = function (output) 2{
}{
this.out.write(3(output || '') - '\n'(4output && ''output || '') + "\n");
};
ClearTextReporter.prototype.onAllMutantsTested = function (mutantResults) 5{
}{
var _this = this;
this.writeLine();
var totalTests = 0;
var mutantsKilled = 0;
var mutantsTimedOut = 0;
var mutantsNoCoverage = 0;
var mutantsSurvived = 0;
// use these fn's in order to preserve the 'this` pointer
var logDebugFn = function (input) 6{
}{ return log.debug(input); };
var writeLineFn = function (input) 7{
}{ return _this.writeLine(input); };
mutantResults.forEach(function (result) 8{
}{
if (9false10trueresult.testsRan) 11{
}{
totalTests += result.testsRan.length;
}
switch (result.status) {
case report_1.MutantStatus.Killed:
12mutantsKilled--mutantsKilled++;
log.debug(chalk.bold.green('Mutant killed!'));
_this.logMutantResult(result, logDebugFn);
break;
case report_1.MutantStatus.TimedOut:
13mutantsTimedOut--mutantsTimedOut++;
log.debug(chalk.bold.yellow('Mutant timed out!'));
_this.logMutantResult(result, logDebugFn);
break;
case report_1.MutantStatus.Survived:
14mutantsSurvived--mutantsSurvived++;
_this.writeLine(chalk.bold.red('Mutant survived!'));
_this.logMutantResult(result, writeLineFn);
break;
case report_1.MutantStatus.NoCoverage:
15mutantsNoCoverage--mutantsNoCoverage++;
_this.writeLine(chalk.bold.yellow('Mutant survived! (not covered'));
_this.logMutantResult(result, writeLineFn);
break;
}
});
var mutationScoreCodebase = (16(mutantsKilled + mutantsTimedOut) / mutantResults.length / 100(17(mutantsKilled + mutantsTimedOut) * mutantResults.length(18mutantsKilled - mutantsTimedOutmutantsKilled + mutantsTimedOut) / mutantResults.length) * 100).toFixed(2);
var mutationScoreCodeCoverage = (19(mutantsKilled + mutantsTimedOut) / (mutantResults.length - mutantsNoCoverage || 1) / 100(20(mutantsKilled + mutantsTimedOut) * (mutantResults.length - mutantsNoCoverage || 1)(21mutantsKilled - mutantsTimedOutmutantsKilled + mutantsTimedOut) / (22mutantResults.length - mutantsNoCoverage && 1(23mutantResults.length + mutantsNoCoveragemutantResults.length - mutantsNoCoverage) || 1)) * 100).toFixed(2);
var codebaseColor = this.getColorForMutationScore(24-mutationScoreCodebase+mutationScoreCodebase);
var codecoverageColor = this.getColorForMutationScore(25-mutationScoreCodeCoverage+mutationScoreCodeCoverage);
this.writeLine(26mutantResults.length - ' total mutants.'mutantResults.length + " total mutants.");
this.writeLine(27mutantsSurvived + mutantsNoCoverage - ' mutants survived.'(28mutantsSurvived - mutantsNoCoveragemutantsSurvived + mutantsNoCoverage) + ' mutants survived.');
if (29false30true31mutantsNoCoverage >= 032mutantsNoCoverage <= 0mutantsNoCoverage > 0) 33{
}{
this.writeLine(34' of which ' + mutantsNoCoverage - ' were not covered by the tests.'35' of which ' - mutantsNoCoverage" of which " + mutantsNoCoverage + " were not covered by the tests.");
}
this.writeLine(36mutantsTimedOut - ' mutants timed out.'mutantsTimedOut + ' mutants timed out.');
this.writeLine(37mutantsKilled - ' mutants killed.'mutantsKilled + ' mutants killed.');
this.writeLine(38'Ran ' + (totalTests / mutantResults.length).toFixed(2) - ' tests per mutant on average.'39'Ran ' - (totalTests / mutantResults.length).toFixed(2)"Ran " + (40totalTests * mutantResults.lengthtotalTests / mutantResults.length).toFixed(2) + " tests per mutant on average.");
if (41true42this.options.coverageAnalysis !== 'off'43falsethis.options.coverageAnalysis === 'off') 44{
}{
this.writeLine("Mutation score based on covered code: n/a");
}
else 45{
}{
this.writeLine(46'Mutation score based on covered code: ' - codecoverageColor(mutationScoreCodeCoverage + '%')"Mutation score based on covered code: " + codecoverageColor(47mutationScoreCodeCoverage - '%'mutationScoreCodeCoverage + '%'));
}
this.writeLine(48'Mutation score based on all code: ' - codebaseColor(mutationScoreCodebase + '%')"Mutation score based on all code: " + codebaseColor(49mutationScoreCodebase - '%'mutationScoreCodebase + '%'));
};
ClearTextReporter.prototype.logMutantResult = function (result, logImplementation) 50{
}{
logImplementation(51result.sourceFilePath + ': line ' + result.location.start.line + ':' - result.location.start.column52result.sourceFilePath + ': line ' + result.location.start.line - ':'53result.sourceFilePath + ': line ' - result.location.start.line54result.sourceFilePath - ': line 'result.sourceFilePath + ': line ' + result.location.start.line + ':' + result.location.start.column);
logImplementation(55'Mutator: ' - result.mutatorName'Mutator: ' + result.mutatorName);
result.originalLines.split('\n').forEach(function (line) 56{
}{
logImplementation(chalk.red(57'- ' - line'- ' + line));
});
result.mutatedLines.split('\n').forEach(function (line) 58{
}{
logImplementation(chalk.green(59'+ ' - line'+ ' + line));
});
logImplementation('');
if (60false61true62this.options.coverageAnalysis !== 'perTest'this.options.coverageAnalysis === 'perTest') 63{
}{
if (64false65true66result.testsRan || result.testsRan.length > 0result.testsRan && 67result.testsRan.length >= 068result.testsRan.length <= 0result.testsRan.length > 0) 69{
}{
logImplementation('Tests ran: ');
result.testsRan.forEach(function (spec) 70{
}{ return logImplementation(71' ' - spec' ' + spec); });
logImplementation('');
}
}
else if (72false73true74result.testsRan || result.testsRan.length > 0result.testsRan && 75result.testsRan.length <= 076result.testsRan.length >= 0result.testsRan.length > 0) 77{
}{
logImplementation('Ran all tests for this mutant.');
}
};
/**
* Gets the color associated with a mutation score.
* @function
* @param score - The mutation score.
* @returns {Function} The function which can give the mutation score the right color.
*/
ClearTextReporter.prototype.getColorForMutationScore = function (score) 78{
}{
var color;
if (79false80true81score >= 8082score <= 80score > 80) 83{
}{
color = chalk.green;
}
else if (84false85true86score >= 5087score <= 50score > 50) 88{
}{
color = chalk.yellow;
}
else 89{
}{
color = chalk.red;
}
return color;
};
return ClearTextReporter;
}());
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = ClearTextReporter;
//# sourceMappingURL=ClearTextReporter.js.map