all files / lib/ SparceCoverageCollector.js

96.72% Statements 59/61
83.33% Branches 15/18
100% Functions 12/12
96.67% Lines 58/60
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145              15×   15× 15×         387× 387× 12×                 12×                   387×                               13×         50×   50× 50×     50× 50× 100×     50×   50× 50× 50× 50× 50×     50× 50× 100×                     56×   56× 56×     56×   56× 56× 55× 55× 55×     56× 56×         276×   276× 276×     276×   276× 276× 251× 251× 251×     276× 276×          
'use strict';
 
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
 
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
 
var _createClass2 = require('babel-runtime/helpers/createClass');
 
var _createClass3 = _interopRequireDefault(_createClass2);
 
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
 
var SparceCoverageCollector = function () {
  function SparceCoverageCollector() {
    (0, _classCallCheck3.default)(this, SparceCoverageCollector);
 
    this.srcCoverage = {};
    this.metaInfo = {};
  }
 
  (0, _createClass3.default)(SparceCoverageCollector, [{
    key: 'getSourceCoverage',
    value: function getSourceCoverage(filename) {
      var data = this.srcCoverage[filename];
      if (!data) {
        data = this.srcCoverage[filename] = {
          path: filename,
          statementMap: {},
          fnMap: {},
          branchMap: {},
          s: {},
          b: {},
          f: {}
        };
        this.metaInfo[filename] = {
          indexes: {},
          lastIndex: {
            s: 0,
            b: 0,
            f: 0
          }
        };
      }
 
      return {
        data: data,
        meta: this.metaInfo[filename]
      };
    }
  }, {
    key: 'setCoverage',
    value: function setCoverage(filePath, fileCoverage) {
      this.srcCoverage[filePath] = fileCoverage;
    }
  }, {
    key: 'setSourceCode',
    value: function setSourceCode(filePath, source) {
      this.getSourceCoverage(filePath).data.code = source;
    }
  }, {
    key: 'getFinalCoverage',
    value: function getFinalCoverage() {
      return this.srcCoverage;
    }
  }, {
    key: 'updateBranch',
    value: function updateBranch(source, srcItem, hits) {
      var _getSourceCoverage = this.getSourceCoverage(source);
 
      var data = _getSourceCoverage.data;
      var meta = _getSourceCoverage.meta;
 
 
      var key = ['b'];
      srcItem.locations.map(function (loc) {
        return key.push(loc.start.line, loc.start.column, loc.end.line, loc.end.line);
      });
 
      key = key.join(':');
 
      var index = meta.indexes[key];
      Eif (!index) {
        index = ++meta.lastIndex.b;
        meta.indexes[key] = index;
        data.branchMap[index] = srcItem;
      }
 
      Eif (!data.b[index]) {
        data.b[index] = hits.map(function (v) {
          return v;
        });
      } else {
        for (var i = 0; i < hits.length; ++i) {
          data.b[index][i] += hits[i];
        }
      }
    }
  }, {
    key: 'updateFunction',
    value: function updateFunction(source, srcItem, hits) {
      var _getSourceCoverage2 = this.getSourceCoverage(source);
 
      var data = _getSourceCoverage2.data;
      var meta = _getSourceCoverage2.meta;
 
 
      var key = ['f', srcItem.loc.start.line, srcItem.loc.start.column, srcItem.loc.end.line, srcItem.loc.end.column].join(':');
 
      var index = meta.indexes[key];
      if (!index) {
        index = ++meta.lastIndex.f;
        meta.indexes[key] = index;
        data.fnMap[index] = srcItem;
      }
 
      data.f[index] = data.f[index] || 0;
      data.f[index] += hits;
    }
  }, {
    key: 'updateStatement',
    value: function updateStatement(source, srcItem, hits) {
      var _getSourceCoverage3 = this.getSourceCoverage(source);
 
      var data = _getSourceCoverage3.data;
      var meta = _getSourceCoverage3.meta;
 
 
      var key = ['s', srcItem.start.line, srcItem.start.column, srcItem.end.line, srcItem.end.column].join(':');
 
      var index = meta.indexes[key];
      if (!index) {
        index = ++meta.lastIndex.s;
        meta.indexes[key] = index;
        data.statementMap[index] = srcItem;
      }
 
      data.s[index] = data.s[index] || 0;
      data.s[index] += hits;
    }
  }]);
  return SparceCoverageCollector;
}();
 
module.exports.SparceCoverageCollector = SparceCoverageCollector;
//# sourceMappingURL=SparceCoverageCollector.js.map