TestStatus.java
/*
* Copyright (C) 2021 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 androidx.test.services.events;
import static androidx.test.internal.util.Checks.checkNotNull;
import android.os.Parcel;
import android.os.Parcelable;
import androidx.annotation.NonNull;
import androidx.annotation.RestrictTo;
/**
* The final status of a Test Case or Test Run.
*
* @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public final class TestStatus implements Parcelable {
/**
* Valid test statuses for individual test cases and test runs. Check the documentation on
* individual statuses for more information.
*/
public enum Status {
/**
* This operation was supposed to run but was abandoned before it was able to execute. This
* should be the default test status for receivers. If no updates were sent for tests cases that
* were expected to run, it is safer to assume that the client terminated unexpectedly.
*/
CANCELLED,
/**
* This operation did not run or trigger any other operations. If this or {@link SKIPPED} is not
* emitted for tests that were not run, the receiver should mark them as {@link CANCELLED} since
* the underlying test runner may have unexpectedly crashed in the middle of running these
* tests.
*
* @see SKIPPED for ignored tests that trigger other operations.
*/
IGNORED,
/**
* This operation did not run, but other operations may have been run to prepare for this
* action. An example of this would be if a test threw an {@link
* org.junit.AssumptionViolatedException} - indicating that it should not be run. This does
* prevent other pre & post test operations from running.
*
* @see IGNORED for tests that do not trigger setup/teardown operations.
*/
SKIPPED,
/**
* This operation was started and was terminated before completion. This status should be set by
* receiver if a test start was emitted by a client but the client does not emit an event
* marking the tests completion. It is safer to assume the client terminated unexpectedly.
*/
ABORTED,
/** This operation executed normally and succeeded. */
PASSED,
/** This operation finished execution, but did not succeed. */
FAILED
}
/* The status */
@NonNull public Status status;
/**
* Creates a parcelable wrapper {@link TestStatus} for {@link Status}.
*
* @param status the chosen status
*/
public TestStatus(@NonNull Status status) {
this.status = checkNotNull(status, "status cannot be null");
}
/**
* Creates a {@link TestStatus} from an Android {@link Parcel}.
*
* @param source Android {@link Parcel} to read from
*/
public TestStatus(@NonNull Parcel source) {
checkNotNull(source, "source cannot be null");
status = Status.valueOf(checkNotNull(source.readString(), "status cannot be null"));
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel parcel, int i) {
parcel.writeString(status.name());
}
public static final Parcelable.Creator<TestStatus> CREATOR =
new Parcelable.Creator<TestStatus>() {
@Override
public TestStatus createFromParcel(Parcel source) {
return new TestStatus(source);
}
@Override
public TestStatus[] newArray(int size) {
return new TestStatus[size];
}
};
}