1#!/bin/bash
2
3#
4# Copyright (C) 2009 The Android Open Source Project
5#
6# Licensed under the Apache License, Version 2.0 (the "License");
7# you may not use this file except in compliance with the License.
8# You may obtain a copy of the License at
9#
10#      http://www.apache.org/licenses/LICENSE-2.0
11#
12# Unless required by applicable law or agreed to in writing, software
13# distributed under the License is distributed on an "AS IS" BASIS,
14# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15# See the License for the specific language governing permissions and
16# limitations under the License.
17#
18
19# Calculates the test-coverage percentage for non-test files in the
20# update_engine directory. Requires a file 'app.info' to contain the
21# results of running the unittests while collecting coverage data.
22
23cat app.info | awk -F '[,:]' '
24
25BEGIN { OFS = ":"; }
26
27/^SF:/{ FILEN = $2; }
28
29/^end_of_record$/{ FILEN = ""; }
30
31/^DA:/{ print FILEN, $2, $3; }
32
33' | sort | awk -F : '
34BEGIN {
35  OFS = ":";
36  FILEN = "";
37  LINE = "";
38  HITS = 0;
39}
40{
41  NEWFILEN = $1;
42  NEWLINE = $2;
43  if ((NEWFILEN == FILEN) && (NEWLINE == LINE)) {
44    HITS += $3
45  } else {
46    if (FILEN != "") {
47      print FILEN, LINE, HITS;
48    }
49    FILEN = NEWFILEN;
50    LINE = NEWLINE;
51    HITS = $3;
52  }
53}
54' | grep '^.*\/trunk\/src\/platform\/update_engine\/' | \
55fgrep -v '_unittest.cc:' | \
56fgrep -v '/test_utils.' | \
57fgrep -v '/test_http_server.cc' | \
58fgrep -v '/testrunner.cc' | \
59fgrep -v '/mock' | \
60fgrep -v '.pb.cc' | \
61awk -F : '
62
63function printfile() {
64  if (FNAME != "")
65    printf "%-40s %4d / %4d: %5.1f%%\n", FNAME, FILE_GOOD_LINES,
66        (FILE_BAD_LINES + FILE_GOOD_LINES),
67        (FILE_GOOD_LINES * 100) / (FILE_BAD_LINES + FILE_GOOD_LINES);
68}
69
70BEGIN {
71  FNAME = "";
72  FILE_BAD_LINES = 0;
73  FILE_GOOD_LINES = 0;
74}
75{
76  // calc filename
77  ARR_SIZE = split($1, PARTS, "/");
78  NEWFNAME = PARTS[ARR_SIZE];
79  if (NEWFNAME != FNAME) {
80    printfile();
81    FILE_BAD_LINES = 0;
82    FILE_GOOD_LINES = 0;
83    FNAME = NEWFNAME;
84  }
85  if ($3 == "0") {
86    BAD_LINES += 1;
87    FILE_BAD_LINES += 1;
88  } else {
89    GOOD_LINES += 1;
90    FILE_GOOD_LINES += 1;
91  }
92}
93
94END {
95  printfile();
96  print "---\nSummary: tested " GOOD_LINES " / " (BAD_LINES + GOOD_LINES);
97  printf(
98    "Test coverage: %.1f%%\n",
99    ((GOOD_LINES * 100) / (BAD_LINES + GOOD_LINES)));
100}
101'
102