You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/* Copyright 2015, Yahoo Inc. Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. */ 'use strict';
const { FileCoverage } = require('istanbul-lib-coverage').classes;
function locString(loc) { return [ loc.start.line, loc.start.column, loc.end.line, loc.end.column ].join(':'); }
class MappedCoverage extends FileCoverage { constructor(pathOrObj) { super(pathOrObj);
this.meta = { last: { s: 0, f: 0, b: 0 }, seen: {} }; }
addStatement(loc, hits) { const key = 's:' + locString(loc); const { meta } = this; let index = meta.seen[key];
if (index === undefined) { index = meta.last.s; meta.last.s += 1; meta.seen[key] = index; this.statementMap[index] = this.cloneLocation(loc); }
this.s[index] = this.s[index] || 0; this.s[index] += hits; return index; }
addFunction(name, decl, loc, hits) { const key = 'f:' + locString(decl); const { meta } = this; let index = meta.seen[key];
if (index === undefined) { index = meta.last.f; meta.last.f += 1; meta.seen[key] = index; name = name || `(unknown_${index})`; this.fnMap[index] = { name, decl: this.cloneLocation(decl), loc: this.cloneLocation(loc) }; }
this.f[index] = this.f[index] || 0; this.f[index] += hits; return index; }
addBranch(type, loc, branchLocations, hits) { const key = ['b', ...branchLocations.map(l => locString(l))].join(':'); const { meta } = this; let index = meta.seen[key]; if (index === undefined) { index = meta.last.b; meta.last.b += 1; meta.seen[key] = index; this.branchMap[index] = { loc, type, locations: branchLocations.map(l => this.cloneLocation(l)) }; }
if (!this.b[index]) { this.b[index] = branchLocations.map(() => 0); }
hits.forEach((hit, i) => { this.b[index][i] += hit; }); return index; }
/* Returns a clone of the location object with only the attributes of interest */ cloneLocation(loc) { return { start: { line: loc.start.line, column: loc.start.column }, end: { line: loc.end.line, column: loc.end.column } }; } }
module.exports = { MappedCoverage };
|