• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2010 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.cts.apicoverage;
18 
19 import com.android.cts.apicommon.ApiClass;
20 import com.android.cts.apicommon.ApiConstructor;
21 import com.android.cts.apicommon.ApiCoverage;
22 import com.android.cts.apicommon.ApiMethod;
23 import com.android.cts.apicommon.ApiPackage;
24 import com.android.cts.apicommon.CoverageComparator;
25 
26 import java.io.OutputStream;
27 import java.io.PrintStream;
28 import java.util.ArrayList;
29 import java.util.Collections;
30 import java.util.List;
31 
32 /**
33  * Class that outputs a text report of {@link ApiCoverage}.
34  */
35 class TextReport {
36 
printTextReport(ApiCoverage api, CddCoverage CddCoverage, PackageFilter packageFilter, OutputStream outputStream)37     public static void printTextReport(ApiCoverage api, CddCoverage CddCoverage,
38             PackageFilter packageFilter, OutputStream outputStream) {
39         PrintStream out = new PrintStream(outputStream);
40 
41         CoverageComparator comparator = new CoverageComparator();
42         List<ApiPackage> packages = new ArrayList<ApiPackage>(api.getPackages());
43         Collections.sort(packages, comparator);
44 
45         for (ApiPackage apiPackage : packages) {
46             if (packageFilter.accept(apiPackage.getName()) && apiPackage.getTotalMethods() > 0) {
47                 printPackage(apiPackage, out);
48             }
49         }
50 
51         out.println();
52         out.println();
53 
54         for (ApiPackage apiPackage : packages) {
55             if (packageFilter.accept(apiPackage.getName())) {
56                 printPackage(apiPackage, out);
57 
58                 List<ApiClass> classes = new ArrayList<ApiClass>(apiPackage.getClasses());
59                 Collections.sort(classes, comparator);
60                 for (ApiClass apiClass : classes) {
61                     if (apiClass.getTotalMethods() > 0) {
62                         printClass(apiClass, out);
63 
64                         List<ApiConstructor> constructors =
65                                 new ArrayList<ApiConstructor>(apiClass.getConstructors());
66                         Collections.sort(constructors);
67                         for (ApiConstructor constructor : constructors) {
68                             printConstructor(constructor, out);
69                         }
70 
71                         List<ApiMethod> methods = new ArrayList<ApiMethod>(apiClass.getMethods());
72                         Collections.sort(methods);
73                         for (ApiMethod method : methods) {
74                             printMethod(method, out);
75                         }
76                     }
77                 }
78             }
79         }
80     }
81 
printPackage(ApiPackage apiPackage, PrintStream out)82     private static void printPackage(ApiPackage apiPackage, PrintStream out) {
83         out.println(apiPackage.getName() + " "
84                 + Math.round(apiPackage.getCoveragePercentage()) + "% ("
85                 + apiPackage.getNumCoveredMethods() + "/" + apiPackage.getTotalMethods() + ")");
86     }
87 
printClass(ApiClass apiClass, PrintStream out)88     private static void printClass(ApiClass apiClass, PrintStream out) {
89         out.println("  " + apiClass.getName() + " "
90                 + Math.round(apiClass.getCoveragePercentage()) + "% ("
91                 + apiClass.getNumCoveredMethods() + "/" + apiClass.getTotalMethods() + ") ");
92     }
93 
printConstructor(ApiConstructor constructor, PrintStream out)94     private static void printConstructor(ApiConstructor constructor, PrintStream out) {
95         StringBuilder builder = new StringBuilder("    [")
96                 .append(constructor.isCovered() ? "X" : " ")
97                 .append("] ").append(constructor.getName()).append("(");
98 
99         List<String> parameterTypes = constructor.getParameterTypes();
100         int numParameterTypes = parameterTypes.size();
101         for (int i = 0; i < numParameterTypes; i++) {
102             builder.append(parameterTypes.get(i));
103             if (i + 1 < numParameterTypes) {
104                 builder.append(", ");
105             }
106         }
107         out.println(builder.append(")"));
108     }
109 
printMethod(ApiMethod method, PrintStream out)110     private static void printMethod(ApiMethod method, PrintStream out) {
111         StringBuilder builder = new StringBuilder("    [")
112                 .append(method.isCovered() ? "X" : " ")
113                 .append("] ")
114                 .append(method.getVisibility()).append(" ");
115         if (method.isAbstractMethod()) {
116             builder.append("abstract ");
117         }
118         if (method.isStaticMethod()) {
119             builder.append("static ");
120         }
121         if (method.isFinalMethod()) {
122             builder.append("final ");
123         }
124         builder.append(method.getReturnType()).append(" ")
125                 .append(method.getName()).append("(");
126         List<String> parameterTypes = method.getParameterTypes();
127         int numParameterTypes = parameterTypes.size();
128         for (int i = 0; i < numParameterTypes; i++) {
129             builder.append(parameterTypes.get(i));
130             if (i + 1 < numParameterTypes) {
131                 builder.append(", ");
132             }
133         }
134         out.println(builder.append(")"));
135     }
136 }
137