xref: /aosp_15_r20/external/libchrome-gestures/tools/local_coverage_rate.sh (revision aed3e5085e770be5b69ce25295ecf6ddf906af95)
1*aed3e508SAndroid Build Coastguard Worker#!/bin/bash
2*aed3e508SAndroid Build Coastguard Worker
3*aed3e508SAndroid Build Coastguard Worker# Copyright 2011 The ChromiumOS Authors
4*aed3e508SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be
5*aed3e508SAndroid Build Coastguard Worker# found in the LICENSE file.
6*aed3e508SAndroid Build Coastguard Worker
7*aed3e508SAndroid Build Coastguard Worker# Calculates the test-coverage percentage for non-test files in the
8*aed3e508SAndroid Build Coastguard Worker# gestures directory. Requires a file 'app.info' to contain the
9*aed3e508SAndroid Build Coastguard Worker# results of running the unittests while collecting coverage data.
10*aed3e508SAndroid Build Coastguard Worker
11*aed3e508SAndroid Build Coastguard Workercat $1 | awk -F '[,:]' '
12*aed3e508SAndroid Build Coastguard Worker
13*aed3e508SAndroid Build Coastguard WorkerBEGIN { OFS = ":"; }
14*aed3e508SAndroid Build Coastguard Worker
15*aed3e508SAndroid Build Coastguard Worker/^SF:/{ FILEN = $2; }
16*aed3e508SAndroid Build Coastguard Worker
17*aed3e508SAndroid Build Coastguard Worker/^end_of_record$/{ FILEN = ""; }
18*aed3e508SAndroid Build Coastguard Worker
19*aed3e508SAndroid Build Coastguard Worker/^DA:/{ print FILEN, $2, $3; }
20*aed3e508SAndroid Build Coastguard Worker
21*aed3e508SAndroid Build Coastguard Worker' | sort | awk -F : '
22*aed3e508SAndroid Build Coastguard WorkerBEGIN {
23*aed3e508SAndroid Build Coastguard Worker  OFS = ":";
24*aed3e508SAndroid Build Coastguard Worker  FILEN = "";
25*aed3e508SAndroid Build Coastguard Worker  LINE = "";
26*aed3e508SAndroid Build Coastguard Worker  HITS = 0;
27*aed3e508SAndroid Build Coastguard Worker}
28*aed3e508SAndroid Build Coastguard Worker{
29*aed3e508SAndroid Build Coastguard Worker  NEWFILEN = $1;
30*aed3e508SAndroid Build Coastguard Worker  NEWLINE = $2;
31*aed3e508SAndroid Build Coastguard Worker  if ((NEWFILEN == FILEN) && (NEWLINE == LINE)) {
32*aed3e508SAndroid Build Coastguard Worker    HITS += $3
33*aed3e508SAndroid Build Coastguard Worker  } else {
34*aed3e508SAndroid Build Coastguard Worker    if (FILEN != "") {
35*aed3e508SAndroid Build Coastguard Worker      print FILEN, LINE, HITS;
36*aed3e508SAndroid Build Coastguard Worker    }
37*aed3e508SAndroid Build Coastguard Worker    FILEN = NEWFILEN;
38*aed3e508SAndroid Build Coastguard Worker    LINE = NEWLINE;
39*aed3e508SAndroid Build Coastguard Worker    HITS = $3;
40*aed3e508SAndroid Build Coastguard Worker  }
41*aed3e508SAndroid Build Coastguard Worker}
42*aed3e508SAndroid Build Coastguard Worker' | grep '^.*\/trunk\/src\/platform\/gestures\/' | \
43*aed3e508SAndroid Build Coastguard Workerfgrep -v '_unittest.cc:' | \
44*aed3e508SAndroid Build Coastguard Workerfgrep -v '/test_main.cc' | \
45*aed3e508SAndroid Build Coastguard Workerfgrep -v '/mock' | \
46*aed3e508SAndroid Build Coastguard Workerawk -F : '
47*aed3e508SAndroid Build Coastguard Worker
48*aed3e508SAndroid Build Coastguard Workerfunction printfile() {
49*aed3e508SAndroid Build Coastguard Worker  if (FNAME != "")
50*aed3e508SAndroid Build Coastguard Worker    printf "%-40s %4d / %4d: %5.1f%%\n", FNAME, FILE_GOOD_LINES,
51*aed3e508SAndroid Build Coastguard Worker        (FILE_BAD_LINES + FILE_GOOD_LINES),
52*aed3e508SAndroid Build Coastguard Worker        (FILE_GOOD_LINES * 100) / (FILE_BAD_LINES + FILE_GOOD_LINES);
53*aed3e508SAndroid Build Coastguard Worker}
54*aed3e508SAndroid Build Coastguard Worker
55*aed3e508SAndroid Build Coastguard WorkerBEGIN {
56*aed3e508SAndroid Build Coastguard Worker  FNAME = "";
57*aed3e508SAndroid Build Coastguard Worker  FILE_BAD_LINES = 0;
58*aed3e508SAndroid Build Coastguard Worker  FILE_GOOD_LINES = 0;
59*aed3e508SAndroid Build Coastguard Worker}
60*aed3e508SAndroid Build Coastguard Worker{
61*aed3e508SAndroid Build Coastguard Worker  // calc filename
62*aed3e508SAndroid Build Coastguard Worker  ARR_SIZE = split($1, PARTS, "/");
63*aed3e508SAndroid Build Coastguard Worker  NEWFNAME = PARTS[ARR_SIZE];
64*aed3e508SAndroid Build Coastguard Worker  if (NEWFNAME != FNAME) {
65*aed3e508SAndroid Build Coastguard Worker    printfile();
66*aed3e508SAndroid Build Coastguard Worker    FILE_BAD_LINES = 0;
67*aed3e508SAndroid Build Coastguard Worker    FILE_GOOD_LINES = 0;
68*aed3e508SAndroid Build Coastguard Worker    FNAME = NEWFNAME;
69*aed3e508SAndroid Build Coastguard Worker  }
70*aed3e508SAndroid Build Coastguard Worker  if ($3 == "0") {
71*aed3e508SAndroid Build Coastguard Worker    BAD_LINES += 1;
72*aed3e508SAndroid Build Coastguard Worker    FILE_BAD_LINES += 1;
73*aed3e508SAndroid Build Coastguard Worker  } else {
74*aed3e508SAndroid Build Coastguard Worker    GOOD_LINES += 1;
75*aed3e508SAndroid Build Coastguard Worker    FILE_GOOD_LINES += 1;
76*aed3e508SAndroid Build Coastguard Worker  }
77*aed3e508SAndroid Build Coastguard Worker}
78*aed3e508SAndroid Build Coastguard Worker
79*aed3e508SAndroid Build Coastguard WorkerEND {
80*aed3e508SAndroid Build Coastguard Worker  printfile();
81*aed3e508SAndroid Build Coastguard Worker  print "---\nSummary: tested " GOOD_LINES " / " (BAD_LINES + GOOD_LINES);
82*aed3e508SAndroid Build Coastguard Worker  printf "Test coverage: %.1f%%\n", \
83*aed3e508SAndroid Build Coastguard Worker    ((GOOD_LINES * 100) / (BAD_LINES + GOOD_LINES));
84*aed3e508SAndroid Build Coastguard Worker}
85*aed3e508SAndroid Build Coastguard Worker'
86