@@ -0,0 +1,2865 @@
+/*%0A * Licensed to the Apache Software Foundation (ASF) under one%0A * or more contributor license agreements.  See the NOTICE file%0A * distributed with this work for additional information%0A * regarding copyright ownership.  The ASF licenses this file%0A * to you under the Apache License, Version 2.0 (the%0A * %22License%22); you may not use this file except in compliance%0A * with the License.  You may obtain a copy of the License at%0A *%0A *    http://www.apache.org/licenses/LICENSE-2.0%0A *%0A * Unless required by applicable law or agreed to in writing, software%0A * distributed under the License is distributed on an %22AS IS%22 BASIS,%0A * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.%0A * See the License for the specific language governing permissions and%0A * limitations under the License.%0A */%0A%0Apackage org.apache.flink.runtime.util;%0A%0Aimport org.apache.flink.util.Preconditions;%0A%0Aimport org.junit.rules.TestRule;%0Aimport org.junit.runner.Description;%0Aimport org.junit.runners.model.Statement;%0A%0Aimport javax.annotation.Nullable;%0A%0A/**%0A * Resource which provides a %7B@link TestingFatalErrorHandler%7D and checks whether no exception%0A * has been caught when calling %7B@link #after()%7D.%0A */%0Apublic final class TestingFatalErrorHandlerResource implements TestRule %7B%0A%0A%09@Nullable%0A%09private TestingFatalErrorHandler testingFatalErrorHandler;%0A%0A%09public TestingFatalErrorHandlerResource() %7B%0A%09%09testingFatalErrorHandler = null;%0A%09%7D%0A%0A%09@Override%0A%09public Statement apply(Statement base, Description description) %7B%0A%09%09return statement(base);%0A%09%7D%0A%0A%09private Statement statement(Statement base) %7B%0A%09%09return new Statement() %7B%0A%09%09%09@Override%0A%09%09%09public void evaluate() throws Throwable %7B%0A%09%09%09%09before();%0A%0A%09%09%09%09// using try-with-resources in order to properly report exceptions also in case%0A%09%09%09%09// that after throws an exception (suppressed exception)%0A%09%09%09%09try (CloseableStatement closeableStatement = new CloseableStatement(base)) %7B%0A%09%09%09%09%09closeableStatement.evaluate();%0A%09%09%09%09%7D finally %7B%0A%09%09%09%09%09after();%0A%09%09%09%09%7D%0A%09%09%09%7D%0A%09%09%7D;%0A%09%7D%0A%0A%09public TestingFatalErrorHandler getFatalErrorHandler() %7B%0A%09%09return Preconditions.checkNotNull(testingFatalErrorHandler, %22The %25s has not been properly initialized.%22, TestingFatalErrorHandlerResource.class.getSimpleName());%0A%09%7D%0A%0A%09private void before() %7B%0A%09%09testingFatalErrorHandler = new TestingFatalErrorHandler();%0A%09%7D%0A%0A%09private void after() throws AssertionError %7B%0A%09%09final Throwable exception = getFatalErrorHandler().getException();%0A%0A%09%09if (exception != null) %7B%0A%09%09%09throw new AssertionError(%22The TestingFatalErrorHandler caught an exception.%22, exception);%0A%09%09%7D%0A%09%7D%0A%0A%09private static final class CloseableStatement implements AutoCloseable %7B%0A%09%09private final Statement statement;%0A%09%09private CloseableStatement(Statement statement) %7B%0A%09%09%09this.statement = statement;%0A%09%09%7D%0A%0A%09%09private void evaluate() throws Throwable %7B%0A%09%09%09statement.evaluate();%0A%09%09%7D%0A%0A%09%09@Override%0A%09%09public void close() %7B%7D%0A%09%7D%0A%7D%0A

Add TestingFatalErrorHandlerResource