Skip to content

Commit

Permalink
Polishing
Browse files Browse the repository at this point in the history
  • Loading branch information
sbrannen committed Mar 12, 2020
1 parent 290ba0e commit ecae6ee
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 44 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,7 @@ public void after(JupiterEngineExecutionContext context) {
}

if (isPerClassLifecycle(context)) {
invokeTestInstancePreDestroyCallback(context);
invokeTestInstancePreDestroyCallbacks(context);
}

// If the previous Throwable was not null when this method was called,
Expand Down Expand Up @@ -425,7 +425,7 @@ private void invokeAfterAllCallbacks(JupiterEngineExecutionContext context) {
.forEach(extension -> throwableCollector.execute(() -> extension.afterAll(extensionContext)));
}

private void invokeTestInstancePreDestroyCallback(JupiterEngineExecutionContext context) {
private void invokeTestInstancePreDestroyCallbacks(JupiterEngineExecutionContext context) {
ExtensionContext extensionContext = context.getExtensionContext();
ThrowableCollector throwableCollector = context.getThrowableCollector();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
import java.util.function.Consumer;

import org.apiguardian.api.API;
import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.api.TestInstance.Lifecycle;
import org.junit.jupiter.api.extension.AfterEachCallback;
import org.junit.jupiter.api.extension.AfterTestExecutionCallback;
import org.junit.jupiter.api.extension.BeforeEachCallback;
Expand Down Expand Up @@ -141,14 +141,21 @@ public JupiterEngineExecutionContext execute(JupiterEngineExecutionContext conte
invokeAfterEachMethods(context);
}
invokeAfterEachCallbacks(context);
invokeTestInstancePreDestroyCallback(context);
if (isPerMethodLifecycle(context)) {
invokeTestInstancePreDestroyCallbacks(context);
}
// @formatter:on

throwableCollector.assertEmpty();

return context;
}

private boolean isPerMethodLifecycle(JupiterEngineExecutionContext context) {
return context.getExtensionContext().getTestInstanceLifecycle().orElse(
Lifecycle.PER_CLASS) == Lifecycle.PER_METHOD;
}

private void invokeBeforeEachCallbacks(JupiterEngineExecutionContext context) {
invokeBeforeMethodsOrCallbacksUntilExceptionOccurs(BeforeEachCallback.class, context,
(callback, extensionContext) -> callback.beforeEach(extensionContext));
Expand Down Expand Up @@ -248,13 +255,9 @@ private void invokeAfterEachCallbacks(JupiterEngineExecutionContext context) {
(callback, extensionContext) -> callback.afterEach(extensionContext));
}

private void invokeTestInstancePreDestroyCallback(JupiterEngineExecutionContext context) {
context.getExtensionContext().getTestInstanceLifecycle().ifPresent(lifecycle -> {
if (TestInstance.Lifecycle.PER_METHOD == lifecycle) {
invokeAllAfterMethodsOrCallbacks(TestInstancePreDestroyCallback.class, context,
TestInstancePreDestroyCallback::preDestroyTestInstance);
}
});
private void invokeTestInstancePreDestroyCallbacks(JupiterEngineExecutionContext context) {
invokeAllAfterMethodsOrCallbacks(TestInstancePreDestroyCallback.class, context,
TestInstancePreDestroyCallback::preDestroyTestInstance);
}

private <T extends Extension> void invokeAllAfterMethodsOrCallbacks(Class<T> type,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.TestInstance.Lifecycle.PER_CLASS;

import java.util.ArrayList;
import java.util.List;
Expand Down Expand Up @@ -46,7 +46,6 @@ void instancePreDestroyCallbacksInNestedClasses() {

// @formatter:off
assertThat(callSequence).containsExactly(

// OuterTestCase
"beforeOuterMethod",
"testOuter",
Expand All @@ -57,17 +56,15 @@ void instancePreDestroyCallbacksInNestedClasses() {
"beforeInnerMethod",
"testInner",
"barPreDestroyCallbackTestInstance:InnerTestCase",

"fooPreDestroyCallbackTestInstance:InnerTestCase"
);
// @formatter:on
}

@Test
void testSpecificTestInstancePreDestroyCallbackIsCalled() {
executeTestsForClass(
TestCaseWithTestSpecificTestInstancePreDestroyCallback.class).testEvents().assertStatistics(
stats -> stats.started(1).succeeded(1));
executeTestsForClass(TestCaseWithTestSpecificTestInstancePreDestroyCallback.class).testEvents()//
.assertStatistics(stats -> stats.started(1).succeeded(1));

// @formatter:off
assertThat(callSequence).containsExactly(
Expand All @@ -80,8 +77,8 @@ void testSpecificTestInstancePreDestroyCallbackIsCalled() {

@Test
void classLifecyclePreDestroyCallbacks() {
executeTestsForClass(PerClassLifecyclePreDestroyCallbackWithTwoTestMethods.class).testEvents().assertStatistics(
stats -> stats.started(2).succeeded(2));
executeTestsForClass(PerClassLifecyclePreDestroyCallbackWithTwoTestMethods.class).testEvents()//
.assertStatistics(stats -> stats.started(2).succeeded(2));

// @formatter:off
assertThat(callSequence).containsExactly(
Expand All @@ -96,6 +93,15 @@ void classLifecyclePreDestroyCallbacks() {

// -------------------------------------------------------------------

private abstract static class Destroyable {

boolean destroyed;

void setDestroyed() {
this.destroyed = true;
}
}

@ExtendWith(FooInstancePreDestroyCallback.class)
static class OuterTestCase extends Destroyable {

Expand All @@ -106,7 +112,7 @@ void beforeOuterMethod() {

@Test
void testOuter() {
assertFalse(isDestroyed);
assertFalse(destroyed);
callSequence.add("testOuter");
}

Expand All @@ -116,7 +122,7 @@ class InnerTestCase extends Destroyable {

@BeforeEach
void beforeInnerMethod() {
assertFalse(isDestroyed);
assertFalse(destroyed);
callSequence.add("beforeInnerMethod");
}

Expand All @@ -131,7 +137,7 @@ static class TestCaseWithTestSpecificTestInstancePreDestroyCallback extends Dest

@BeforeEach
void beforeEachMethod() {
assertFalse(isDestroyed);
assertFalse(destroyed);
callSequence.add("beforeEachMethod");
}

Expand All @@ -142,7 +148,7 @@ void test() {
}
}

@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@TestInstance(PER_CLASS)
@ExtendWith(FooInstancePreDestroyCallback.class)
static class PerClassLifecyclePreDestroyCallbackWithTwoTestMethods extends Destroyable {

Expand All @@ -162,31 +168,17 @@ void test2() {
}
}

static class FooInstancePreDestroyCallback extends AbstractInstancePreDestroyCallback {

protected FooInstancePreDestroyCallback() {
super("foo");
}
}

static class BarInstancePreDestroyCallback extends AbstractInstancePreDestroyCallback {

protected BarInstancePreDestroyCallback() {
super("bar");
}
}

static abstract class AbstractInstancePreDestroyCallback implements TestInstancePreDestroyCallback {
static abstract class AbstractTestInstancePreDestroyCallback implements TestInstancePreDestroyCallback {

private final String name;

AbstractInstancePreDestroyCallback(String name) {
AbstractTestInstancePreDestroyCallback(String name) {
this.name = name;
}

@Override
public void preDestroyTestInstance(ExtensionContext context) {
assertTrue(context.getTestInstance().isPresent());
assertThat(context.getTestInstance()).isPresent();
Object testInstance = context.getTestInstance().get();
if (testInstance instanceof Destroyable) {
((Destroyable) testInstance).setDestroyed();
Expand All @@ -195,12 +187,18 @@ public void preDestroyTestInstance(ExtensionContext context) {
}
}

private abstract static class Destroyable {
static class FooInstancePreDestroyCallback extends AbstractTestInstancePreDestroyCallback {

boolean isDestroyed;
FooInstancePreDestroyCallback() {
super("foo");
}
}

void setDestroyed() {
isDestroyed = true;
static class BarInstancePreDestroyCallback extends AbstractTestInstancePreDestroyCallback {

BarInstancePreDestroyCallback() {
super("bar");
}
}

}

0 comments on commit ecae6ee

Please sign in to comment.