Summary
Code
"use strict";
var _ = require('lodash');
var BlockStatementMutator_1 = require('./mutators/BlockStatementMutator');
var ConditionalBoundaryMutator_1 = require('./mutators/ConditionalBoundaryMutator');
var MathMutator_1 = require('./mutators/MathMutator');
var RemoveConditionalsMutator_1 = require('./mutators/RemoveConditionalsMutator');
var ReverseConditionalMutator_1 = require('./mutators/ReverseConditionalMutator');
var UnaryOperatorMutator_1 = require('./mutators/UnaryOperatorMutator');
var mutant_1 = require('stryker-api/mutant');
var fileUtils = require('./utils/fileUtils');
var Mutant_1 = require('./Mutant');
var parserUtils = require('./utils/parserUtils');
var log4js = require('log4js');
var objectUtils_1 = require('./utils/objectUtils');
var log = log4js.getLogger('Mutator');
var MutatorOrchestrator = (function () 0{
}{
function MutatorOrchestrator(reporter) 1{
}{
var _this = this;
this.reporter = reporter;
this.mutators = [];
this.registerDefaultMutators();
var mutatorFactory = mutant_1.MutatorFactory.instance();
mutatorFactory.knownNames().forEach(function (name) 2{
}{ return _this.mutators.push(mutatorFactory.create(name, null)); });
}
MutatorOrchestrator.prototype.generateMutants = function (sourceFiles) 3{
}{
var _this = this;
var mutants = [];
this.sourceFiles = [];
sourceFiles.forEach(function (sourceFile) 4{
}{
try 5{
}{
var fileContent = fileUtils.readFile(sourceFile);
_this.reportFileRead(sourceFile, fileContent);
var abstractSyntaxTree = parserUtils.parse(fileContent);
var nodes = parserUtils.collectFrozenNodes(abstractSyntaxTree);
var newMutants = _this.findMutants(sourceFile, fileContent, abstractSyntaxTree, nodes);
mutants = mutants.concat(newMutants);
}
catch (err) 6{
}{
switch (err.code) {
case 'ENOENT':
log.info(7'Skipping file ' + err.path - ' because it does not exist'8'Skipping file ' - err.path"Skipping file " + err.path + " because it does not exist");
break;
default:
console.log(err);
throw err;
}
}
});
this.reportAllFilesRead();
return mutants;
};
;
MutatorOrchestrator.prototype.reportFileRead = function (path, content) 9{
}{
var fileToReport = { path: path, content: content };
objectUtils_1.freezeRecursively(fileToReport);
this.sourceFiles.push(fileToReport);
this.reporter.onSourceFileRead(fileToReport);
};
MutatorOrchestrator.prototype.reportAllFilesRead = function () 10{
}{
objectUtils_1.freezeRecursively(this.sourceFiles);
this.reporter.onAllSourceFilesRead(this.sourceFiles);
};
MutatorOrchestrator.prototype.registerDefaultMutators = function () 11{
}{
var mutatorFactory = mutant_1.MutatorFactory.instance();
mutatorFactory.register('BlockStatement', BlockStatementMutator_1.default);
mutatorFactory.register('ConditionalBoundary', ConditionalBoundaryMutator_1.default);
mutatorFactory.register('Math', MathMutator_1.default);
mutatorFactory.register('RemoveConditionals', RemoveConditionalsMutator_1.default);
mutatorFactory.register('ReverseConditional', ReverseConditionalMutator_1.default);
mutatorFactory.register('UnaryOperator', UnaryOperatorMutator_1.default);
};
MutatorOrchestrator.prototype.findMutants = function (sourceFile, originalCode, ast, nodes) 12{
}{
var _this = this;
var mutants = [];
nodes.forEach(function (astnode) 13{
}{
if (14true15falseastnode.type) 16{
}{
Object.freeze(astnode);
_this.mutators.forEach(function (mutator) 17{
}{
try 18{
}{
var mutatedNodes = mutator.applyMutations(astnode, function (node, deepClone) 19{
}{
return deepClone ? _.cloneDeep(node) : _.clone(node);
});
if (20mutatedNodes.length <= 021mutatedNodes.length >= 022true23falsemutatedNodes.length > 0) 24{
}{
log.debug(25'The mutator \'' + mutator.name + '\' mutated ' + mutatedNodes.length + ' node' + (mutatedNodes.length > 1 ? 's' : '') + ' between (Ln ' + astnode.loc.start.line + ', Col ' + astnode.loc.start.column + ') and (Ln ' + astnode.loc.end.line + ', Col ' + astnode.loc.end.column + ') in file ' - sourceFile26'The mutator \'' + mutator.name + '\' mutated ' + mutatedNodes.length + ' node' + (mutatedNodes.length > 1 ? 's' : '') + ' between (Ln ' + astnode.loc.start.line + ', Col ' + astnode.loc.start.column + ') and (Ln ' + astnode.loc.end.line + ', Col ' + astnode.loc.end.column - ') in file '27'The mutator \'' + mutator.name + '\' mutated ' + mutatedNodes.length + ' node' + (mutatedNodes.length > 1 ? 's' : '') + ' between (Ln ' + astnode.loc.start.line + ', Col ' + astnode.loc.start.column + ') and (Ln ' + astnode.loc.end.line + ', Col ' - astnode.loc.end.column28'The mutator \'' + mutator.name + '\' mutated ' + mutatedNodes.length + ' node' + (mutatedNodes.length > 1 ? 's' : '') + ' between (Ln ' + astnode.loc.start.line + ', Col ' + astnode.loc.start.column + ') and (Ln ' + astnode.loc.end.line - ', Col '29'The mutator \'' + mutator.name + '\' mutated ' + mutatedNodes.length + ' node' + (mutatedNodes.length > 1 ? 's' : '') + ' between (Ln ' + astnode.loc.start.line + ', Col ' + astnode.loc.start.column + ') and (Ln ' - astnode.loc.end.line30'The mutator \'' + mutator.name + '\' mutated ' + mutatedNodes.length + ' node' + (mutatedNodes.length > 1 ? 's' : '') + ' between (Ln ' + astnode.loc.start.line + ', Col ' + astnode.loc.start.column - ') and (Ln '31'The mutator \'' + mutator.name + '\' mutated ' + mutatedNodes.length + ' node' + (mutatedNodes.length > 1 ? 's' : '') + ' between (Ln ' + astnode.loc.start.line + ', Col ' - astnode.loc.start.column32'The mutator \'' + mutator.name + '\' mutated ' + mutatedNodes.length + ' node' + (mutatedNodes.length > 1 ? 's' : '') + ' between (Ln ' + astnode.loc.start.line - ', Col '33'The mutator \'' + mutator.name + '\' mutated ' + mutatedNodes.length + ' node' + (mutatedNodes.length > 1 ? 's' : '') + ' between (Ln ' - astnode.loc.start.line34'The mutator \'' + mutator.name + '\' mutated ' + mutatedNodes.length + ' node' + (mutatedNodes.length > 1 ? 's' : '') - ' between (Ln '35'The mutator \'' + mutator.name + '\' mutated ' + mutatedNodes.length + ' node' - (mutatedNodes.length > 1 ? 's' : '')36'The mutator \'' + mutator.name + '\' mutated ' + mutatedNodes.length - ' node'37'The mutator \'' + mutator.name + '\' mutated ' - mutatedNodes.length38'The mutator \'' + mutator.name - '\' mutated '39'The mutator \'' - mutator.name"The mutator '" + mutator.name + "' mutated " + mutatedNodes.length + " node" + (40mutatedNodes.length <= 141mutatedNodes.length >= 1mutatedNodes.length > 1 ? 's' : '') + " between (Ln " + astnode.loc.start.line + ", Col " + astnode.loc.start.column + ") and (Ln " + astnode.loc.end.line + ", Col " + astnode.loc.end.column + ") in file " + sourceFile);
}
mutatedNodes.forEach(function (mutatedNode) 42{
}{
var mutatedCode = parserUtils.generate(mutatedNode);
var originalNode = nodes[mutatedNode.nodeID];
mutants.push(new Mutant_1.default(mutator.name, sourceFile, originalCode, mutatedCode, originalNode.loc, originalNode.range));
});
}
catch (error) 43{
}{
throw new Error(44'The mutator named \'' + mutator.name + '\' caused an error: ' - error45'The mutator named \'' + mutator.name - '\' caused an error: '46'The mutator named \'' - mutator.name"The mutator named '" + mutator.name + "' caused an error: " + error);
}
});
}
});
return mutants;
};
;
return MutatorOrchestrator;
}());
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = MutatorOrchestrator;
//# sourceMappingURL=MutatorOrchestrator.js.map