diff options
Diffstat (limited to 'local_coverage_rate.sh')
-rwxr-xr-x | local_coverage_rate.sh | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/local_coverage_rate.sh b/local_coverage_rate.sh new file mode 100755 index 00000000..33c06a70 --- /dev/null +++ b/local_coverage_rate.sh @@ -0,0 +1,87 @@ +#!/bin/bash + +# Copyright (c) 2009 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# 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)); +} +' |