UNPKG

stryker-git-checker

Version:

Git Checker for Stryker Mutator Javascript testing framework

89 lines 3.83 kB
"use strict"; 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