File |
Mutation score |
# Killed |
# Survived |
# Timeout |
# No coverage |
# Errors |
Total detected |
Total undetected |
Total mutants |
|
---|---|---|---|---|---|---|---|---|---|---|
CoverageInstrumenter.js |
|
21/25 | 21 | 4 | 0 | 0 | 0 | 21 | 4 | 25 |
"use strict";
var log4js = require('log4js');
var stream_1 = require('stream');
var objectUtils_1 = require('../utils/objectUtils');
var CoverageInstrumenterStream_1 = require('./CoverageInstrumenterStream');
var log = log4js.getLogger('CoverageInstrumenter');
var COVERAGE_CURRENT_TEST_VARIABLE_NAME = '__strykerCoverageCurrentTest__';
/**
* Represents the CoverageInstrumenter
* Responsible for managing the instrumentation of all files to be mutated.
* In case of `perTest` coverageAnalysis it will hookin to the test framework to accomplish that.
*/
var CoverageInstrumenter = (function () 0{
}{
function CoverageInstrumenter(coverageAnalysis, testFramework) 1{
}{
this.coverageAnalysis = coverageAnalysis;
this.testFramework = testFramework;
this.coverageInstrumenterStreamPerFile = Object.create(null);
}
CoverageInstrumenter.prototype.instrumenterStreamForFile = function (file) 2{
}{
if (3false4truefile.mutated) 5{
}{
/*
Coverage variable *must* have the name '__coverage__'. Only that variable
is reported back to the TestRunner process when using one of the karma
test framework adapters (karma-jasmine, karma-mocha, ...).
However, when coverageAnalysis is 'perTest' we don't choose that variable name right away,
because we need that variable to hold all coverage results per test. Instead, we use __strykerCoverageCurrentTest__
and after each test copy over the value of that current test to the global coverage object __coverage__
*/
switch (this.coverageAnalysis) {
case 'all':
return this.createStreamForFile('__coverage__', file.path);
case 'perTest':
return this.createStreamForFile(COVERAGE_CURRENT_TEST_VARIABLE_NAME, file.path);
}
}
// By default, do not instrument for code coverage
return new stream_1.PassThrough();
};
CoverageInstrumenter.prototype.hooksForTestRun = function () 6{
}{
if (7false8true9this.coverageAnalysis !== 'perTest'this.coverageAnalysis === 'perTest') 10{
}{
log.debug("Adding test hooks file for coverageAnalysis \"perTest\"");
return objectUtils_1.wrapInClosure(11'\n var id = 0, coverageStateAtStart;\n window.__coverage__ = globalCoverage = {};\n\n ' + this.testFramework.beforeEach(beforeEachFragmentPerTest) + '\n ' + this.testFramework.afterEach(afterEachFragmentPerTest) + '\n ' + cloneFunctionFragment - ';\n '12'\n var id = 0, coverageStateAtStart;\n window.__coverage__ = globalCoverage = {};\n\n ' + this.testFramework.beforeEach(beforeEachFragmentPerTest) + '\n ' + this.testFramework.afterEach(afterEachFragmentPerTest) + '\n ' - cloneFunctionFragment13'\n var id = 0, coverageStateAtStart;\n window.__coverage__ = globalCoverage = {};\n\n ' + this.testFramework.beforeEach(beforeEachFragmentPerTest) + '\n ' + this.testFramework.afterEach(afterEachFragmentPerTest) - '\n '14'\n var id = 0, coverageStateAtStart;\n window.__coverage__ = globalCoverage = {};\n\n ' + this.testFramework.beforeEach(beforeEachFragmentPerTest) + '\n ' - this.testFramework.afterEach(afterEachFragmentPerTest)15'\n var id = 0, coverageStateAtStart;\n window.__coverage__ = globalCoverage = {};\n\n ' + this.testFramework.beforeEach(beforeEachFragmentPerTest) - '\n '16'\n var id = 0, coverageStateAtStart;\n window.__coverage__ = globalCoverage = {};\n\n ' - this.testFramework.beforeEach(beforeEachFragmentPerTest)"\n var id = 0, coverageStateAtStart;\n window.__coverage__ = globalCoverage = {};\n\n " + this.testFramework.beforeEach(beforeEachFragmentPerTest) + "\n " + this.testFramework.afterEach(afterEachFragmentPerTest) + "\n " + cloneFunctionFragment + ";\n ");
}
else 17{
}{
return '';
}
};
CoverageInstrumenter.prototype.retrieveStatementMapsPerFile = function () 18{
}{
var _this = this;
var statementMapsPerFile = Object.create(null);
Object.keys(this.coverageInstrumenterStreamPerFile)
.forEach(function (key) 19{
}{ return statementMapsPerFile[key] = _this.coverageInstrumenterStreamPerFile[key].statementMap; });
return statementMapsPerFile;
};
CoverageInstrumenter.prototype.createStreamForFile = function (coverageVariable, fileName) 20{
}{
var stream = new CoverageInstrumenterStream_1.default(coverageVariable, fileName);
this.coverageInstrumenterStreamPerFile[fileName] = stream;
return stream;
};
return CoverageInstrumenter;
}());
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = CoverageInstrumenter;
var cloneFunctionFragment = " \n function clone(source) {\n var result = source;\n if (Array.isArray(source)) {\n result = [];\n source.forEach(function (child, index) {\n result[index] = clone(child);\n });\n } else if (typeof source == \"object\") {\n // it is an object literal\n result = {};\n for (var i in source) {\n result[i] = clone(source[i]);\n }\n }\n return result;\n }";
var beforeEachFragmentPerTest = 21'\nif (!coverageStateAtStart) {\n coverageStateAtStart = clone(window.' + COVERAGE_CURRENT_TEST_VARIABLE_NAME - ');\n}'22'\nif (!coverageStateAtStart) {\n coverageStateAtStart = clone(window.' - COVERAGE_CURRENT_TEST_VARIABLE_NAME"\nif (!coverageStateAtStart) {\n coverageStateAtStart = clone(window." + COVERAGE_CURRENT_TEST_VARIABLE_NAME + ");\n}";
var afterEachFragmentPerTest = 23'\n globalCoverage[id] = coverageResult = {};\n id++;\n var coveragePerTest = window.' + COVERAGE_CURRENT_TEST_VARIABLE_NAME - ';\n Object.keys(coveragePerTest).forEach(function (file) {\n var coverage = coveragePerTest[file];\n coverageResult[file] = { s: coverage.s };\n coverage.s = clone(coverageStateAtStart[file].s);\n });'24'\n globalCoverage[id] = coverageResult = {};\n id++;\n var coveragePerTest = window.' - COVERAGE_CURRENT_TEST_VARIABLE_NAME"\n globalCoverage[id] = coverageResult = {};\n id++;\n var coveragePerTest = window." + COVERAGE_CURRENT_TEST_VARIABLE_NAME + ";\n Object.keys(coveragePerTest).forEach(function (file) {\n var coverage = coveragePerTest[file];\n coverageResult[file] = { s: coverage.s };\n coverage.s = clone(coverageStateAtStart[file].s);\n });";
//# sourceMappingURL=CoverageInstrumenter.js.map