enhance(API): Add constant passthru for wrappers
[ric-plt/lib/rmr.git] / test / cov2xml.ksh
1 #!/usr/bin/env ksh
2
3 #==================================================================================
4 #        Copyright (c) 2019 Nokia
5 #        Copyright (c) 2018-2019 AT&T Intellectual Property.
6 #
7 #   Licensed under the Apache License, Version 2.0 (the "License");
8 #   you may not use this file except in compliance with the License.
9 #   You may obtain a copy of the License at
10 #
11 #       http://www.apache.org/licenses/LICENSE-2.0
12 #
13 #   Unless required by applicable law or agreed to in writing, software
14 #   distributed under the License is distributed on an "AS IS" BASIS,
15 #   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 #   See the License for the specific language governing permissions and
17 #   limitations under the License.
18 #==================================================================================
19
20
21 #
22 #       Mnemonic:       cov2xml.ksh
23 #       Abstract:       Process the coverage file(s) which are read from standard in
24 #                               to generate a single set of XML output that Sonar can ingest.
25 #                               Basic usage is:
26 #                                       cat *.gcov | cov2xml.ksh >file.xml
27 #
28 #                               The XML generated is based on the Sonar doc:
29 #                                       https://docs.sonarqube.org/latest/analysis/generic-test/
30 #
31 #       Date:           30 April 2019
32 #       Author:         E. Scott Daniels
33 # -------------------------------------------------------------------------
34
35 awk '
36         function start() {
37                 printf(  "<coverage version=\"1\">\n" )         # sonar is VERY picky about this
38         }
39
40         function end() {
41                 printf( "</coverage>\n" )
42         }
43
44         function start_file( name ) {
45           printf( "<file path=\"%s\">\n", name )
46         }
47
48         function end_file( ) {
49                 printf( "</file>\n" )
50         }
51
52         function good_line( num ) {
53                 if( num > 0 ) {
54                         printf( "<lineToCover lineNumber=\"%d\" covered=\"true\"/>\n", num )
55                 }
56         }
57
58         function bad_line( num ) {
59                 if( num > 0 ) {
60                         printf( "<lineToCover lineNumber=\"%d\" covered=\"false\"/>\n", num )
61                 }
62         }
63
64         BEGIN {
65                 start()
66         }
67
68         /Source:/ {
69                 gsub( "../src", "src", $0 )             # sonar doesnt view test dir as root, so strip
70                 n = split( $0, a, ":" )
71                 if( fip ) {
72                         end_file()
73                 }
74                 fip = 1
75                 start_file( a[n] )
76                 next;
77         }
78
79         /-:/ { next }                                   # not executable
80
81         /#####:/ {                                              # never executed
82                 bad_line( $2 + 0 )
83                 next
84         }
85
86         {
87                 good_line( $2 + 0 )
88         }
89
90         END {
91                 if( fip ) {
92                         end_file();
93                 }
94
95                 end()
96         }
97 ' $1
98
99 exit $/
100