Skip to content
This repository has been archived by the owner on Dec 31, 2019. It is now read-only.

Commit

Permalink
Merge pull request #78 from taion/istanbul-ignore
Browse files Browse the repository at this point in the history
Add basic support for istanbul ignore
  • Loading branch information
douglasduteil committed Oct 31, 2015
2 parents b7e5db7 + c001a95 commit cfad586
Show file tree
Hide file tree
Showing 4 changed files with 73 additions and 25 deletions.
34 changes: 21 additions & 13 deletions src/instrumenter.js
Original file line number Diff line number Diff line change
Expand Up @@ -76,16 +76,19 @@ export class Instrumenter extends istanbul.Instrumenter {
return Object.keys(metrics)
.map((index) => metrics[index])
.map((fnMeta) => {
let [{start, end, skip}] =
this._getMetricOriginalLocations([fnMeta.loc]);
let [loc] = this._getMetricOriginalLocations([fnMeta.loc]);

// Force remove the last skip key
delete fnMeta.skip;
skip = skip ? {skip: skip} : {};
if (fnMeta.skip === undefined) {
delete fnMeta.skip;
if (loc.skip !== undefined) {
fnMeta.skip = loc.skip;
}
}

return {...fnMeta, ...{loc: {start, end}, ...skip}};
return {...fnMeta, loc};
})
.reduce(this._arrayToArrayLikeObject, {});;
.reduce(this._arrayToArrayLikeObject, {});
}

_branchMapTransformer(metrics){
Expand All @@ -99,27 +102,32 @@ export class Instrumenter extends istanbul.Instrumenter {
}
};
})
.reduce(this._arrayToArrayLikeObject, {});;
.reduce(this._arrayToArrayLikeObject, {});
}

////

_getMetricOriginalLocations(metricLocations = []){ let o = { line: 0, column: 0};
_getMetricOriginalLocations(metricLocations = []){
let o = { line: 0, column: 0};

return metricLocations
.map((generatedPositions) => {
return [
this._getOriginalPositionsFor(generatedPositions),
generatedPositions
]
})
.map(([{start, end}, {start: generatedStart, end: generatedEnd}]) => {
.map(([{start, end}, generatedPosition]) => {
let postitions = [start.line, start.column, end.line, end.column];
let isValid = postitions.reduce((bool, n) => {
bool &= n !== null; return bool;
}, 1);
let isValid = postitions.every((n) => n !== null);

// Matches behavior in _fnMapTransformer above.
if (generatedPosition.skip === undefined) {
delete generatedPosition.skip;
}

return isValid
? { start, end }
? { ...generatedPosition, start, end }
: { start: o, end: o, skip: true };
})
}
Expand Down
2 changes: 1 addition & 1 deletion test/fixtures/es6-classes/expectedCover.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ function generateNSkipedStatement(n){
function generateNSkipedFunction(...lostFnData){
return lostFnData.map(fnData => {
return {
...fnData, loc: {...lostStatment}, skip: true
...fnData, loc: {...skippedStatment}, skip: true
};
});
}
Expand Down
5 changes: 5 additions & 0 deletions test/fixtures/virgin/actual.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,8 @@
ONE.foo = function (bar) {
return baz(bar ? 0 : 1);
};

/* istanbul ignore next */
if (true) {
var a = 5;
}
57 changes: 46 additions & 11 deletions test/fixtures/virgin/expectedCover.js
Original file line number Diff line number Diff line change
@@ -1,31 +1,50 @@
// Compiled to

// 1. "use strict";
// 2.
// 3. ONE.foo = function (bar) {
// 4. return baz(bar ? 0 : 1);
// 5. };
// 1. "use strict";
// 2.
// 3. ONE.foo = function (bar) {
// 4. return baz(bar ? 0 : 1);
// 5. };
// 6.
// 7. /* istanbul ignore next */
// 8. if (true) {
// 9. var a = 5;
// 10. }


module.exports = {
statementMap: [
{
// 3. ONE.foo = function (bar) {
// 4. return baz(bar ? 0 : 1);
// 5. };
// 3. ONE.foo = function (bar) {
// 4. return baz(bar ? 0 : 1);
// 5. };
start: {line: 3, column: 0},
end: {line: 5, column: 2}
},
{
// 4. return baz(bar ? 0 : 1);
// 4. return baz(bar ? 0 : 1);
start: {line: 4, column: 2},
end: {line: 4, column: 26}
},
{
// 8. if (true) {
// 9. var a = 5;
// 10. }
start: {line: 8, column: 0},
end: {line: 10, column: 1},
skip: true
},
{
// 9. var a = 5;
start: {line: 9, column: 2},
end: {line: 9, column: 12},
skip: true
}
],

fnMap: [
{
// 3. ONE.foo = function (bar) {
// 3. ONE.foo = function (bar) {
name: '(anonymous_1)', line: 3,
loc: {
start: {line: 3, column: 10},
Expand All @@ -36,7 +55,7 @@ module.exports = {

branchMap: [
{
// 4. return baz(bar ? 0 : 1);
// 4. return baz(bar ? 0 : 1);
line: 4, type: 'cond-expr',
locations: [
{
Expand All @@ -48,6 +67,22 @@ module.exports = {
end: {line: 4, column: 24}
}
]
},
{
// 8. if (true) {
line: 8, type: 'if',
locations: [
{
start: {line: 8, column: 0},
end: {line: 8, column: 0},
skip: true
},
{
start: {line: 8, column: 0},
end: {line: 8, column: 0},
skip: true
}
]
}
]
};

0 comments on commit cfad586

Please sign in to comment.