diff options
| author | Kevin J Hoerr <kjhoerr@protonmail.com> | 2019-11-29 18:28:54 -0500 |
|---|---|---|
| committer | Kevin J Hoerr <kjhoerr@protonmail.com> | 2019-11-29 18:28:54 -0500 |
| commit | 1158e558606034b681f4663d62677e798cf5ec23 (patch) | |
| tree | 35e9ead895b0b0d2008d4c622f5d010a4098fc7c /src/formats.ts | |
| parent | 5964ec16673bd1474d32ffe87a2009b823c36f12 (diff) | |
| download | ao-coverage-1158e558606034b681f4663d62677e798cf5ec23.tar.gz ao-coverage-1158e558606034b681f4663d62677e798cf5ec23.tar.bz2 ao-coverage-1158e558606034b681f4663d62677e798cf5ec23.zip | |
Implement report parsing for Tarpaulin
The generated Tarpaulin HTML report does not have stats to parse via the
DOM - the data is injected via a script tag, which only has line-by-line
coverage, though it includes statistics for each file. The total coverage is
counted by summing the covered/coverable stats reported for each file.
Also, the bad version for express is fixed, and messages are
included for errors that occur for the POST endpoint.
Diffstat (limited to 'src/formats.ts')
| -rw-r--r-- | src/formats.ts | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/src/formats.ts b/src/formats.ts index 34f97df..5d389b4 100644 --- a/src/formats.ts +++ b/src/formats.ts @@ -33,8 +33,30 @@ const FormatsObj: FormatObj = { formats: { tarpaulin: { parse_coverage: (file: Document) => { - //TODO parse coverage from file (example?) - return 0.0; + const scripts = file.getElementsByTagName("script"); + if (scripts.length == 0) { + throw new Error("Invalid report document"); + } + const data = scripts[0].text; + const accumFunc = (regex: RegExp) => { + let acc: number = 0; + while (true) { + const match = regex.exec(data); + if (match === null) break; + acc += Number(match[1]); + } + + return acc; + }; + + const covered = accumFunc(/"covered":(\d*)/g); + const coverable = accumFunc(/"coverable":(\d*)/g); + + // do not error if LOC is 0 + if (coverable === 0) { + return 0.0; + } + return (100 * covered) / coverable; }, match_color: default_color_matches } |
