Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve output of TextReporter #680

Open
wants to merge 40 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
f76180a
Remove whitespace on `DELIM`, PCT headers and remaining, and final delim
piranna Mar 25, 2019
4cbd57b
Set `PCT_COLS` to 7 characters except for `branches` column
piranna Mar 25, 2019
cf3b5db
Adjust `missing lines` column between header length and `maxCols`
piranna Mar 25, 2019
65f3062
[reports] Fixed tests
piranna Mar 26, 2019
91d570a
Fixed linting
piranna Mar 26, 2019
17dbcba
Added missing truncate of `missingWidth` when `nameWidth` gets truncated
piranna Mar 26, 2019
08db1ca
Added missing test for `maxCols` option
piranna Mar 26, 2019
c306a0a
Merge remote-tracking branch 'istanbuljs/master'
piranna May 11, 2019
892736c
Fix alignment of JSON fixtures
piranna May 11, 2019
e8282a6
Update `maxcols` fixture to new data format
piranna May 11, 2019
82600f8
[text reporter] Restore padding in columns delimiter
piranna May 12, 2019
ee8710a
[text reporter] adjust to terminal width
piranna May 12, 2019
3aca064
[test reporter] fix destructure from undefined options
piranna May 12, 2019
0633575
[text report] Short-circuit for summary lines
piranna May 13, 2019
d8e7643
[text reporter] Unified `missingLines`, `missingBranches` and `nodeMi…
piranna May 13, 2019
79dae9f
[text reporter] unified `findMissingWidth()` and `findNameWidth()`
piranna May 13, 2019
71e867f
[text report] Fixed tests fixtures
piranna May 13, 2019
d15eb21
[test reporter] Fixed linting
piranna May 13, 2019
5abd59d
[text reporter] Left align "Uncovered lines #s" column
piranna May 22, 2019
c26ef2a
[text reporter] Continuation dots at right side for left aligned tests
piranna May 22, 2019
4db79e5
Merge remote-tracking branch 'istanbuljs/master'
piranna May 26, 2019
1667c94
[text reporter] Left align with continuation dots on left side
piranna May 26, 2019
bc0d1cf
[text reporter] Remove useless `.map()` & move common `getFileCoverag…
piranna May 26, 2019
9eb9561
[text reporter] Updated fixtures for left align with left side dots
piranna May 26, 2019
755b13a
[text reporter] add right padding for `missing lines #s` column
piranna May 26, 2019
1eb1d3e
Merge remote-tracking branch 'istanbuljs/master'
piranna May 27, 2019
34b5b30
Merge branch 'master' of github.com:istanbuljs/istanbuljs
piranna Dec 11, 2019
b15bec4
[text report] Coalesce ranges of lines
piranna Dec 11, 2019
67d3510
[text report] Remove usage of `flatMap()` to be compatible with Node.…
piranna Dec 12, 2019
59dbe06
[Text report] Test for "coalescense ranges of missing lines"
piranna Dec 12, 2019
6fe668a
Merge remote-tracking branch 'istanbuljs/master'
piranna Feb 3, 2020
8fecd2d
[text report] Include empty lines in uncovered ranges
piranna Feb 3, 2020
4e56b41
[reports text] Fixed specs (they are re-used by `html-spa` report)
piranna Feb 3, 2020
820b23c
Merge remote-tracking branch 'istanbuljs/master'
piranna May 4, 2022
eed6621
Separate ranges with whitespaces instead of commas
piranna May 4, 2022
ec1df4e
Show ranges with just two consecutive lines as independent ranges
piranna May 4, 2022
211f296
Show all ranges with just two lines as independent ones
piranna May 4, 2022
f75ff6f
Don't pad right whitespaces on missing lines column
piranna May 4, 2022
2da8e62
Hide excesive ranges at full range
piranna May 4, 2022
62a731b
Updated `TextReporter` tests
piranna May 4, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
56 changes: 46 additions & 10 deletions packages/istanbul-reports/lib/text/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,9 @@ function padding(num, ch) {
}

