This app provides monitoring and information features for the common freifunk user and the technical stuff of a freifunk community.
Code base is taken from a TUM Practical Course project and added here to see if Freifunk Altdorf can use it.
https://www.freifunk-altdorf.de
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.
120 lines
2.9 KiB
120 lines
2.9 KiB
/* |
|
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 |
|
};
|
|
|