@n1k1t/unit-generator
Version:
Coverage based unit tests AI generator
72 lines • 3.1 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Cobertura = exports.CoberturaItem = void 0;
const fast_xml_parser_1 = require("fast-xml-parser");
const lodash_1 = __importDefault(require("lodash"));
const file_1 = require("../file");
const parser = new fast_xml_parser_1.XMLParser({ ignoreAttributes: false });
class CoberturaItem {
constructor(path, rate = 0, uncovered = []) {
this.path = path;
this.rate = rate;
this.uncovered = uncovered;
}
assign(payload) {
return Object.assign(this, payload);
}
static build(path, provided) {
return new CoberturaItem(path, provided?.rate, provided?.uncovered);
}
}
exports.CoberturaItem = CoberturaItem;
class Cobertura extends file_1.File {
constructor() {
super(...arguments);
this.rate = 0;
this.uncovered = [];
this.timestamp = 0;
this.items = [];
}
assign(payload) {
return Object.assign(this, payload);
}
parse() {
const parsed = parser.parse(this.content);
const cwd = lodash_1.default.flatten([parsed.coverage?.sources?.source ?? []])[0] ?? '.';
this.items = lodash_1.default.flatten([parsed.coverage?.packages?.package ?? []]).reduce((acc, declaration) => acc.concat(lodash_1.default.flatten([declaration?.classes?.class ?? []]).map((item) => {
const rate = (Number(item['@_branch-rate']) + Number(item['@_line-rate'])) / 2;
const uncovered = new Set([
...lodash_1.default.flatten([item.lines?.line ?? []])
.filter((line) => Number(line['@_hits']) === 0)
.map((line) => Number(line['@_number'])),
...lodash_1.default.flatten([item.methods?.method ?? []]).reduce((lines, method) => lines.concat(lodash_1.default.flatten([method.lines?.line ?? []])
.filter((line) => Number(line['@_hits']) === 0)
.map((line) => Number(line['@_number']))), []),
]);
return CoberturaItem.build(`${cwd}/${item['@_filename']}`, {
rate: Number.isNaN(rate) ? 0 : Number(rate.toFixed(2)),
uncovered: [...uncovered].sort((a, b) => a - b),
});
})), []);
this.uncovered = this.items.reduce((acc, item) => acc.concat(item.uncovered), []);
this.timestamp = Number(parsed.coverage?.['@_timestamp'] ?? 0);
this.rate = this.items.length
? Number((this.items.reduce((acc, item) => acc + item.rate, 0) / this.items.length).toFixed(2))
: 0;
return this;
}
async refresh() {
await super.refresh();
this.parse();
}
static async build(location) {
const file = await file_1.File.build(location);
const cobertura = new Cobertura(file);
return cobertura.parse();
}
}
exports.Cobertura = Cobertura;
//# sourceMappingURL=index.js.map