#!/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
  find $ANDROID_HOST_OUT -name '*.gcda' -delete
  find $ANDROID_PRODUCT_OUT -name '*.gcda' -delete
  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
