apex-code-coverage-transformer 1.5.0 → 1.6.0-beta.1

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.
@@ -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 lineNumber in fileInfo.s) {
16
- if (!Object.hasOwn(fileInfo.s, lineNumber))
17
- continue;
18
- const count = fileInfo.s[lineNumber];
19
- const covered = count > 0 ? 'true' : 'false';
20
- // only add uncovered lines
21
- if (covered === 'false')
22
- xml += `\t\t<lineToCover lineNumber="${lineNumber}" covered="${covered}"/>\n`;
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,iBAAiB,QAAQ,MAAM,CAAC;QAEvC,KAAK,MAAM,UAAU,IAAI,QAAQ,CAAC,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC;gBAAE,SAAS;YACrD,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;YACrC,MAAM,OAAO,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;YAC7C,2BAA2B;YAC3B,IAAI,OAAO,KAAK,OAAO;gBAAE,GAAG,IAAI,gCAAgC,UAAU,cAAc,OAAO,OAAO,CAAC;QACzG,CAAC;QACD,GAAG,IAAI,aAAa,CAAC;IACvB,CAAC;IACD,GAAG,IAAI,aAAa,CAAC;IACrB,OAAO,GAAG,CAAC;AACb,CAAC"}
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,7 @@
1
+ 'use strict';
2
+ import * as fs from 'node:fs';
3
+ export function getTotalLines(filePath) {
4
+ const fileContent = fs.readFileSync(filePath, 'utf8');
5
+ return fileContent.split(/\r\n|\r|\n/).length;
6
+ }
7
+ //# sourceMappingURL=getTotalLines.js.map
@@ -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"}
@@ -73,5 +73,5 @@
73
73
  ]
74
74
  }
75
75
  },
76
- "version": "1.5.0"
76
+ "version": "1.6.0-beta.1"
77
77
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "apex-code-coverage-transformer",
3
3
  "description": "Transforms the Apex Code Coverage JSON into the Generic Test Data Report.",
4
- "version": "1.5.0",
4
+ "version": "1.6.0-beta.1",
5
5
  "dependencies": {
6
6
  "@oclif/core": "^3.18.1",
7
7
  "@salesforce/core": "^6.4.7",