Skip to content

Commit 7f62f0e

Browse files
authored
fix(coverage): Do not emit error on BRDA:0 entries (#417)
Coverage report generators in Coverage.py would generate BRDA:0 for exit branches. Ref: https://github.com/nedbat/coveragepy/blob/5467e1f/coverage/lcovreport.py#L108-L112 Also small string fixes for error messages in BRDA. Improves #362.
1 parent c115a86 commit 7f62f0e

File tree

2 files changed

+13
-5
lines changed

2 files changed

+13
-5
lines changed

src/test-explorer/lcov_parser.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -360,23 +360,27 @@ export async function parseLcov(
360360
if (!match) {
361361
throw new Error(`Invalid FNDA entry`);
362362
}
363-
const lineNumber = Number.parseInt(match[1], 10) - 1;
364-
if (lineNumber < 0) {
365-
throw new Error("Negative line number in DA entry");
363+
const lineNumber1 = Number.parseInt(match[1], 10);
364+
if (lineNumber1 < 0) {
365+
throw new Error("Negative line number in BRDA entry");
366366
}
367+
// There might be BRDA:0 for exiting branch in report generated by
368+
// Coverage.py. Simply drop these entries.
369+
if (lineNumber1 === 0) break;
370+
const lineNumber = lineNumber1 - 1;
367371
const isException = match[2] === "e";
368372
const blockId = Number.parseInt(match[3], 10);
369373
const rest = match[4];
370374
const commaOffset = rest.lastIndexOf(",");
371375
if (commaOffset === undefined) {
372-
throw new Error(`Invalid FNDA entry`);
376+
throw new Error(`Invalid BRDA entry`);
373377
}
374378
const label = rest.substring(0, commaOffset);
375379
const hitCountStr = rest.substring(commaOffset + 1);
376380
const hitCount =
377381
hitCountStr === "-" ? 0 : Number.parseInt(hitCountStr, 10);
378382
if (hitCount < 0) {
379-
throw new Error("Negative hit count in DA entry");
383+
throw new Error("Negative hit count in BRDA entry");
380384
}
381385

382386
if (info === undefined) {

test/lcov_parser.test.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,10 @@ describe("The lcov parser", () => {
7171
assert.equal(coveredFiles[0].declarationCoverage.total, 1);
7272
});
7373

74+
it("ignores invalid line numbers", async () => {
75+
assert.deepEqual(await parseTestLcov("BRDA:0,0,0,b"), []);
76+
});
77+
7478
describe("parses Java coverage data:", () => {
7579
let fileCov: BazelFileCoverage;
7680
before(async () => {

0 commit comments

Comments
 (0)