@@ -19,16 +19,44 @@ class LLVMCoverageReader {
19
19
const data = require ( file ) ;
20
20
console . log ( data ) ;
21
21
22
- // Read the code coverage percentages for every package file
23
- const testedFiles = data [ 'data' ] [ 0 ] [ 'files' ] ;
24
- const testFileCount = testedFiles . length ;
25
- var accumlative = 0 ;
26
- for ( const i in testedFiles ) {
27
- accumlative += testedFiles [ i ] [ 'summary' ] [ 'lines' ] [ 'percent' ] ;
22
+ // Create 2 groups of files (Source + Source&Test)
23
+ const testAndSourceFiles = data [ 'data' ] [ 0 ] [ 'files' ] . filter ( ( file ) => ! file . filename . includes ( '.build' ) ) ;
24
+ const sourceFiles = testAndSourceFiles . filter ( ( file ) => ! file . filename . includes ( 'Tests' ) ) ;
25
+
26
+ // Iterate through the source files
27
+ var sourceLineCount = 0 ;
28
+ var sourceLinesCovered = 0 ;
29
+ for ( const i in sourceFiles ) {
30
+ let filename = sourceFiles [ i ] . filename ;
31
+ let percent = sourceFiles [ i ] [ 'summary' ] [ 'lines' ] [ 'percent' ] ;
32
+ let count = sourceFiles [ i ] [ 'summary' ] [ 'lines' ] [ 'count' ] ;
33
+ let covered = sourceFiles [ i ] [ 'summary' ] [ 'lines' ] [ 'covered' ] ;
34
+ //console.log(i, filename, covered, count, percent);
35
+ sourceLineCount += sourceFiles [ i ] [ 'summary' ] [ 'lines' ] [ 'count' ] ;
36
+ sourceLinesCovered += sourceFiles [ i ] [ 'summary' ] [ 'lines' ] [ 'covered' ] ;
37
+ }
38
+
39
+ // Iterate through the source and test files
40
+ var testAndSourceLineCount = 0 ;
41
+ var testAndSourceLinesCovered = 0 ;
42
+ for ( const i in testAndSourceFiles ) {
43
+ let filename = testAndSourceFiles [ i ] . filename ;
44
+ let percent = testAndSourceFiles [ i ] [ 'summary' ] [ 'lines' ] [ 'percent' ] ;
45
+ let count = testAndSourceFiles [ i ] [ 'summary' ] [ 'lines' ] [ 'count' ] ;
46
+ let covered = testAndSourceFiles [ i ] [ 'summary' ] [ 'lines' ] [ 'covered' ] ;
47
+ //console.log(i, filename, covered, count, percent);
48
+ testAndSourceLineCount += testAndSourceFiles [ i ] [ 'summary' ] [ 'lines' ] [ 'count' ] ;
49
+ testAndSourceLinesCovered += testAndSourceFiles [ i ] [ 'summary' ] [ 'lines' ] [ 'covered' ] ;
28
50
}
51
+
52
+ const sourcePercentage = ( ( sourceLinesCovered / sourceLineCount ) * 100 ) ;
53
+ const testAndSourcePercentage = ( ( testAndSourceLinesCovered / testAndSourceLineCount ) * 100 ) ;
54
+ // Average the 2 percentages together (what Xcode does).
55
+ const avergagePercentage = ( ( sourcePercentage + testAndSourcePercentage ) / 200.0 ) * 100 ;
56
+ console . log ( 'Percentages' , sourcePercentage , testAndSourcePercentage ) ;
29
57
30
- let percentage = Math . floor ( ( ( accumlative / ( 100 * testFileCount ) ) * 100 ) ) . toFixed ( 0 ) ;
31
- console . log ( `Coverage Percentage [${ percentage } ]` ) ;
58
+ const percentage = avergagePercentage . toFixed ( 0 ) ;
59
+ console . log ( `Coverage Percentage [${ avergagePercentage } ]` ) ;
32
60
core . setOutput ( "percentage" , percentage ) ;
33
61
34
62
} catch ( error ) {
0 commit comments