1 /* 2 * Copyright (C) 2021 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.server.pm.test.util 18 19 import com.google.common.truth.Expect 20 import org.junit.rules.TestRule 21 import org.junit.runner.Description 22 import org.junit.runners.model.Statement 23 24 /** 25 * Wrapper for [Expect] which supports ignoring any failures. This should be used with caution, but 26 * it allows a base test to be written which doesn't switch success/failure in the test itself, 27 * preventing any logic errors from causing the test to accidentally succeed. 28 */ 29 internal class IgnoreableExpect : TestRule { 30 31 val expect = Expect.create() 32 33 private var ignore = false 34 applynull35 override fun apply(base: Statement?, description: Description?): Statement { 36 return object : Statement() { 37 override fun evaluate() { 38 ignore = false 39 try { 40 expect.apply(base, description).evaluate() 41 } catch (t: Throwable) { 42 if (!ignore) { 43 throw t 44 } 45 } 46 } 47 } 48 } 49 ignorenull50 fun ignore() { 51 ignore = true 52 } 53 } 54