function fill(str, width, right, tabs) {
tabs = tabs || 0;
str = String(str);

const leadingSpaces = tabs * TAB_SIZE;
const leadingSpaces = (tabs || 0) * TAB_SIZE;
const remaining = width - leadingSpaces;
const leader = padding(leadingSpaces);
let fmtStr = '';
Expand All @@ -36,12 +35,30 @@ function fill(str, width, right, tabs) {
let fillStr;

if (remaining >= strlen) {
fillStr = padding(remaining - strlen);
fillStr = (right || tabs !== undefined)
? padding(remaining - strlen)
: '';
} else {
fillStr = '...';
const length = remaining - fillStr.length;

str = str.substring(strlen - length);
if (tabs !== undefined) {
str = str.substring(strlen - length);
} else {
const ranges = str.split(' ')
while(ranges.shift()) {
str = ranges.join(' ');

if (str.length < length) {
break;
}
}

if (str.length) {
fillStr = fillStr + ' ';
}
}

right = true;
}
fmtStr = right ? fillStr + str : str + fillStr;
Expand All @@ -58,6 +75,19 @@ function formatPct(pct, width) {
return fill(pct, width || PCT_COLS, true, 0);
}

function splitlastRange(ranges) {
const {length} = ranges;
if (!length) return

const lastRange = ranges[length - 1];
if(lastRange.length !== 2) return

const [start, end] = lastRange;

ranges.pop();
ranges.push([start], [end]);
}

function nodeMissing(node) {
if (node.isSummary()) {
return '';
Expand All @@ -81,28 +111,34 @@ function nodeMissing(node) {
}

let newRange = true;
const ranges = coveredLines
let ranges = coveredLines
.reduce((acum, [line, hit]) => {
if (hit) newRange = true;
else {
if (hit) {
splitlastRange(acum);
newRange = true;
} else {
line = parseInt(line);
if (newRange) {
acum.push([line]);
newRange = false;
} else acum[acum.length - 1][1] = line;
} else acum[acum.length - 1].push(line);
}

return acum;
}, [])

splitlastRange(ranges);

ranges = ranges
.map(range => {
const { length } = range;

if (length === 1) return range[0];

return `${range[0]}-${range[1]}`;
return `${range[0]}-${range[range.length - 1]}`;
});

return [].concat(...ranges).join(',');
return [].concat(...ranges).join(' ');
}

function nodeName(node) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"maxCols": 80,
"projectRoot": "/Users/benjamincoe/oss/"
},
"textReportExpected": "----------|---------|----------|---------|---------|-------------------\nFile | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s \n----------|---------|----------|---------|---------|-------------------\n\u001b[32;1mAll files\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[33;1m \u001b[0m \n\u001b[32;1m index.js\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[33;1m \u001b[0m \n----------|---------|----------|---------|---------|-------------------\n",
"textReportExpected": "----------|---------|----------|---------|---------|-------------------\nFile | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s \n----------|---------|----------|---------|---------|-------------------\n\u001b[32;1mAll files\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[33;1m\u001b[0m \n\u001b[32;1m index.js\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[33;1m\u001b[0m \n----------|---------|----------|---------|---------|-------------------\n",
"htmlSpaFiles": ["index.js.html", "index.html"],
"htmlSpaCoverageData": {
"file": "",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"title": "100% line coverage, missing branch coverage",
"textReportExpected": "----------|---------|----------|---------|---------|-------------------\nFile | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s \n----------|---------|----------|---------|---------|-------------------\n\u001b[32;1mAll files\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 95.34\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[33;1m \u001b[0m \n\u001b[32;1m index.js\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 95.34\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[33;1m21,29 \u001b[0m \n----------|---------|----------|---------|---------|-------------------\n",
"textReportExpected": "----------|---------|----------|---------|---------|-------------------\nFile | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s \n----------|---------|----------|---------|---------|-------------------\n\u001b[32;1mAll files\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 95.34\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[33;1m\u001b[0m \n\u001b[32;1m index.js\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 95.34\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[33;1m21 29\u001b[0m \n----------|---------|----------|---------|---------|-------------------\n",
"opts": {
"maxCols": 80,
"projectRoot": "/Users/benjamincoe/oss/"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"maxCols": 80,
"projectRoot": "/"
},
"textReportExpected": "----------|---------|----------|---------|---------|----------------------\nFile | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s \n----------|---------|----------|---------|---------|----------------------\n\u001b[31;1mAll files\u001b[0m | \u001b[31;1m 30\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[31;1m 33.33\u001b[0m | \u001b[31;1m \u001b[0m \n\u001b[31;1m index.js\u001b[0m | \u001b[31;1m 30\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[31;1m 33.33\u001b[0m | \u001b[31;1m2,4,9,21-28,32,35-37\u001b[0m \n----------|---------|----------|---------|---------|----------------------\n",
"textReportExpected": "----------|---------|----------|---------|---------|----------------------\nFile | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s \n----------|---------|----------|---------|---------|----------------------\n\u001b[31;1mAll files\u001b[0m | \u001b[31;1m 30\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[31;1m 33.33\u001b[0m | \u001b[31;1m\u001b[0m \n\u001b[31;1m index.js\u001b[0m | \u001b[31;1m 30\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[31;1m 33.33\u001b[0m | \u001b[31;1m2 4 9 21-28 32 35-37\u001b[0m \n----------|---------|----------|---------|---------|----------------------\n",
"htmlSpaFiles": ["index.js.html", "index.html"],
"htmlSpaCoverageData": {
"file": "",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"maxCols": 80,
"projectRoot": "/Users/jschmidle/oss/istanbuljs-test/"
},
"textReportExpected": "-------------------|---------|----------|---------|---------|-------------------\nFile | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s \n-------------------|---------|----------|---------|---------|-------------------\nAll files | 0 | 0 | 0 | 0 | \u001b[31;1m \u001b[0m \n istanbuljs-test | 0 | 0 | 0 | 0 | \u001b[31;1m \u001b[0m \n rootfile.js | 0 | 0 | 0 | 0 | \u001b[31;1m \u001b[0m \n ...-test/package1 | 0 | 0 | 0 | 0 | \u001b[31;1m \u001b[0m \n package1file.js | 0 | 0 | 0 | 0 | \u001b[31;1m \u001b[0m \n ...ge1/subpackage | 0 | 0 | 0 | 0 | \u001b[31;1m \u001b[0m \n ...ackagefile.js | 0 | 0 | 0 | 0 | \u001b[31;1m \u001b[0m \n ...-test/package2 | 0 | 0 | 0 | 0 | \u001b[31;1m \u001b[0m \n package2file.js | 0 | 0 | 0 | 0 | \u001b[31;1m \u001b[0m \n-------------------|---------|----------|---------|---------|-------------------\n",
"textReportExpected": "-------------------|---------|----------|---------|---------|-------------------\nFile | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s \n-------------------|---------|----------|---------|---------|-------------------\nAll files | 0 | 0 | 0 | 0 | \u001b[31;1m\u001b[0m \n istanbuljs-test | 0 | 0 | 0 | 0 | \u001b[31;1m\u001b[0m \n rootfile.js | 0 | 0 | 0 | 0 | \u001b[31;1m\u001b[0m \n ...-test/package1 | 0 | 0 | 0 | 0 | \u001b[31;1m\u001b[0m \n package1file.js | 0 | 0 | 0 | 0 | \u001b[31;1m\u001b[0m \n ...ge1/subpackage | 0 | 0 | 0 | 0 | \u001b[31;1m\u001b[0m \n ...ackagefile.js | 0 | 0 | 0 | 0 | \u001b[31;1m\u001b[0m \n ...-test/package2 | 0 | 0 | 0 | 0 | \u001b[31;1m\u001b[0m \n package2file.js | 0 | 0 | 0 | 0 | \u001b[31;1m\u001b[0m \n-------------------|---------|----------|---------|---------|-------------------\n",
"htmlSpaFiles": [
["package1","package1file.js.html"],
["package1","subpackage","subpackagefile.js.html"],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"maxCols": 80,
"projectRoot": "/dev/git/istanbuljs/packages/istanbul-reports"
},
"textReportExpected": "----------|---------|----------|---------|---------|-------------------\nFile | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s \n----------|---------|----------|---------|---------|-------------------\nAll files | 0 | 0 | 0 | 0 | \u001b[31;1m \u001b[0m \n empty.js | 0 | 0 | 0 | 0 | \u001b[31;1m \u001b[0m \n----------|---------|----------|---------|---------|-------------------\n",
"textReportExpected": "----------|---------|----------|---------|---------|-------------------\nFile | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s \n----------|---------|----------|---------|---------|-------------------\nAll files | 0 | 0 | 0 | 0 | \u001b[31;1m\u001b[0m \n empty.js | 0 | 0 | 0 | 0 | \u001b[31;1m\u001b[0m \n----------|---------|----------|---------|---------|-------------------\n",
"htmlSpaFiles": ["empty.js.html", "index.html"],
"htmlSpaCoverageData": {
"file": "",
Expand Down
2 changes: 1 addition & 1 deletion packages/istanbul-reports/test/fixtures/specs/maxcols.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"maxCols": 80,
"projectRoot": "/"
},
"textReportExpected": "----------|---------|----------|---------|---------|----------------------------\nFile | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s \n----------|---------|----------|---------|---------|----------------------------\n\u001b[31;1mAll files\u001b[0m | \u001b[31;1m 40\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[31;1m 40\u001b[0m | \u001b[31;1m \u001b[0m \n\u001b[31;1m index.js\u001b[0m | \u001b[31;1m 40\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[31;1m 40\u001b[0m | \u001b[31;1m...11,15,19,23,27,31,35,39\u001b[0m \n----------|---------|----------|---------|---------|----------------------------\n",
"textReportExpected": "----------|---------|----------|---------|---------|----------------------------\nFile | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s \n----------|---------|----------|---------|---------|----------------------------\n\u001b[31;1mAll files\u001b[0m | \u001b[31;1m 40\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[31;1m 40\u001b[0m | \u001b[31;1m\u001b[0m \n\u001b[31;1m index.js\u001b[0m | \u001b[31;1m 40\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[31;1m 40\u001b[0m | \u001b[31;1m... 15 19 23 27 31 35 39\u001b[0m \n----------|---------|----------|---------|---------|----------------------------\n",
"htmlSpaFiles": ["index.js.html", "index.html"],
"htmlSpaCoverageData": {
"file": "",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"title": "100% line coverage, missing branch coverage",
"textReportExpected": "----------|---------|----------|---------|---------|-------------------\nFile | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s \n----------|---------|----------|---------|---------|-------------------\n\u001b[32;1mAll files\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 95.34\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[33;1m \u001b[0m \n\u001b[32;1m index.js\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 95.34\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[33;1m21,29 \u001b[0m \n----------|---------|----------|---------|---------|-------------------\n",
"textReportExpected": "----------|---------|----------|---------|---------|-------------------\nFile | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s \n----------|---------|----------|---------|---------|-------------------\n\u001b[32;1mAll files\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 95.34\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[33;1m\u001b[0m \n\u001b[32;1m index.js\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 95.34\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[33;1m21 29\u001b[0m \n----------|---------|----------|---------|---------|-------------------\n",
"lcovonlyExpected": "TN:\nSF:\nFN:12,TestExclude\nFN:50,(anonymous_1)\nFN:52,(anonymous_2)\nFN:61,(anonymous_3)\nFN:71,(anonymous_4)\nFN:84,prepGlobPatterns\nFN:85,(anonymous_6)\nFN:100,(anonymous_7)\nFNF:8\nFNH:8\nFNDA:21,TestExclude\nFNDA:21,(anonymous_1)\nFNDA:95,(anonymous_2)\nFNDA:56,(anonymous_3)\nFNDA:7,(anonymous_4)\nFNDA:26,prepGlobPatterns\nFNDA:105,(anonymous_6)\nFNDA:21,(anonymous_7)\nDA:1,1\nDA:2,1\nDA:3,1\nDA:4,1\nDA:5,1\nDA:13,21\nDA:21,21\nDA:22,21\nDA:24,21\nDA:25,7\nDA:28,21\nDA:29,15\nDA:32,21\nDA:33,5\nDA:35,16\nDA:38,21\nDA:39,5\nDA:42,21\nDA:50,1\nDA:51,21\nDA:52,21\nDA:53,95\nDA:55,95\nDA:56,95\nDA:58,21\nDA:61,1\nDA:62,56\nDA:65,56\nDA:67,55\nDA:68,55\nDA:71,1\nDA:72,7\nDA:76,7\nDA:77,6\nDA:78,6\nDA:80,1\nDA:85,26\nDA:87,105\nDA:88,39\nDA:92,105\nDA:93,50\nDA:96,105\nDA:100,1\nDA:101,21\nDA:104,1\nDA:113,1\nLF:46\nLH:46\nBRDA:21,0,0,1\nBRDA:21,0,1,20\nBRDA:21,1,0,1\nBRDA:21,1,1,0\nBRDA:22,2,0,1\nBRDA:22,2,1,20\nBRDA:24,3,0,7\nBRDA:24,3,1,14\nBRDA:24,4,0,21\nBRDA:24,4,1,18\nBRDA:24,4,2,15\nBRDA:28,5,0,15\nBRDA:28,5,1,6\nBRDA:28,6,0,21\nBRDA:28,6,1,8\nBRDA:29,7,0,15\nBRDA:29,7,1,0\nBRDA:32,8,0,5\nBRDA:32,8,1,16\nBRDA:32,9,0,21\nBRDA:32,9,1,5\nBRDA:38,10,0,5\nBRDA:38,10,1,16\nBRDA:38,11,0,21\nBRDA:38,11,1,20\nBRDA:55,12,0,1\nBRDA:55,12,1,94\nBRDA:62,13,0,56\nBRDA:62,13,1,56\nBRDA:65,14,0,1\nBRDA:65,14,1,55\nBRDA:68,15,0,55\nBRDA:68,15,1,15\nBRDA:68,15,2,50\nBRDA:76,16,0,6\nBRDA:76,16,1,1\nBRDA:76,17,0,7\nBRDA:76,17,1,7\nBRDA:76,17,2,6\nBRDA:87,18,0,39\nBRDA:87,18,1,66\nBRDA:92,19,0,50\nBRDA:92,19,1,55\nBRF:43\nBRH:41\nend_of_record\n",
"htmlSpaFiles": ["index.js.html", "index.html"],
"htmlSpaCoverageData": {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"title": "missing line and branch coverage",
"textReportExpected": "----------|---------|----------|---------|---------|-------------------\nFile | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s \n----------|---------|----------|---------|---------|-------------------\n\u001b[32;1mAll files\u001b[0m | \u001b[32;1m 98.03\u001b[0m | \u001b[32;1m 95.34\u001b[0m | \u001b[32;1m 88.88\u001b[0m | \u001b[32;1m 97.87\u001b[0m | \u001b[31;1m \u001b[0m \n\u001b[32;1m index.js\u001b[0m | \u001b[32;1m 98.03\u001b[0m | \u001b[32;1m 95.34\u001b[0m | \u001b[32;1m 88.88\u001b[0m | \u001b[32;1m 97.87\u001b[0m | \u001b[31;1m9 \u001b[0m \n----------|---------|----------|---------|---------|-------------------\n",
"textReportExpected": "----------|---------|----------|---------|---------|-------------------\nFile | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s \n----------|---------|----------|---------|---------|-------------------\n\u001b[32;1mAll files\u001b[0m | \u001b[32;1m 98.03\u001b[0m | \u001b[32;1m 95.34\u001b[0m | \u001b[32;1m 88.88\u001b[0m | \u001b[32;1m 97.87\u001b[0m | \u001b[31;1m\u001b[0m \n\u001b[32;1m index.js\u001b[0m | \u001b[32;1m 98.03\u001b[0m | \u001b[32;1m 95.34\u001b[0m | \u001b[32;1m 88.88\u001b[0m | \u001b[32;1m 97.87\u001b[0m | \u001b[31;1m9\u001b[0m \n----------|---------|----------|---------|---------|-------------------\n",
"opts": {
"maxCols": 80,
"projectRoot": "/Users/benjamincoe/oss"
Expand Down