Coverage

82%
46
38
8

/Users/alexsouthern/Dropbox/blanket/lib/blanket.js

82%
45
37
8
LineHitsSource
11var parseAndModify = (typeof exports === 'undefined' ? window.falafel : require("/Users/alexsouthern/Dropbox/blanket/lib/./falafel").falafel);
2
31(typeof exports === 'undefined' ? window : exports).blanket = (function(){
41 var linesToAddTracking = [
5 "ExpressionStatement",
6 "LabeledStatement" ,
7 "BreakStatement" ,
8 "ContinueStatement" ,
9 "VariableDeclaration",
10 "ReturnStatement" ,
11 "ThrowStatement" ,
12 "Line",
13 "TryStatement" ,
14 "FunctionDeclaration" ,
15 "IfStatement" ,
16 "WhileStatement" ,
17 "DoWhileStatement" ,
18 "ForStatement" ,
19 "ForInStatement" ,
20 "SwitchStatement" ,
21 "WithStatement"
22 ],
23 linesToAddBrackets = [
24 "IfStatement" ,
25
26 "WhileStatement" ,
27 "DoWhileStatement" ,
28 "ForStatement" ,
29 "ForInStatement" ,
30 "WithStatement"
31 ],
32 covVar = (typeof window === 'undefined' ? "_$jscoverage" : "window._$blanket" ),
33 reporter,instrumentFilter,
34 blanket = {
35 setFilter: function(filter){
362 instrumentFilter = filter;
37 },
38 getFilter: function(){
393 return instrumentFilter;
40 },
41 setReporter: function(reporterFcn){
420 reporter = reporterFcn;
43 },
44 instrument: function(config, next){
452 var inFile = config.inputFile,
46 inFileName = config.inputFileName;
472 var sourceArray = this._prepareSource(inFile);
482 blanket._trackingArraySetup=[];
492 var instrumented = parseAndModify(inFile,{loc:true,comment:true}, this._addTracking,inFileName);
502 instrumented = this._trackingSetup(inFileName,sourceArray)+instrumented;
512 next(instrumented);
52 },
53 _trackingArraySetup: [],
54 _prepareSource: function(source){
553 return source.replace(/'/g,"\'").replace(/( | | )/gm," ").split(' ');
56 },
57 _trackingSetup: function(filename,sourceArray){
58
593 var sourceString = sourceArray.join("', '");
603 var intro = "if (typeof "+covVar+" === 'undefined') "+covVar+" = {}; ";
613 intro += "if (typeof "+covVar+"['"+filename+"'] === 'undefined'){";
62
633 intro += covVar+"['"+filename+"']=[]; ";
643 intro += covVar+"['"+filename+"'].source=['"+sourceString+"']; ";
651 //initialize array values
663 blanket._trackingArraySetup.sort().forEach(function(item){
6712 intro += covVar+"['"+filename+"']["+item+"]=0; ";
68 });
69
703 intro += "}";
713 return intro;
72 },
73 _blockifyIf: function(node){
74
7587 if (linesToAddBrackets.indexOf(node.type) > -1){
767 var bracketsExistObject = node.consequent || node.body;
777 var bracketsExistAlt = node.alternate;
787 if( bracketsExistAlt && bracketsExistAlt.type != "BlockStatement") {
792 bracketsExistAlt.update("{ "+bracketsExistAlt.source()+"} ");
80 }
817 if( bracketsExistObject && bracketsExistObject.type != "BlockStatement") {
826 bracketsExistObject.update("{ "+bracketsExistObject.source()+"} ");
83 }
84 }
85 },
86 _addTracking: function (node,filename) {
8787 blanket._blockifyIf(node);
8887 if (linesToAddTracking.indexOf(node.type) > -1){
8923 if (node.type == "VariableDeclaration" &&
90 (node.parent.type == "ForStatement" || node.parent.type == "ForInStatement")){
910 return;
92 }
9323 if (node.loc && node.loc.start){
9423 node.update(covVar+"['"+filename+"']["+node.loc.start.line+"]++; "+node.source());
9523 blanket._trackingArraySetup.push(node.loc.start.line);
96 }else{
971 //I don't think we can handle a node with no location
980 throw new Error("The instrumenter encountered a node with no location: "+Object.keys(node));
99 }
100
101 }
102 },
103 report: function(coverage_data){
1040 coverage_data.files = (typeof window === 'undefined' ? _$jscoverage : window._$blanket );
1050 if (reporter){
1060 require([reporter.replace(".js","")],function(r){
1070 r(coverage_data);
108 });
109 }else{
1100 Reporter(coverage_data);
111 }
112 }
113 };
1141 return blanket;
115})();
116
117
118

testfile2

100%
1
1
0
LineHitsSource
15var a=3;if(a==1)a=2;else if(a==3){a=4;}result=a;