| #!/bin/bash | 
 |  | 
 | # | 
 | # Copyright (C) 2009 The Android Open Source Project | 
 | # | 
 | # Licensed under the Apache License, Version 2.0 (the "License"); | 
 | # you may not use this file except in compliance with the License. | 
 | # You may obtain a copy of the License at | 
 | # | 
 | #      http://www.apache.org/licenses/LICENSE-2.0 | 
 | # | 
 | # Unless required by applicable law or agreed to in writing, software | 
 | # distributed under the License is distributed on an "AS IS" BASIS, | 
 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
 | # See the License for the specific language governing permissions and | 
 | # limitations under the License. | 
 | # | 
 |  | 
 | # Calculates the test-coverage percentage for non-test files in the | 
 | # update_engine directory. Requires a file 'app.info' to contain the | 
 | # results of running the unittests while collecting coverage data. | 
 |  | 
 | cat app.info | awk -F '[,:]' ' | 
 |  | 
 | BEGIN { OFS = ":"; } | 
 |  | 
 | /^SF:/{ FILEN = $2; } | 
 |  | 
 | /^end_of_record$/{ FILEN = ""; } | 
 |  | 
 | /^DA:/{ print FILEN, $2, $3; } | 
 |  | 
 | ' | sort | awk -F : ' | 
 | BEGIN { | 
 |   OFS = ":"; | 
 |   FILEN = ""; | 
 |   LINE = ""; | 
 |   HITS = 0; | 
 | } | 
 | { | 
 |   NEWFILEN = $1; | 
 |   NEWLINE = $2; | 
 |   if ((NEWFILEN == FILEN) && (NEWLINE == LINE)) { | 
 |     HITS += $3 | 
 |   } else { | 
 |     if (FILEN != "") { | 
 |       print FILEN, LINE, HITS; | 
 |     } | 
 |     FILEN = NEWFILEN; | 
 |     LINE = NEWLINE; | 
 |     HITS = $3; | 
 |   } | 
 | } | 
 | ' | grep '^.*\/trunk\/src\/platform\/update_engine\/' | \ | 
 | fgrep -v '_unittest.cc:' | \ | 
 | fgrep -v '/test_utils.' | \ | 
 | fgrep -v '/test_http_server.cc' | \ | 
 | fgrep -v '/testrunner.cc' | \ | 
 | fgrep -v '/mock' | \ | 
 | fgrep -v '.pb.cc' | \ | 
 | awk -F : ' | 
 |  | 
 | function printfile() { | 
 |   if (FNAME != "") | 
 |     printf "%-40s %4d / %4d: %5.1f%%\n", FNAME, FILE_GOOD_LINES, | 
 |         (FILE_BAD_LINES + FILE_GOOD_LINES), | 
 |         (FILE_GOOD_LINES * 100) / (FILE_BAD_LINES + FILE_GOOD_LINES); | 
 | } | 
 |  | 
 | BEGIN { | 
 |   FNAME = ""; | 
 |   FILE_BAD_LINES = 0; | 
 |   FILE_GOOD_LINES = 0; | 
 | } | 
 | { | 
 |   // calc filename | 
 |   ARR_SIZE = split($1, PARTS, "/"); | 
 |   NEWFNAME = PARTS[ARR_SIZE]; | 
 |   if (NEWFNAME != FNAME) { | 
 |     printfile(); | 
 |     FILE_BAD_LINES = 0; | 
 |     FILE_GOOD_LINES = 0; | 
 |     FNAME = NEWFNAME; | 
 |   } | 
 |   if ($3 == "0") { | 
 |     BAD_LINES += 1; | 
 |     FILE_BAD_LINES += 1; | 
 |   } else { | 
 |     GOOD_LINES += 1; | 
 |     FILE_GOOD_LINES += 1; | 
 |   } | 
 | } | 
 |  | 
 | END { | 
 |   printfile(); | 
 |   print "---\nSummary: tested " GOOD_LINES " / " (BAD_LINES + GOOD_LINES); | 
 |   printf( | 
 |     "Test coverage: %.1f%%\n", | 
 |     ((GOOD_LINES * 100) / (BAD_LINES + GOOD_LINES))); | 
 | } | 
 | ' |