1*5a923131SAndroid Build Coastguard Worker#!/bin/bash 2*5a923131SAndroid Build Coastguard Worker 3*5a923131SAndroid Build Coastguard Worker# 4*5a923131SAndroid Build Coastguard Worker# Copyright (C) 2009 The Android Open Source Project 5*5a923131SAndroid Build Coastguard Worker# 6*5a923131SAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 7*5a923131SAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 8*5a923131SAndroid Build Coastguard Worker# You may obtain a copy of the License at 9*5a923131SAndroid Build Coastguard Worker# 10*5a923131SAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 11*5a923131SAndroid Build Coastguard Worker# 12*5a923131SAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 13*5a923131SAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 14*5a923131SAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15*5a923131SAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 16*5a923131SAndroid Build Coastguard Worker# limitations under the License. 17*5a923131SAndroid Build Coastguard Worker# 18*5a923131SAndroid Build Coastguard Worker 19*5a923131SAndroid Build Coastguard Worker# Calculates the test-coverage percentage for non-test files in the 20*5a923131SAndroid Build Coastguard Worker# update_engine directory. Requires a file 'app.info' to contain the 21*5a923131SAndroid Build Coastguard Worker# results of running the unittests while collecting coverage data. 22*5a923131SAndroid Build Coastguard Worker 23*5a923131SAndroid Build Coastguard Workercat app.info | awk -F '[,:]' ' 24*5a923131SAndroid Build Coastguard Worker 25*5a923131SAndroid Build Coastguard WorkerBEGIN { OFS = ":"; } 26*5a923131SAndroid Build Coastguard Worker 27*5a923131SAndroid Build Coastguard Worker/^SF:/{ FILEN = $2; } 28*5a923131SAndroid Build Coastguard Worker 29*5a923131SAndroid Build Coastguard Worker/^end_of_record$/{ FILEN = ""; } 30*5a923131SAndroid Build Coastguard Worker 31*5a923131SAndroid Build Coastguard Worker/^DA:/{ print FILEN, $2, $3; } 32*5a923131SAndroid Build Coastguard Worker 33*5a923131SAndroid Build Coastguard Worker' | sort | awk -F : ' 34*5a923131SAndroid Build Coastguard WorkerBEGIN { 35*5a923131SAndroid Build Coastguard Worker OFS = ":"; 36*5a923131SAndroid Build Coastguard Worker FILEN = ""; 37*5a923131SAndroid Build Coastguard Worker LINE = ""; 38*5a923131SAndroid Build Coastguard Worker HITS = 0; 39*5a923131SAndroid Build Coastguard Worker} 40*5a923131SAndroid Build Coastguard Worker{ 41*5a923131SAndroid Build Coastguard Worker NEWFILEN = $1; 42*5a923131SAndroid Build Coastguard Worker NEWLINE = $2; 43*5a923131SAndroid Build Coastguard Worker if ((NEWFILEN == FILEN) && (NEWLINE == LINE)) { 44*5a923131SAndroid Build Coastguard Worker HITS += $3 45*5a923131SAndroid Build Coastguard Worker } else { 46*5a923131SAndroid Build Coastguard Worker if (FILEN != "") { 47*5a923131SAndroid Build Coastguard Worker print FILEN, LINE, HITS; 48*5a923131SAndroid Build Coastguard Worker } 49*5a923131SAndroid Build Coastguard Worker FILEN = NEWFILEN; 50*5a923131SAndroid Build Coastguard Worker LINE = NEWLINE; 51*5a923131SAndroid Build Coastguard Worker HITS = $3; 52*5a923131SAndroid Build Coastguard Worker } 53*5a923131SAndroid Build Coastguard Worker} 54*5a923131SAndroid Build Coastguard Worker' | grep '^.*\/trunk\/src\/platform\/update_engine\/' | \ 55*5a923131SAndroid Build Coastguard Workerfgrep -v '_unittest.cc:' | \ 56*5a923131SAndroid Build Coastguard Workerfgrep -v '/test_utils.' | \ 57*5a923131SAndroid Build Coastguard Workerfgrep -v '/test_http_server.cc' | \ 58*5a923131SAndroid Build Coastguard Workerfgrep -v '/testrunner.cc' | \ 59*5a923131SAndroid Build Coastguard Workerfgrep -v '/mock' | \ 60*5a923131SAndroid Build Coastguard Workerfgrep -v '.pb.cc' | \ 61*5a923131SAndroid Build Coastguard Workerawk -F : ' 62*5a923131SAndroid Build Coastguard Worker 63*5a923131SAndroid Build Coastguard Workerfunction printfile() { 64*5a923131SAndroid Build Coastguard Worker if (FNAME != "") 65*5a923131SAndroid Build Coastguard Worker printf "%-40s %4d / %4d: %5.1f%%\n", FNAME, FILE_GOOD_LINES, 66*5a923131SAndroid Build Coastguard Worker (FILE_BAD_LINES + FILE_GOOD_LINES), 67*5a923131SAndroid Build Coastguard Worker (FILE_GOOD_LINES * 100) / (FILE_BAD_LINES + FILE_GOOD_LINES); 68*5a923131SAndroid Build Coastguard Worker} 69*5a923131SAndroid Build Coastguard Worker 70*5a923131SAndroid Build Coastguard WorkerBEGIN { 71*5a923131SAndroid Build Coastguard Worker FNAME = ""; 72*5a923131SAndroid Build Coastguard Worker FILE_BAD_LINES = 0; 73*5a923131SAndroid Build Coastguard Worker FILE_GOOD_LINES = 0; 74*5a923131SAndroid Build Coastguard Worker} 75*5a923131SAndroid Build Coastguard Worker{ 76*5a923131SAndroid Build Coastguard Worker // calc filename 77*5a923131SAndroid Build Coastguard Worker ARR_SIZE = split($1, PARTS, "/"); 78*5a923131SAndroid Build Coastguard Worker NEWFNAME = PARTS[ARR_SIZE]; 79*5a923131SAndroid Build Coastguard Worker if (NEWFNAME != FNAME) { 80*5a923131SAndroid Build Coastguard Worker printfile(); 81*5a923131SAndroid Build Coastguard Worker FILE_BAD_LINES = 0; 82*5a923131SAndroid Build Coastguard Worker FILE_GOOD_LINES = 0; 83*5a923131SAndroid Build Coastguard Worker FNAME = NEWFNAME; 84*5a923131SAndroid Build Coastguard Worker } 85*5a923131SAndroid Build Coastguard Worker if ($3 == "0") { 86*5a923131SAndroid Build Coastguard Worker BAD_LINES += 1; 87*5a923131SAndroid Build Coastguard Worker FILE_BAD_LINES += 1; 88*5a923131SAndroid Build Coastguard Worker } else { 89*5a923131SAndroid Build Coastguard Worker GOOD_LINES += 1; 90*5a923131SAndroid Build Coastguard Worker FILE_GOOD_LINES += 1; 91*5a923131SAndroid Build Coastguard Worker } 92*5a923131SAndroid Build Coastguard Worker} 93*5a923131SAndroid Build Coastguard Worker 94*5a923131SAndroid Build Coastguard WorkerEND { 95*5a923131SAndroid Build Coastguard Worker printfile(); 96*5a923131SAndroid Build Coastguard Worker print "---\nSummary: tested " GOOD_LINES " / " (BAD_LINES + GOOD_LINES); 97*5a923131SAndroid Build Coastguard Worker printf( 98*5a923131SAndroid Build Coastguard Worker "Test coverage: %.1f%%\n", 99*5a923131SAndroid Build Coastguard Worker ((GOOD_LINES * 100) / (BAD_LINES + GOOD_LINES))); 100*5a923131SAndroid Build Coastguard Worker} 101*5a923131SAndroid Build Coastguard Worker' 102