UNPKG

d2-ui

Version:
123 lines (110 loc) 3.4 kB
/* Copyright (c) 2012, Yahoo! Inc. All rights reserved. Code licensed under the BSD License: http://yuilibrary.com/license/ */ var fs = require('fs'), path = require('path'), exists = fs.exists || path.exists; var walkFile = function(str, cb) { var data = [], item; [ 'end_of_record' ].concat(str.split('\n')).forEach(function(line) { line = line.trim(); var parts = line.split(':'), lines, fn; switch (parts[0].toUpperCase()) { case 'TN': item.title = parts[1].trim(); break; case 'SF': item.file = parts.slice(1).join(':').trim(); 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(','); 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, details: [] }, functions: { hit: 0, found: 0, details: [] }, branches: { hit: 0, found: 0, details: [] } }; } }); data.shift(); if (data.length) { cb(null, data); } else { cb('Failed to parse string'); } }; var parse = function(file, cb) { exists(file, function(x) { if (!x) { return walkFile(file, cb); } fs.readFile(file, 'utf8', function(err, str) { walkFile(str, cb); }); }); }; module.exports = parse;