|  | #!/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))); | 
|  | } | 
|  | ' |