#!/bin/sh
# Copyright (C) 2014 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.

#
# acov is a tool for gathering coverage information from a device and generating
# a report from that information. To use:
#
# 1. sudo apt-get install lcov
# 2. Build application/library with coverage information.
# 3. Push the new binaries to the device.
# 4. Run tests with the additional environment variables:
#     * GCOV_PREFIX=/data/local/tmp/gcov
#     * GCOV_PREFIX_STRIP=`echo $(ANDROID_BUILD_TOP) | grep -o / | wc -l`
# 5. Run `acov`.
#
# acov will pull all coverage information from the device, push it to the right
# directories, run lcov, and display the coverage report (currently by opening
# it in your browser).
#

if [ "$1" = "--clean" ]; then
  find $ANDROID_HOST_OUT \( -name '*.gcda' -o -name '*.gcno' \) -delete
  find $ANDROID_PRODUCT_OUT \( -name '*.gcda' -o -name '*.gcno' \) -delete
  exit 0
fi

if [ "$1" = "--prep" ]; then
  if [ -d "$ANDROID_HOST_OUT" ]; then
    find $ANDROID_HOST_OUT -name '*.gcda' -delete
  fi

  if [ -d "$ANDROID_PRODUCT_OUT" ]; then
    find $ANDROID_PRODUCT_OUT -name '*.gcda' -delete
  fi

  exit 0
fi

which lcov >/dev/null 2>/dev/null
if [ $? -ne 0 ]; then
  echo 'lcov not found: running `sudo apt-get install lcov`'
  sudo apt-get install lcov
fi

HOST=false
ANDROID_OUT=$ANDROID_PRODUCT_OUT
EXTRA_ARGS="$@"
if [ "$1" = "--host" ]; then
  HOST=true
  ANDROID_OUT=$ANDROID_HOST_OUT
  EXTRA_ARGS="--gcov-tool=/usr/bin/gcov-4.6 ${@:2}"
fi

cd $ANDROID_BUILD_TOP
FILE=cov.info
DIR=$(mktemp -d covreport-XXXXXX)

if [ "$HOST" = "false" ]; then
  adb pull /data/local/tmp/gcov
fi

lcov -c -d $ANDROID_OUT -o $DIR/$FILE $EXTRA_ARGS
echo "Generating coverage report at $DIR"
genhtml -q -o $DIR $DIR/$FILE
xdg-open $DIR/index.html >/dev/null
