|  | #!/bin/bash | 
|  |  | 
|  | # Copyright (c) 2012 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. | 
|  |  | 
|  | # Builds, runs unit tests, then collects and processes coverage data for update | 
|  | # engine binaries. In the case where lcov/genhtml are missing, it will just | 
|  | # build and run the unit tests. | 
|  |  | 
|  | DO_COVERAGE=$(which lcov genhtml > /dev/null 2>&1 && echo 1) | 
|  |  | 
|  | set -ex | 
|  |  | 
|  | ./build debug=1 | 
|  | if [[ $DO_COVERAGE ]]; then | 
|  | lcov --directory . --zerocounters | 
|  | fi | 
|  | ./run_unittests | 
|  | if [[ $DO_COVERAGE ]]; then | 
|  | lcov --directory . --capture --output-file app.info | 
|  |  | 
|  | # We try to use genhtml with --no-function-coverage, if it is supported.  The | 
|  | # problem w/ function coverage is that every template instantiation of a | 
|  | # method counts as a different method, so if we instantiate a method twice, | 
|  | # once for testing and once for prod, the method is tested, but it shows only | 
|  | # 50% function coverage b/c it thinks we didn't test the prod version. | 
|  | GENHTML_NO_FUNC_COV=$(genhtml --help | grep -q function-coverage && | 
|  | echo --no-function-coverage) | 
|  | genhtml $GENHTML_NO_FUNC_CONV --output-directory html app.info | 
|  | ./local_coverage_rate | 
|  | fi |