1 /*
2  * Copyright (C) 2015 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 package com.android.compatibility.common.util;
17 
18 import java.util.List;
19 
20 /**
21  * Data structure for a Compatibility test module result.
22  */
23 public interface IModuleResult extends Comparable<IModuleResult> {
24 
getId()25     String getId();
26 
getName()27     String getName();
28 
getAbi()29     String getAbi();
30 
addRuntime(long elapsedTime)31     void addRuntime(long elapsedTime);
32 
resetRuntime()33     void resetRuntime();
34 
getRuntime()35     long getRuntime();
36 
37     /**
38      * Get the estimate of not-executed tests for this module. This estimate is a maximum
39      * not-executed count, assuming all test runs have been started.
40      * @return estimate of not-executed tests
41      */
getNotExecuted()42     int getNotExecuted();
43 
44     /**
45      * Set the estimate of not-executed tests for this module. This estimate is a maximum
46      * not-executed count, assuming all test runs have been started.
47      * @param estimate of not-executed tests
48      */
setNotExecuted(int numTests)49     void setNotExecuted(int numTests);
50 
51     /**
52      * Whether all expected tests have been executed and all expected test runs have been seen
53      * and completed.
54      *
55      * @return the comprehensive completeness status of the module
56      */
isDone()57     boolean isDone();
58 
59     /**
60      * Whether all expected tests have been executed for the test runs seen so far.
61      *
62      * @return the completeness status of the module so far
63      */
isDoneSoFar()64     boolean isDoneSoFar();
65 
66     /**
67      * Explicitly sets the "done" status for this module. To be used when constructing this
68      * instance from an XML report. The done status for an {@link IModuleResult} can be changed
69      * indiscriminately by method setDone(boolean) immediately after a call to initializeDone,
70      * whereas the status may only be switched to false immediately after a call to setDone.
71      *
72      * @param done the initial completeness status of the module
73      */
initializeDone(boolean done)74     void initializeDone(boolean done);
75 
76     /**
77      * Sets the "done" status for this module. To be used after each test run for the module.
78      * After setDone is used once, subsequent calls to setDone will AND the given value with the
79      * existing done status value. Thus a module with "done" already set to false cannot be marked
80      * done unless re-initialized (see initializeDone).
81      *
82      * @param done the completeness status of the module for a test run
83      */
setDone(boolean done)84     void setDone(boolean done);
85 
86     /**
87      * Sets the "in-progress" status for this module. Useful for tracking completion of the module
88      * in the case that a test run begins but never ends.
89      *
90      * @param inProgress whether the module is currently in progress
91      */
inProgress(boolean inProgress)92     void inProgress(boolean inProgress);
93 
94     /**
95      * @return the number of expected test runs for this module in this invocation
96      */
getExpectedTestRuns()97     int getExpectedTestRuns();
98 
99     /**
100      * @param the number of expected test runs for this module in this invocation
101      */
setExpectedTestRuns(int numRuns)102     void setExpectedTestRuns(int numRuns);
103 
104     /**
105      * @return the number of test runs seen for this module in this invocation
106      */
getTestRuns()107     int getTestRuns();
108 
109     /**
110      * Adds to the count of test runs seen for this module in this invocation
111      */
addTestRun()112     void addTestRun();
113 
114     /**
115      * Reset the count of test runs seen for this module in this invocation. Should be performed
116      * after merging the module into another module, so that future merges do not double-count the
117      * same test runs.
118      */
resetTestRuns()119     void resetTestRuns();
120 
121     /**
122      * Gets a {@link ICaseResult} for the given testcase, creating it if it doesn't exist.
123      *
124      * @param caseName the name of the testcase eg &lt;package-name&gt;&lt;class-name&gt;
125      * @return the {@link ICaseResult} or <code>null</code>
126      */
getOrCreateResult(String caseName)127     ICaseResult getOrCreateResult(String caseName);
128 
129     /**
130      * Gets the {@link ICaseResult} result for given testcase.
131      *
132      * @param caseName the name of the testcase eg &lt;package-name&gt;&lt;class-name&gt;
133      * @return the {@link ITestResult} or <code>null</code>
134      */
getResult(String caseName)135     ICaseResult getResult(String caseName);
136 
137     /**
138      * Gets all results sorted by name.
139      */
getResults()140     List<ICaseResult> getResults();
141 
142     /**
143      * Counts the number of results which have the given status.
144      */
countResults(TestStatus status)145     int countResults(TestStatus status);
146 
147     /** Sets the module as failed. */
setFailed()148     void setFailed();
149 
150     /** Returns whether or not the module has failed. */
isFailed()151     boolean isFailed();
152 
153     /**
154      * Merge the module results from otherModuleResult into this moduleResult.
155      */
mergeFrom(IModuleResult otherModuleResult)156     void mergeFrom(IModuleResult otherModuleResult);
157 }
158