| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- /*
- Copyright 2015, Yahoo Inc.
- Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.
- */
- "use strict";
- var FileCoverage = require('istanbul-lib-coverage').classes.FileCoverage,
- util = require('util');
- function MappedCoverage(pathOrObj) {
- FileCoverage.call(this, pathOrObj);
- this.meta = {
- last: {
- s: 0,
- f: 0,
- b: 0
- },
- seen: {}
- };
- }
- util.inherits(MappedCoverage, FileCoverage);
- function locString(loc) {
- return [loc.start.line, loc.start.column, loc.end.line, loc.end.column].join(':');
- }
- MappedCoverage.prototype.addStatement = function (loc, hits) {
- var key = 's:' + locString(loc),
- meta = this.meta,
- 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;
- };
- MappedCoverage.prototype.addFunction = function (name, decl, loc, hits) {
- var key = 'f:' + locString(decl),
- meta = this.meta,
- 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: name,
- decl: this.cloneLocation(decl),
- loc: this.cloneLocation(loc)
- };
- }
- this.f[index] = this.f[index] || 0;
- this.f[index] += hits;
- return index;
- };
- MappedCoverage.prototype.addBranch = function (type, loc, branchLocations, hits) {
- var key = ['b'],
- meta = this.meta,
- that = this,
- index,
- i;
- branchLocations.forEach(function (l) {
- key.push(locString(l));
- });
- key = key.join(':');
- index = meta.seen[key];
- if (index === undefined) {
- index = meta.last.b;
- meta.last.b += 1;
- meta.seen[key] = index;
- this.branchMap[index] = {
- loc: loc,
- type: type,
- locations: branchLocations.map(function (l) {
- return that.cloneLocation(l);
- })
- };
- }
- if (!this.b[index]) {
- this.b[index] = [];
- branchLocations.forEach(function () {
- that.b[index].push(0);
- });
- }
- for (i = 0; i < hits.length; i += 1) {
- that.b[index][i] += hits[i];
- }
- return index;
- };
- // returns a clone of the location object with only
- // the attributes of interest
- MappedCoverage.prototype.cloneLocation = function (loc) {
- return {
- start: {
- line: loc.start.line,
- column: loc.start.column
- },
- end: {
- line: loc.end.line,
- column: loc.end.column
- }
- };
- };
- module.exports = {
- MappedCoverage: MappedCoverage
- };
|