Skip to content

Commit b8afd02

Browse files
committed
refactor: move class definitions into their own files for readability
1 parent 5f02358 commit b8afd02

File tree

5 files changed

+170
-158
lines changed

5 files changed

+170
-158
lines changed

index.js

Lines changed: 1 addition & 157 deletions
Original file line numberDiff line numberDiff line change
@@ -9,163 +9,7 @@
99
const through = require('through2');
1010
const fs = require('fs');
1111
const path = require('path');
12-
13-
/**
14-
* Represents a "DA" entry, which records the hit count of
15-
* a line of code.
16-
*/
17-
class DA {
18-
/**
19-
* @param {number} lineNumber
20-
* @param {number} hits
21-
*/
22-
constructor(lineNumber, hits) {
23-
this.lineNumber = lineNumber;
24-
this.hits = hits;
25-
}
26-
27-
/**
28-
* @param {number} hits
29-
*/
30-
addHits(hits) {
31-
this.hits += hits;
32-
}
33-
34-
toString() {
35-
return `DA:${this.lineNumber},${this.hits}\n`;
36-
}
37-
}
38-
39-
/**
40-
* Represents a BRDA entry, which records the hit count
41-
* of a logical branch in code.
42-
*/
43-
class BRDA {
44-
/**
45-
* @param {number} lineNumber
46-
* @param {number} blockNumber
47-
* @param {number} branchNumber
48-
* @param {number|"-"} hits
49-
*/
50-
constructor(lineNumber, blockNumber, branchNumber, hits) {
51-
this.lineNumber = lineNumber;
52-
this.blockNumber = blockNumber;
53-
this.branchNumber = branchNumber;
54-
this.hits = hits;
55-
}
56-
57-
/**
58-
* @param {number|"-"} hits
59-
*/
60-
addHits(hits) {
61-
// If we've never executed the branch code path in an existing coverage
62-
// record, and we've never executed it here either, then keep it as '-'
63-
// (eg, never executed). If either of them is a number, then
64-
// use the number value.
65-
if (this.hits === '-' && hits === '-') {
66-
return;
67-
}
68-
69-
const oldHits = this.hits === '-' ? 0 : this.hits;
70-
const newHits = hits === '-' ? 0 : hits;
71-
72-
this.hits = oldHits + newHits;
73-
}
74-
75-
toString() {
76-
const { lineNumber, blockNumber, branchNumber, hits } = this;
77-
return `BRDA:${lineNumber},${blockNumber},${branchNumber},${hits}\n`;
78-
}
79-
}
80-
81-
/**
82-
* Represents a coverage file, and it's DA/BRDA records.
83-
*/
84-
class CoverageFile {
85-
/**
86-
* @param {string} filename
87-
*/
88-
constructor(filename) {
89-
this.filename = filename;
90-
this.DARecords = [];
91-
this.BRDARecords = [];
92-
}
93-
94-
/**
95-
* Finds and returns an existing DA entry via its line number.
96-
*
97-
* @param {number} lineNumber
98-
*
99-
* @returns {DA|undefined}
100-
*/
101-
findDA(lineNumber) {
102-
return this.DARecords.find((record) => record.lineNumber === lineNumber);
103-
}
104-
105-
/**
106-
* Creates a new DA record, or adds the hit count to an existing
107-
* record if available.
108-
*
109-
* @param {number} lineNumber
110-
* @param {number} hits
111-
*/
112-
addDA(lineNumber, hits) {
113-
const existingRecord = this.findDA(lineNumber);
114-
115-
if (existingRecord) {
116-
existingRecord.addHits(hits);
117-
return;
118-
}
119-
120-
this.DARecords.push(new DA(lineNumber, hits));
121-
}
122-
123-
/**
124-
* Finds and returns an existing BRDA entry.
125-
*
126-
* @param {number} lineNumber
127-
* @param {number} blockNumber
128-
* @param {number} branchNumber
129-
*
130-
* @returns {BRDA|undefined}
131-
*/
132-
findBRDA(lineNumber, blockNumber, branchNumber) {
133-
return this.BRDARecords.find(
134-
(record) =>
135-
record.lineNumber === lineNumber &&
136-
record.blockNumber === blockNumber &&
137-
record.branchNumber === branchNumber
138-
);
139-
}
140-
141-
/**
142-
* @param {number} lineNumber
143-
* @param {number} blockNumber
144-
* @param {number} branchNumber
145-
* @param {number|"-"} hits
146-
*/
147-
addBRDA(lineNumber, blockNumber, branchNumber, hits) {
148-
const existingRecord = this.findBRDA(lineNumber, blockNumber, branchNumber);
149-
150-
if (existingRecord) {
151-
existingRecord.addHits(hits);
152-
return;
153-
}
154-
155-
this.BRDARecords.push(
156-
new BRDA(lineNumber, blockNumber, branchNumber, hits)
157-
);
158-
}
159-
160-
toString() {
161-
return (
162-
`SF:${this.filename}\n` +
163-
this.DARecords.map((record) => record.toString()).join('') +
164-
this.BRDARecords.map((record) => record.toString()).join('') +
165-
'end_of_record\n'
166-
);
167-
}
168-
}
12+
const CoverageFile = require('./lib/CoverageFile');
16913

