UNPKG

@n1k1t/unit-generator

Version:

Coverage based unit tests AI generator

72 lines 3.1 kB
"use strict"; 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