| /* |
| * 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)); |
| } |
| } |