Skip to content

Commit

Permalink
Polishing
Browse files Browse the repository at this point in the history
  • Loading branch information
sbrannen committed Jun 7, 2019
1 parent f950f4e commit e73a7f4
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 14 deletions.
Expand Up @@ -222,6 +222,9 @@ public void cleanUp(JupiterEngineExecutionContext context) throws Exception {
context.close(); context.close();
} }


/**
* @since 5.5
*/
@FunctionalInterface @FunctionalInterface
interface ExceptionHandlerInvoker<T extends Extension> { interface ExceptionHandlerInvoker<T extends Extension> {


Expand Down
Expand Up @@ -17,7 +17,6 @@
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.function.BiFunction;
import java.util.function.Consumer; import java.util.function.Consumer;


import org.apiguardian.api.API; import org.apiguardian.api.API;
Expand Down Expand Up @@ -47,7 +46,6 @@
import org.junit.platform.engine.TestExecutionResult; import org.junit.platform.engine.TestExecutionResult;
import org.junit.platform.engine.UniqueId; import org.junit.platform.engine.UniqueId;
import org.junit.platform.engine.support.hierarchical.ThrowableCollector; import org.junit.platform.engine.support.hierarchical.ThrowableCollector;
import org.junit.platform.engine.support.hierarchical.ThrowableCollector.Executable;


/** /**
* {@link TestDescriptor} for {@link org.junit.jupiter.api.Test @Test} methods. * {@link TestDescriptor} for {@link org.junit.jupiter.api.Test @Test} methods.
Expand Down Expand Up @@ -149,13 +147,13 @@ public JupiterEngineExecutionContext execute(JupiterEngineExecutionContext conte


private void invokeBeforeEachCallbacks(JupiterEngineExecutionContext context) { private void invokeBeforeEachCallbacks(JupiterEngineExecutionContext context) {
invokeBeforeMethodsOrCallbacksUntilExceptionOccurs(BeforeEachCallback.class, context, invokeBeforeMethodsOrCallbacksUntilExceptionOccurs(BeforeEachCallback.class, context,
(extensionContext, callback) -> () -> callback.beforeEach(extensionContext)); (callback, extensionContext) -> callback.beforeEach(extensionContext));
} }


private void invokeBeforeEachMethods(JupiterEngineExecutionContext context) { private void invokeBeforeEachMethods(JupiterEngineExecutionContext context) {
ExtensionRegistry registry = context.getExtensionRegistry(); ExtensionRegistry registry = context.getExtensionRegistry();
invokeBeforeMethodsOrCallbacksUntilExceptionOccurs(BeforeEachMethodAdapter.class, context, invokeBeforeMethodsOrCallbacksUntilExceptionOccurs(BeforeEachMethodAdapter.class, context,
(extensionContext, adapter) -> () -> { (adapter, extensionContext) -> {
try { try {
adapter.invokeBeforeEachMethod(extensionContext, registry); adapter.invokeBeforeEachMethod(extensionContext, registry);
} }
Expand All @@ -174,19 +172,18 @@ private void invokeBeforeEachExecutionExceptionHandlers(ExtensionContext context


private void invokeBeforeTestExecutionCallbacks(JupiterEngineExecutionContext context) { private void invokeBeforeTestExecutionCallbacks(JupiterEngineExecutionContext context) {
invokeBeforeMethodsOrCallbacksUntilExceptionOccurs(BeforeTestExecutionCallback.class, context, invokeBeforeMethodsOrCallbacksUntilExceptionOccurs(BeforeTestExecutionCallback.class, context,
(extensionContext, callback) -> () -> callback.beforeTestExecution(extensionContext)); (callback, extensionContext) -> callback.beforeTestExecution(extensionContext));
} }


private <T extends Extension> void invokeBeforeMethodsOrCallbacksUntilExceptionOccurs(Class<T> type, private <T extends Extension> void invokeBeforeMethodsOrCallbacksUntilExceptionOccurs(Class<T> type,
JupiterEngineExecutionContext context, BiFunction<ExtensionContext, T, Executable> generator) { JupiterEngineExecutionContext context, CallbackInvoker<T> callbackInvoker) {


ExtensionRegistry registry = context.getExtensionRegistry(); ExtensionRegistry registry = context.getExtensionRegistry();
ExtensionContext extensionContext = context.getExtensionContext(); ExtensionContext extensionContext = context.getExtensionContext();
ThrowableCollector throwableCollector = context.getThrowableCollector(); ThrowableCollector throwableCollector = context.getThrowableCollector();


for (T callback : registry.getExtensions(type)) { for (T callback : registry.getExtensions(type)) {
Executable executable = generator.apply(extensionContext, callback); throwableCollector.execute(() -> callbackInvoker.invoke(callback, extensionContext));
throwableCollector.execute(executable);
if (throwableCollector.isNotEmpty()) { if (throwableCollector.isNotEmpty()) {
break; break;
} }
Expand Down Expand Up @@ -220,12 +217,12 @@ private void invokeTestExecutionExceptionHandlers(ExtensionRegistry registry, Ex


private void invokeAfterTestExecutionCallbacks(JupiterEngineExecutionContext context) { private void invokeAfterTestExecutionCallbacks(JupiterEngineExecutionContext context) {
invokeAllAfterMethodsOrCallbacks(AfterTestExecutionCallback.class, context, invokeAllAfterMethodsOrCallbacks(AfterTestExecutionCallback.class, context,
(extensionContext, callback) -> () -> callback.afterTestExecution(extensionContext)); (callback, extensionContext) -> callback.afterTestExecution(extensionContext));
} }


private void invokeAfterEachMethods(JupiterEngineExecutionContext context) { private void invokeAfterEachMethods(JupiterEngineExecutionContext context) {
ExtensionRegistry registry = context.getExtensionRegistry(); ExtensionRegistry registry = context.getExtensionRegistry();
invokeAllAfterMethodsOrCallbacks(AfterEachMethodAdapter.class, context, (extensionContext, adapter) -> () -> { invokeAllAfterMethodsOrCallbacks(AfterEachMethodAdapter.class, context, (adapter, extensionContext) -> {
try { try {
adapter.invokeAfterEachMethod(extensionContext, registry); adapter.invokeAfterEachMethod(extensionContext, registry);
} }
Expand All @@ -244,19 +241,18 @@ private void invokeAfterEachExecutionExceptionHandlers(ExtensionContext context,


private void invokeAfterEachCallbacks(JupiterEngineExecutionContext context) { private void invokeAfterEachCallbacks(JupiterEngineExecutionContext context) {
invokeAllAfterMethodsOrCallbacks(AfterEachCallback.class, context, invokeAllAfterMethodsOrCallbacks(AfterEachCallback.class, context,
(extensionContext, callback) -> () -> callback.afterEach(extensionContext)); (callback, extensionContext) -> callback.afterEach(extensionContext));
} }


private <T extends Extension> void invokeAllAfterMethodsOrCallbacks(Class<T> type, private <T extends Extension> void invokeAllAfterMethodsOrCallbacks(Class<T> type,
JupiterEngineExecutionContext context, BiFunction<ExtensionContext, T, Executable> generator) { JupiterEngineExecutionContext context, CallbackInvoker<T> callbackInvoker) {


ExtensionRegistry registry = context.getExtensionRegistry(); ExtensionRegistry registry = context.getExtensionRegistry();
ExtensionContext extensionContext = context.getExtensionContext(); ExtensionContext extensionContext = context.getExtensionContext();
ThrowableCollector throwableCollector = context.getThrowableCollector(); ThrowableCollector throwableCollector = context.getThrowableCollector();


registry.getReversedExtensions(type).forEach(callback -> { registry.getReversedExtensions(type).forEach(callback -> {
Executable executable = generator.apply(extensionContext, callback); throwableCollector.execute(() -> callbackInvoker.invoke(callback, extensionContext));
throwableCollector.execute(executable);
}); });
} }


Expand Down Expand Up @@ -336,4 +332,14 @@ private void invokeTestWatchers(JupiterEngineExecutionContext context, boolean r
}); });
} }


/**
* @since 5.5
*/
@FunctionalInterface
private interface CallbackInvoker<T extends Extension> {

void invoke(T t, ExtensionContext context) throws Throwable;

}

} }

0 comments on commit e73a7f4

Please sign in to comment.