Home | History | Annotate | Download | only in update_engine
      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 
     23 cat app.info | awk -F '[,:]' '
     24 
     25 BEGIN { OFS = ":"; }
     26 
     27 /^SF:/{ FILEN = $2; }
     28 
     29 /^end_of_record$/{ FILEN = ""; }
     30 
     31 /^DA:/{ print FILEN, $2, $3; }
     32 
     33 ' | sort | awk -F : '
     34 BEGIN {
     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\/' | \
     55 fgrep -v '_unittest.cc:' | \
     56 fgrep -v '/test_utils.' | \
     57 fgrep -v '/test_http_server.cc' | \
     58 fgrep -v '/testrunner.cc' | \
     59 fgrep -v '/mock' | \
     60 fgrep -v '.pb.cc' | \
     61 awk -F : '
     62 
     63 function 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 
     70 BEGIN {
     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 
     94 END {
     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