17014
/**
17115
* Find an existing coverage file

lib/BRDA.js

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/**
2+
* Represents a BRDA entry, which records the hit count
3+
* of a logical branch in code.
4+
*/
5+
module.exports = class BRDA {
6+
/**
7+
* @param {number} lineNumber
8+
* @param {number} blockNumber
9+
* @param {number} branchNumber
10+
* @param {number|"-"} hits
11+
*/
12+
constructor(lineNumber, blockNumber, branchNumber, hits) {
13+
this.lineNumber = lineNumber;
14+
this.blockNumber = blockNumber;
15+
this.branchNumber = branchNumber;
16+
this.hits = hits;
17+
}
18+
19+
/**
20+
* @param {number|"-"} hits
21+
*/
22+
addHits(hits) {
23+
// If we've never executed the branch code path in an existing coverage
24+
// record, and we've never executed it here either, then keep it as '-'
25+
// (eg, never executed). If either of them is a number, then
26+
// use the number value.
27+
if (this.hits === '-' && hits === '-') {
28+
return;
29+
}
30+
31+
const oldHits = this.hits === '-' ? 0 : this.hits;
32+
const newHits = hits === '-' ? 0 : hits;
33+
34+
this.hits = oldHits + newHits;
35+
}
36+
37+
toString() {
38+
const { lineNumber, blockNumber, branchNumber, hits } = this;
39+
return `BRDA:${lineNumber},${blockNumber},${branchNumber},${hits}\n`;
40+
}
41+
};

lib/CoverageFile.js

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
const DA = require('./DA');
2+
const BRDA = require('./BRDA');
3+
4+
/**
5+
* Represents a coverage file, and it's DA/BRDA records.
6+
*/
7+
module.exports = class CoverageFile {
8+
/**
9+
* @param {string} filename
10+
*/
11+
constructor(filename) {
12+
this.filename = filename;
13+
this.DARecords = [];
14+
this.BRDARecords = [];
15+
}
16+
17+
/**
18+
* Finds and returns an existing DA entry via its line number.
19+
*
20+
* @param {number} lineNumber
21+
*
22+
* @returns {DA|undefined}
23+
*/
24+
findDA(lineNumber) {
25+
return this.DARecords.find((record) => record.lineNumber === lineNumber);
26+
}
27+
28+
/**
29+
* Creates a new DA record, or adds the hit count to an existing
30+
* record if available.
31+
*
32+
* @param {number} lineNumber
33+
* @param {number} hits
34+
*/
35+
addDA(lineNumber, hits) {
36+
const existingRecord = this.findDA(lineNumber);
37+
38+
if (existingRecord) {
39+
existingRecord.addHits(hits);
40+
return;
41+
}
42+
43+
this.DARecords.push(new DA(lineNumber, hits));
44+
}
45+
46+
/**
47+
* Finds and returns an existing BRDA entry.
48+
*
49+
* @param {number} lineNumber
50+
* @param {number} blockNumber
51+
* @param {number} branchNumber
52+
*
53+
* @returns {BRDA|undefined}
54+
*/
55+
findBRDA(lineNumber, blockNumber, branchNumber) {
56+
return this.BRDARecords.find(
57+
(record) =>
58+
record.lineNumber === lineNumber &&
59+
record.blockNumber === blockNumber &&
60+
record.branchNumber === branchNumber
61+
);
62+
}
63+
64+
/**
65+
* @param {number} lineNumber
66+
* @param {number} blockNumber
67+
* @param {number} branchNumber
68+
* @param {number|"-"} hits
69+
*/
70+
addBRDA(lineNumber, blockNumber, branchNumber, hits) {
71+
const existingRecord = this.findBRDA(lineNumber, blockNumber, branchNumber);
72+
73+
if (existingRecord) {
74+
existingRecord.addHits(hits);
75+
return;
76+
}
77+
78+
this.BRDARecords.push(
79+
new BRDA(lineNumber, blockNumber, branchNumber, hits)
80+
);
81+
}
82+
83+
toString() {
84+
return (
85+
`SF:${this.filename}\n` +
86+
this.DARecords.map((record) => record.toString()).join('') +
87+
this.BRDARecords.map((record) => record.toString()).join('') +
88+
'end_of_record\n'
89+
);
90+
}
91+
};

lib/DA.js

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/**
2+
* Represents a "DA" entry, which records the hit count of
3+
* a line of code.
4+
*/
5+
module.exports = class DA {
6+
/**
7+
* @param {number} lineNumber
8+
* @param {number} hits
9+
*/
10+
constructor(lineNumber, hits) {
11+
this.lineNumber = lineNumber;
12+
this.hits = hits;
13+
}
14+
15+
/**
16+
* @param {number} hits
17+
*/
18+
addHits(hits) {
19+
this.hits += hits;
20+
}
21+
22+
toString() {
23+
return `DA:${this.lineNumber},${this.hits}\n`;
24+
}
25+
26+
/**
27+
* @param {string} input
28+
*
29+
* @returns {[lineNumber: number, hits: number]}
30+
*/
31+
static parseString(input) {
32+
const [lineNumber, hits] = input.split(',');
33+
return [parseInt(lineNumber, 10), parseInt(hits, 10)];
34+
}
35+
};

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
"main": "index.js",
55
"files": [
66
"index.js",
7-
"bin"
7+
"bin",
8+
"lib"
89
],
910
"scripts": {
1011
"lint": "eslint . --cache",

0 commit comments

Comments
 (0)