blob: 75986cbe2089da9f329e483ec2b6a76fb58d7479 [file] [log] [blame]
/*
* Copyright (C) 2010 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.ddmlib.testrunner;
import com.android.ddmlib.testrunner.TestResult.TestStatus;
import java.util.Arrays;
import java.util.Map;
/**
* Container for a result of a single test.
*/
public class TestResult {
public enum TestStatus {
/** Test failed. */
FAILURE,
/** Test passed */
PASSED,
/** Test started but not ended */
INCOMPLETE,
/** Test assumption failure */
ASSUMPTION_FAILURE,
/** Test ignored */
IGNORED,
}
private TestStatus mStatus;
private String mStackTrace;
private Map<String, String> mMetrics;
// the start and end time of the test, measured via {@link System#currentTimeMillis()}
private long mStartTime = 0;
private long mEndTime = 0;
public TestResult() {
mStatus = TestStatus.INCOMPLETE;
mStartTime = System.currentTimeMillis();
}
/**
* Get the {@link TestStatus} result of the test.
*/
public TestStatus getStatus() {
return mStatus;
}
/**
* Get the associated {@link String} stack trace. Should be <code>null</code> if
* {@link #getStatus()} is {@link TestStatus.PASSED}.
*/
public String getStackTrace() {
return mStackTrace;
}
/**
* Get the associated test metrics.
*/
public Map<String, String> getMetrics() {
return mMetrics;
}
/**
* Set the test metrics, overriding any previous values.
*/
public void setMetrics(Map<String, String> metrics) {
mMetrics = metrics;
}
/**
* Return the {@link System#currentTimeMillis()} time that the
* {@link ITestInvocationListener#testStarted(TestIdentifier)} event was received.
*/
public long getStartTime() {
return mStartTime;
}
/**
* Return the {@link System#currentTimeMillis()} time that the
* {@link ITestInvocationListener#testEnded(TestIdentifier)} event was received.
*/
public long getEndTime() {
return mEndTime;
}
/**
* Set the {@link TestStatus}.
*/
public TestResult setStatus(TestStatus status) {
mStatus = status;
return this;
}
/**
* Set the stack trace.
*/
public void setStackTrace(String trace) {
mStackTrace = trace;
}
/**
* Sets the end time
*/
public void setEndTime(long currentTimeMillis) {
mEndTime = currentTimeMillis;
}
@Override
public int hashCode() {
return Arrays.hashCode(new Object[] {mMetrics, mStackTrace, mStatus});
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
TestResult other = (TestResult) obj;
return equal(mMetrics, other.mMetrics) &&
equal(mStackTrace, other.mStackTrace) &&
equal(mStatus, other.mStatus);
}
private static boolean equal(Object a, Object b) {
return a == b || (a != null && a.equals(b));
}
}