stryker-git-checker
Version:
Git Checker for Stryker Mutator Javascript testing framework
89 lines • 3.83 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.GitChecker = exports.create = void 0;
const plugin_1 = require("@stryker-mutator/api/plugin");
const diff_parser_1 = require("./helpers/diff-parser");
const child_process_1 = require("child_process");
const diff_checker_1 = require("./helpers/diff-checker");
const GIT_DIFF_COMMAND = "git diff --color=never HEAD^";
function gitCheckerLoggerFactory(loggerFactory, target) {
var _a;
const targetName = (_a = target === null || target === void 0 ? void 0 : target.name) !== null && _a !== void 0 ? _a : GitChecker.name;
const category = targetName === GitChecker.name
? GitChecker.name
: `${GitChecker.name}.${targetName}`;
return loggerFactory(category);
}
gitCheckerLoggerFactory.inject = plugin_1.tokens(plugin_1.commonTokens.getLogger, plugin_1.commonTokens.target);
/**
* GitChecker factory.
*
* @param injector dependencies.
* @returns an instance of the plugin class.
*/
function create(injector) {
return injector
.provideFactory(plugin_1.commonTokens.logger, gitCheckerLoggerFactory, plugin_1.Scope.Transient)
.injectClass(GitChecker);
}
exports.create = create;
create.inject = plugin_1.tokens(plugin_1.commonTokens.injector);
/**
* Git Checker plugin class.
*
* @todo add integration tests when they become viable.
*/
class GitChecker {
constructor(logger) {
this.logger = logger;
/**
* Initializes the Git Checker Plugin by executing
* the `git diff` command and parsing output.
*
* @returns Void Promise.
*/
this.init = async () => {
this.logger.debug("Process starting Git Checker plugin.");
return new Promise((resolve, reject) => {
child_process_1.exec(GIT_DIFF_COMMAND, (error, stdout, stderr) => {
try {
if (error) {
this.logger.error(stderr);
this.logger.fatal(`Error while executing the \`${GIT_DIFF_COMMAND}\` command.`);
reject(error);
}
this.logger.trace("Git diff command output:", stdout);
const projectRoot = process.cwd();
this.logger.trace("Project root path:", projectRoot);
this.diffMap = diff_parser_1.parseDiffs(stdout, projectRoot);
this.logger.debug("Process successfully loaded Git Checker plugin.");
if (this.logger.isTraceEnabled()) {
for (const [file, diffs] of this.diffMap) {
for (const [line, [start, end]] of diffs) {
this.logger.trace(`File "${file}": changes detected in the line ${line}, column ${start} to ${end}.`);
}
}
}
resolve();
}
catch (err) {
reject(err);
}
});
});
};
/**
* Checks if the mutant location has overlap with the Git diffs.
*
* @param mutant The mutant to be checked.
* @returns The Check Result.
*/
this.check = ({ fileName, location }) => {
this.logger.trace(`Checking a mutant in the file "${fileName}, location:`, location);
return Promise.resolve(diff_checker_1.checkDiff(location, this.diffMap.get(fileName)));
};
}
}
exports.GitChecker = GitChecker;
GitChecker.inject = plugin_1.tokens(plugin_1.commonTokens.logger, plugin_1.commonTokens.options);
//# sourceMappingURL=git-checker.js.map