stryker
Version:
The extendable JavaScript mutation testing framework
81 lines • 4.41 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
var _ = require("lodash");
var parserUtils = require("../utils/parserUtils");
var objectUtils_1 = require("../utils/objectUtils");
var BinaryOperatorMutator_1 = require("./BinaryOperatorMutator");
var BlockStatementMutator_1 = require("./BlockStatementMutator");
var LogicalOperatorMutator_1 = require("./LogicalOperatorMutator");
var RemoveConditionalsMutator_1 = require("./RemoveConditionalsMutator");
var UnaryOperatorMutator_1 = require("./UnaryOperatorMutator");
var UpdateOperatorMutator_1 = require("./UpdateOperatorMutator");
var ArrayDeclaratorMutator_1 = require("./ArrayDeclaratorMutator");
var BooleanSubstitutionMutator_1 = require("./BooleanSubstitutionMutator");
var typed_inject_1 = require("typed-inject");
var plugin_1 = require("stryker-api/plugin");
var ES5Mutator = /** @class */ (function () {
function ES5Mutator(log, mutators) {
if (mutators === void 0) { mutators = [
new BinaryOperatorMutator_1.default(),
new BlockStatementMutator_1.default(),
new LogicalOperatorMutator_1.default(),
new RemoveConditionalsMutator_1.default(),
new UnaryOperatorMutator_1.default(),
new UpdateOperatorMutator_1.default(),
new ArrayDeclaratorMutator_1.default(),
new BooleanSubstitutionMutator_1.default()
]; }
this.log = log;
this.mutators = mutators;
this.log.warn("DEPRECATED: The es5 mutator is deprecated and will be removed in the future. Please upgrade to the stryker-javascript-mutator (npm install --save-dev stryker-javascript-mutator) and set \"mutator: 'javascript'\" in your stryker.conf.js! If you have a plugins array in your stryker.conf.js, be sure to add 'stryker-javascript-mutator'.");
}
ES5Mutator.prototype.mutate = function (files) {
var _this = this;
return _.flatMap(files, function (file) { return _this.mutateForFile(file); });
};
ES5Mutator.prototype.mutateForFile = function (file) {
var abstractSyntaxTree = parserUtils.parse(file.textContent);
var nodes = new parserUtils.NodeIdentifier().identifyAndFreeze(abstractSyntaxTree);
return this.mutateForNodes(file, nodes);
};
ES5Mutator.prototype.mutateForNodes = function (file, nodes) {
var _this = this;
return _.flatMap(nodes, function (astNode) {
if (astNode.type) {
Object.freeze(astNode);
return _.flatMap(_this.mutators, function (mutator) {
try {
var mutatedNodes = mutator.applyMutations(astNode, objectUtils_1.copy);
if (mutatedNodes) {
if (!Array.isArray(mutatedNodes)) {
mutatedNodes = [mutatedNodes];
}
if (mutatedNodes.length > 0) {
_this.log.debug("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 " + file.name);
}
return mutatedNodes.map(function (mutatedNode) {
var replacement = parserUtils.generate(mutatedNode);
var originalNode = nodes[mutatedNode.nodeID];
var mutant = { mutatorName: mutator.name, fileName: file.name, replacement: replacement, range: originalNode.range };
return mutant;
});
}
else {
return [];
}
}
catch (error) {
throw new Error("The mutator named '" + mutator.name + "' caused an error: " + error);
}
});
}
else {
return [];
}
});
};
ES5Mutator.inject = typed_inject_1.tokens(plugin_1.commonTokens.logger);
return ES5Mutator;
}());
exports.default = ES5Mutator;
//# sourceMappingURL=ES5Mutator.js.map
;