1
+ var util = require ( 'util' ) ,
2
+ file = require ( './file' ) ;
3
+
4
+ this . name = 'coverage-report-xml' ;
5
+
6
+ this . report = function ( coverageMap ) {
7
+ var all = {
8
+ xml : '' ,
9
+ packages : 0 ,
10
+ files : 0 ,
11
+ lines : 0 ,
12
+ hits : 0
13
+ } ,
14
+ data = { } ;
15
+
16
+ // group data by path
17
+ for ( var filename in coverageMap ) {
18
+ if ( coverageMap . hasOwnProperty ( filename ) ) {
19
+ var pkg = ( filename . indexOf ( '/' ) > 0 )
20
+ ? filename . substr ( 0 , filename . lastIndexOf ( '/' ) )
21
+ : filename ;
22
+ if ( ! data [ pkg ] ) {
23
+ data [ pkg ] = { } ;
24
+ }
25
+ data [ pkg ] [ ( filename . indexOf ( '/' ) )
26
+ ? filename . substr ( filename . lastIndexOf ( '/' ) + 1 , filename . length )
27
+ : filename ]
28
+ = file . coverage ( filename , coverageMap [ filename ] ) ;
29
+ }
30
+ }
31
+
32
+ // generate groups xml-fragment
33
+ for ( var pkg in data ) {
34
+ if ( data . hasOwnProperty ( pkg ) ) {
35
+ var pkgStat = {
36
+ xml : '' ,
37
+ files : 0 ,
38
+ lines : 0 ,
39
+ hits : 0
40
+ } ;
41
+
42
+ all . xml += '\t<package name="' + pkg + '">\n' ;
43
+
44
+ for ( var filename in data [ pkg ] ) {
45
+ if ( data [ pkg ] . hasOwnProperty ( filename ) ) {
46
+ pkgStat . files += 1 ;
47
+ pkgStat . lines += data [ pkg ] [ filename ] . sloc ;
48
+ pkgStat . hits += data [ pkg ] [ filename ] . hits ;
49
+
50
+ pkgStat . xml += '\t\t<srcfile name="' + filename + '">\n'
51
+ + '\t\t\t<coverage type="line, %" value="' + data [ pkg ] [ filename ] . coverage . toFixed ( 2 ) + '% (' + data [ pkg ] [ filename ] . hits + '/' + data [ pkg ] [ filename ] . sloc + ')"/>\n'
52
+ + '\t\t</srcfile>\n' ;
53
+ }
54
+ }
55
+
56
+ all . packages += 1 ;
57
+ all . files += pkgStat . files ;
58
+ all . lines += pkgStat . lines ;
59
+ all . hits += pkgStat . hits ;
60
+
61
+ all . xml += '\t\t<coverage type="line, %" value="' + ( ( pkgStat . hits * 100 ) / pkgStat . lines ) . toFixed ( 2 ) + '% (' + pkgStat . hits + '/' + pkgStat . lines + ')"/>\n'
62
+ + pkgStat . xml
63
+ + '\t</package>\n' ;
64
+ }
65
+ }
66
+
67
+ all . xml = '<?xml version="1.0" encoding="UTF-8"?>\n'
68
+ + '<report>\n<stats>\n'
69
+ + '\t<packages value="' + all . packages + '"/>\n'
70
+ + '\t<classes value="0"/>\n'
71
+ + '\t<methods value="0"/>\n'
72
+ + '\t<srcfiles value="' + all . files + '"/>\n'
73
+ + '\t<srclines value="' + all . lines + '"/>\n'
74
+ + '</stats>\n<data>\n'
75
+ + '<all name="all classes">\n'
76
+ + '\t<coverage type="line, %" value="' + ( ( all . hits * 100 ) / all . lines ) . toFixed ( 2 ) + '% (' + all . hits + '/' + all . lines + ')"/>\n'
77
+ + all . xml
78
+ + '</all>\n</data>\n</report>\n' ;
79
+
80
+ util . print ( all . xml ) ;
81
+ } ;
0 commit comments