c9-core/plugins/c9.ide.test/data/coverage.js

136 wiersze
4.4 KiB
JavaScript

// TODO docs, see data/breakpoint.js
define(function(require, exports, module) {
var Data = require("./data");
function Coverage(options) {
this.data = options || {};
this.type = "coverage";
}
Coverage.prototype = new Data(
["path"],
["files"]
);
Coverage.prototype.equals = function(coverage) {
return this.data.path == coverage.path;
};
module.exports = Coverage;
/*
Copyright (c) 2012, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://yuilibrary.com/license/
*/
Coverage.fromLCOV = function(lcovString, path) {
var data = [], item;
[ 'end_of_record' ].concat(lcovString.split('\n')).forEach(function(line) {
line = line.trim();
var allparts = line.split(':'),
parts = [allparts.shift(), allparts.join(':')],
lines, fn;
switch (parts[0].toUpperCase()) {
case 'TN':
// item.title = parts[1].trim();
break;
case 'SF':
item.file = parts.slice(1).join(':').trim().replace(/\\/g, "/");
break;
case 'FNF':
// item.functions.found = Number(parts[1].trim());
break;
case 'FNH':
// item.functions.hit = Number(parts[1].trim());
break;
case 'LF':
item.lines.found = Number(parts[1].trim());
break;
case 'LH':
item.lines.hit = Number(parts[1].trim());
break;
case 'DA':
lines = parts[1].split(',');
if (Number(lines[1]))
item.lines.covered.push(Number(lines[0]));
else
item.lines.uncovered.push(Number(lines[0]));
// item.lines.details.push({
// line: Number(lines[0]),
// hit: Number(lines[1])
// });
break;
case 'FN':
// fn = parts[1].split(',');
// item.functions.details.push({
// name: fn[1],
// line: Number(fn[0])
// });
break;
case 'FNDA':
// fn = parts[1].split(',');
// item.functions.details.some(function(i, k) {
// if (i.name === fn[1] && i.hit === undefined) {
// item.functions.details[k].hit = Number(fn[0]);
// return true;
// }
// });
break;
case 'BRDA':
// fn = parts[1].split(',');
// item.branches.details.push({
// line: Number(fn[0]),
// block: Number(fn[1]),
// branch: Number(fn[2]),
// taken: ((fn[3] === '-') ? 0 : Number(fn[3]))
// });
break;
case 'BRF':
// item.branches.found = Number(parts[1]);
break;
case 'BRH':
// item.branches.hit = Number(parts[1]);
break;
}
if (line.indexOf('end_of_record') > -1) {
data.push(item);
item = {
lines: {
found: 0,
hit: 0,
covered: [],
uncovered: []
}
// functions: {
// hit: 0,
// found: 0,
// details: []
// },
// branches: {
// hit: 0,
// found: 0,
// details: []
// }
};
}
});
data.shift();
if (data.length) {
return new Coverage({
files: data,
path: path
});
}
else {
return false;
}
};
});