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