apex-code-coverage-transformer 1.5.0 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +83 -2
- package/lib/helpers/convertToGenericCoverageReport.js +28 -8
- package/lib/helpers/convertToGenericCoverageReport.js.map +1 -1
- package/lib/helpers/getTotalLines.d.ts +1 -0
- package/lib/helpers/getTotalLines.js +7 -0
- package/lib/helpers/getTotalLines.js.map +1 -0
- package/oclif.manifest.json +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -16,7 +16,7 @@ This will create a coverage JSON in this relative path - `coverage/coverage/cove
|
|
|
16
16
|
|
|
17
17
|
This JSON isn't accepted by SonarQube automatically and needs to be converted using this plugin.
|
|
18
18
|
|
|
19
|
-
**
|
|
19
|
+
**Disclaimer**: Due to existing bugs with how the Salesforce CLI reports `covered` lines (see [5511](https://github.com/forcedotcom/salesforcedx-vscode/issues/5511) and [1568](https://github.com/forcedotcom/cli/issues/1568)), to add support for `covered` lines in this plugin, I had to add a function to re-number out-of-range `covered` lines the CLI may report (ex: line 100 in a 98-line Apex Class is reported back as `covered` by the Salesforce CLI deploy command). Once Salesforce updates the API to correctly return `covered` lines in the deploy command, this function will be removed.
|
|
20
20
|
|
|
21
21
|
## Install
|
|
22
22
|
|
|
@@ -65,18 +65,99 @@ This [code coverage JSON file](https://raw.githubusercontent.com/mcarvin8/apex-c
|
|
|
65
65
|
<lineToCover lineNumber="53" covered="false"/>
|
|
66
66
|
<lineToCover lineNumber="59" covered="false"/>
|
|
67
67
|
<lineToCover lineNumber="60" covered="false"/>
|
|
68
|
+
<lineToCover lineNumber="1" covered="true"/>
|
|
69
|
+
<lineToCover lineNumber="2" covered="true"/>
|
|
70
|
+
<lineToCover lineNumber="3" covered="true"/>
|
|
71
|
+
<lineToCover lineNumber="4" covered="true"/>
|
|
72
|
+
<lineToCover lineNumber="5" covered="true"/>
|
|
73
|
+
<lineToCover lineNumber="6" covered="true"/>
|
|
74
|
+
<lineToCover lineNumber="7" covered="true"/>
|
|
75
|
+
<lineToCover lineNumber="8" covered="true"/>
|
|
76
|
+
<lineToCover lineNumber="9" covered="true"/>
|
|
77
|
+
<lineToCover lineNumber="10" covered="true"/>
|
|
78
|
+
<lineToCover lineNumber="11" covered="true"/>
|
|
79
|
+
<lineToCover lineNumber="12" covered="true"/>
|
|
80
|
+
<lineToCover lineNumber="13" covered="true"/>
|
|
81
|
+
<lineToCover lineNumber="14" covered="true"/>
|
|
82
|
+
<lineToCover lineNumber="15" covered="true"/>
|
|
83
|
+
<lineToCover lineNumber="16" covered="true"/>
|
|
84
|
+
<lineToCover lineNumber="17" covered="true"/>
|
|
85
|
+
<lineToCover lineNumber="18" covered="true"/>
|
|
86
|
+
<lineToCover lineNumber="19" covered="true"/>
|
|
87
|
+
<lineToCover lineNumber="20" covered="true"/>
|
|
88
|
+
<lineToCover lineNumber="21" covered="true"/>
|
|
89
|
+
<lineToCover lineNumber="22" covered="true"/>
|
|
90
|
+
<lineToCover lineNumber="23" covered="true"/>
|
|
91
|
+
<lineToCover lineNumber="24" covered="true"/>
|
|
92
|
+
<lineToCover lineNumber="25" covered="true"/>
|
|
93
|
+
<lineToCover lineNumber="26" covered="true"/>
|
|
94
|
+
<lineToCover lineNumber="27" covered="true"/>
|
|
68
95
|
</file>
|
|
69
96
|
<file path="force-app\main\default\classes\AccountProfile.cls">
|
|
70
97
|
<lineToCover lineNumber="52" covered="false"/>
|
|
71
98
|
<lineToCover lineNumber="53" covered="false"/>
|
|
72
99
|
<lineToCover lineNumber="59" covered="false"/>
|
|
73
100
|
<lineToCover lineNumber="60" covered="false"/>
|
|
101
|
+
<lineToCover lineNumber="54" covered="true"/>
|
|
102
|
+
<lineToCover lineNumber="55" covered="true"/>
|
|
103
|
+
<lineToCover lineNumber="56" covered="true"/>
|
|
104
|
+
<lineToCover lineNumber="57" covered="true"/>
|
|
105
|
+
<lineToCover lineNumber="58" covered="true"/>
|
|
106
|
+
<lineToCover lineNumber="61" covered="true"/>
|
|
107
|
+
<lineToCover lineNumber="62" covered="true"/>
|
|
108
|
+
<lineToCover lineNumber="63" covered="true"/>
|
|
109
|
+
<lineToCover lineNumber="64" covered="true"/>
|
|
110
|
+
<lineToCover lineNumber="65" covered="true"/>
|
|
111
|
+
<lineToCover lineNumber="66" covered="true"/>
|
|
112
|
+
<lineToCover lineNumber="67" covered="true"/>
|
|
113
|
+
<lineToCover lineNumber="68" covered="true"/>
|
|
114
|
+
<lineToCover lineNumber="69" covered="true"/>
|
|
115
|
+
<lineToCover lineNumber="70" covered="true"/>
|
|
116
|
+
<lineToCover lineNumber="71" covered="true"/>
|
|
117
|
+
<lineToCover lineNumber="72" covered="true"/>
|
|
118
|
+
<lineToCover lineNumber="1" covered="true"/>
|
|
119
|
+
<lineToCover lineNumber="2" covered="true"/>
|
|
120
|
+
<lineToCover lineNumber="3" covered="true"/>
|
|
121
|
+
<lineToCover lineNumber="4" covered="true"/>
|
|
122
|
+
<lineToCover lineNumber="5" covered="true"/>
|
|
123
|
+
<lineToCover lineNumber="6" covered="true"/>
|
|
124
|
+
<lineToCover lineNumber="7" covered="true"/>
|
|
125
|
+
<lineToCover lineNumber="8" covered="true"/>
|
|
126
|
+
<lineToCover lineNumber="9" covered="true"/>
|
|
127
|
+
<lineToCover lineNumber="10" covered="true"/>
|
|
74
128
|
</file>
|
|
75
|
-
<file path="
|
|
129
|
+
<file path="packaged\flows\Get_Info.flow-meta.xml">
|
|
76
130
|
<lineToCover lineNumber="52" covered="false"/>
|
|
77
131
|
<lineToCover lineNumber="53" covered="false"/>
|
|
78
132
|
<lineToCover lineNumber="59" covered="false"/>
|
|
79
133
|
<lineToCover lineNumber="60" covered="false"/>
|
|
134
|
+
<lineToCover lineNumber="54" covered="true"/>
|
|
135
|
+
<lineToCover lineNumber="55" covered="true"/>
|
|
136
|
+
<lineToCover lineNumber="56" covered="true"/>
|
|
137
|
+
<lineToCover lineNumber="57" covered="true"/>
|
|
138
|
+
<lineToCover lineNumber="58" covered="true"/>
|
|
139
|
+
<lineToCover lineNumber="61" covered="true"/>
|
|
140
|
+
<lineToCover lineNumber="62" covered="true"/>
|
|
141
|
+
<lineToCover lineNumber="63" covered="true"/>
|
|
142
|
+
<lineToCover lineNumber="64" covered="true"/>
|
|
143
|
+
<lineToCover lineNumber="65" covered="true"/>
|
|
144
|
+
<lineToCover lineNumber="66" covered="true"/>
|
|
145
|
+
<lineToCover lineNumber="67" covered="true"/>
|
|
146
|
+
<lineToCover lineNumber="68" covered="true"/>
|
|
147
|
+
<lineToCover lineNumber="69" covered="true"/>
|
|
148
|
+
<lineToCover lineNumber="70" covered="true"/>
|
|
149
|
+
<lineToCover lineNumber="71" covered="true"/>
|
|
150
|
+
<lineToCover lineNumber="72" covered="true"/>
|
|
151
|
+
<lineToCover lineNumber="73" covered="true"/>
|
|
152
|
+
<lineToCover lineNumber="74" covered="true"/>
|
|
153
|
+
<lineToCover lineNumber="75" covered="true"/>
|
|
154
|
+
<lineToCover lineNumber="76" covered="true"/>
|
|
155
|
+
<lineToCover lineNumber="77" covered="true"/>
|
|
156
|
+
<lineToCover lineNumber="78" covered="true"/>
|
|
157
|
+
<lineToCover lineNumber="79" covered="true"/>
|
|
158
|
+
<lineToCover lineNumber="80" covered="true"/>
|
|
159
|
+
<lineToCover lineNumber="81" covered="true"/>
|
|
160
|
+
<lineToCover lineNumber="82" covered="true"/>
|
|
80
161
|
</file>
|
|
81
162
|
</coverage>
|
|
82
163
|
```
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
+
import { getTotalLines } from './getTotalLines.js';
|
|
2
3
|
import { findFilePath } from './findFilePath.js';
|
|
3
4
|
export async function convertToGenericCoverageReport(data, dxConfigFile) {
|
|
4
5
|
let xml = '<?xml version="1.0"?>\n<coverage version="1">\n';
|
|
@@ -11,15 +12,34 @@ export async function convertToGenericCoverageReport(data, dxConfigFile) {
|
|
|
11
12
|
if (filePath === undefined) {
|
|
12
13
|
throw Error(`The file name ${formattedFileName} was not found in any package directory.`);
|
|
13
14
|
}
|
|
15
|
+
// Extract the "uncovered lines" from the JSON data
|
|
16
|
+
const uncoveredLines = Object.keys(fileInfo.s)
|
|
17
|
+
.filter(lineNumber => fileInfo.s[lineNumber] === 0)
|
|
18
|
+
.map(Number);
|
|
19
|
+
const coveredLines = Object.keys(fileInfo.s)
|
|
20
|
+
.filter(lineNumber => fileInfo.s[lineNumber] === 1)
|
|
21
|
+
.map(Number);
|
|
22
|
+
const randomLines = [];
|
|
23
|
+
const totalLines = getTotalLines(filePath);
|
|
14
24
|
xml += `\t<file path="${filePath}">\n`;
|
|
15
|
-
for (const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
25
|
+
for (const uncoveredLine of uncoveredLines) {
|
|
26
|
+
xml += `\t\t<lineToCover lineNumber="${uncoveredLine}" covered="false"/>\n`;
|
|
27
|
+
}
|
|
28
|
+
for (const coveredLine of coveredLines) {
|
|
29
|
+
if (coveredLine > totalLines) {
|
|
30
|
+
for (let randomLineNumber = 1; randomLineNumber <= totalLines; randomLineNumber++) {
|
|
31
|
+
if (!uncoveredLines.includes(randomLineNumber) &&
|
|
32
|
+
!coveredLines.includes(randomLineNumber) &&
|
|
33
|
+
!randomLines.includes(randomLineNumber)) {
|
|
34
|
+
xml += `\t\t<lineToCover lineNumber="${randomLineNumber}" covered="true"/>\n`;
|
|
35
|
+
randomLines.push(randomLineNumber);
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
xml += `\t\t<lineToCover lineNumber="${coveredLine}" covered="true"/>\n`;
|
|
42
|
+
}
|
|
23
43
|
}
|
|
24
44
|
xml += '\t</file>\n';
|
|
25
45
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convertToGenericCoverageReport.js","sourceRoot":"","sources":["../../src/helpers/convertToGenericCoverageReport.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAIb,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAAC,IAAkB,EAAE,YAAoB;IAC3F,IAAI,GAAG,GAAG,iDAAiD,CAAC;IAE5D,KAAK,MAAM,QAAQ,IAAI,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC;YAAE,SAAS;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChC,MAAM,iBAAiB,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;QACrE,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,KAAK,CAAC,iBAAiB,iBAAiB,0CAA0C,CAAC,CAAC;QAC5F,CAAC;QACD,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"convertToGenericCoverageReport.js","sourceRoot":"","sources":["../../src/helpers/convertToGenericCoverageReport.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAIb,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAAC,IAAkB,EAAE,YAAoB;IAC3F,IAAI,GAAG,GAAG,iDAAiD,CAAC;IAE5D,KAAK,MAAM,QAAQ,IAAI,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC;YAAE,SAAS;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChC,MAAM,iBAAiB,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;QACrE,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,KAAK,CAAC,iBAAiB,iBAAiB,0CAA0C,CAAC,CAAC;QAC5F,CAAC;QACD,mDAAmD;QACnD,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;aAC3C,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;aAClD,GAAG,CAAC,MAAM,CAAC,CAAC;QACf,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;aACzC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;aAClD,GAAG,CAAC,MAAM,CAAC,CAAC;QACf,MAAM,WAAW,GAAa,EAAE,CAAC;QACjC,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;QAE3C,GAAG,IAAI,iBAAiB,QAAQ,MAAM,CAAC;QAEvC,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE,CAAC;YAC3C,GAAG,IAAI,gCAAgC,aAAa,uBAAuB,CAAC;QAC9E,CAAC;QAED,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;YACvC,IAAI,WAAW,GAAG,UAAU,EAAE,CAAC;gBAC7B,KAAK,IAAI,gBAAgB,GAAG,CAAC,EAAE,gBAAgB,IAAI,UAAU,EAAE,gBAAgB,EAAE,EAAE,CAAC;oBAClF,IACE,CAAC,cAAc,CAAC,QAAQ,CAAC,gBAAgB,CAAC;wBAC1C,CAAC,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC;wBACxC,CAAC,WAAW,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EACvC,CAAC;wBACD,GAAG,IAAI,gCAAgC,gBAAgB,sBAAsB,CAAC;wBAC9E,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;wBACnC,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,GAAG,IAAI,gCAAgC,WAAW,sBAAsB,CAAC;YAC3E,CAAC;QACH,CAAC;QAED,GAAG,IAAI,aAAa,CAAC;IACvB,CAAC;IACD,GAAG,IAAI,aAAa,CAAC;IACrB,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function getTotalLines(filePath: string): number;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getTotalLines.js","sourceRoot":"","sources":["../../src/helpers/getTotalLines.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AACb,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,MAAM,UAAU,aAAa,CAAC,QAAgB;IAC5C,MAAM,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACtD,OAAO,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC;AAChD,CAAC"}
|
package/oclif.manifest.json
CHANGED
package/package.json
CHANGED