| // Copyright (C) 2019 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.google.gerrit.testing; | |
| /** Static JUnit utility methods. */ | |
| public class GerritJUnit { | |
| /** | |
| * Assert that an exception is thrown by a block of code. | |
| * | |
| * <p>This method is source-compatible with <a | |
| * href="https://junit.org/junit4/javadoc/latest/org/junit/Assert.html#assertThrows(java.lang.Class,%20org.junit.function.ThrowingRunnable)">JUnit | |
| * 4.13 beta</a>. | |
| * | |
| * <p>This construction is recommended by the Truth team for use in conjunction with asserting | |
| * over a {@code ThrowableSubject} on the return type: | |
| * | |
| * <pre>{@code | |
| * MyException e = assertThrows(MyException.class, () -> doSomething(foo)); | |
| * assertThat(e).isInstanceOf(MySubException.class); | |
| * assertThat(e).hasMessageThat().contains("sub-exception occurred"); | |
| * }</pre> | |
| * | |
| * @param throwableClass expected exception type. | |
| * @param runnable runnable containing arbitrary code. | |
| * @return exception that was thrown. | |
| */ | |
| public static <T extends Throwable> T assertThrows( | |
| Class<T> throwableClass, ThrowingRunnable runnable) { | |
| try { | |
| runnable.run(); | |
| } catch (Throwable t) { | |
| if (!throwableClass.isInstance(t)) { | |
| throw new AssertionError( | |
| "expected " | |
| + throwableClass.getName() | |
| + " but " | |
| + t.getClass().getName() | |
| + " was thrown", | |
| t); | |
| } | |
| @SuppressWarnings("unchecked") | |
| T toReturn = (T) t; | |
| return toReturn; | |
| } | |
| throw new AssertionError( | |
| "expected " + throwableClass.getName() + " but no exception was thrown"); | |
| } | |
| @FunctionalInterface | |
| public interface ThrowingRunnable { | |
| void run() throws Throwable; | |
| } | |
| private GerritJUnit() {} | |
| } |