Skip to content

Commit

Permalink
Introduce getTest[Class|Method]() in TestInfo & ExtensionContext
Browse files Browse the repository at this point in the history
This commit introduces Optional<Class<?>> getTestClass() and
Optional<Method> getTestMethod() methods in TestInfo and
ExtensionContext.

The existing `Class<?> getTestClass()` method in ExtensionContext has
simply been replaced, and the existing `Method getTestMethod()` method
in TestExtensionContext has been removed.

Issue: #153
  • Loading branch information
sbrannen committed May 24, 2016
1 parent ccd5168 commit a409b27
Show file tree
Hide file tree
Showing 10 changed files with 84 additions and 42 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,12 @@ public class TimingExtension implements BeforeTestMethodCallback, AfterTestMetho

@Override
public void beforeTestMethod(TestExtensionContext context) throws Exception {
getStore(context).put(context.getTestMethod(), System.currentTimeMillis());
getStore(context).put(context.getTestMethod().get(), System.currentTimeMillis());
}

@Override
public void afterTestMethod(TestExtensionContext context) throws Exception {
Method testMethod = context.getTestMethod();
Method testMethod = context.getTestMethod().get();
long start = (long) getStore(context).remove(testMethod);
long duration = System.currentTimeMillis() - start;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,20 +53,22 @@ class Extension implements BeforeAllCallback, AfterAllCallback {

@Override
public void beforeAll(ContainerExtensionContext context) throws Exception {
// @formatter:off
Class<?>[] loggerClasses = findAnnotation(context.getTestClass(), FullLogging.class)
.orElseThrow(() -> new PreconditionViolationException("@FullLogging must be declared on class " +
context.getTestClass().getName()))
.value();
Class<?> testClass = context.getTestClass().get();

Arrays.stream(loggerClasses)
.map(Class::getName)
.forEach(loggerName -> {
Logger logger = Logger.getLogger(loggerName);
previouslyActiveLogLevels.put(loggerName, logger.getLevel());
logger.setLevel(Level.ALL);
});
// @formatter:on
// @formatter:off
Class<?>[] loggerClasses = findAnnotation(testClass, FullLogging.class)
.orElseThrow(() -> new PreconditionViolationException("@FullLogging must be declared on class " +
testClass.getName()))
.value();

Arrays.stream(loggerClasses)
.map(Class::getName)
.forEach(loggerName -> {
Logger logger = Logger.getLogger(loggerName);
previouslyActiveLogLevels.put(loggerName, logger.getLevel());
logger.setLevel(Level.ALL);
});
// @formatter:on
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
* Microtests for implementors of {@linkplain ExtensionContext}:
* {@linkplain ClassBasedContainerExtensionContext} and
* {@linkplain MethodBasedTestExtensionContext}
*
* @since 5.0
*/
public class ExtensionContextTests {
Expand All @@ -50,7 +51,7 @@ public void fromClassTestDescriptor() {
ClassBasedContainerExtensionContext outerExtensionContext = new ClassBasedContainerExtensionContext(null, null,
outerClassDescriptor);
Assertions.assertAll("outerContext", //
() -> assertEquals(OuterClass.class, outerExtensionContext.getTestClass()), //
() -> assertEquals(OuterClass.class, outerExtensionContext.getTestClass().get()), //
() -> assertEquals(outerClassDescriptor.getDisplayName(), outerExtensionContext.getDisplayName()), //
() -> assertEquals(Optional.empty(), outerExtensionContext.getParent()) //
);
Expand Down Expand Up @@ -87,7 +88,6 @@ public void tagsCanBeRetrievedInExtensionContext() {
() -> assertEquals(2, testExtensionContext.getTags().size()), //
() -> assertTrue(testExtensionContext.getTags().contains("outer-tag"), "outer-tag missing"), //
() -> assertTrue(testExtensionContext.getTags().contains("method-tag"), "method-tag missing"));

}

@Test
Expand All @@ -100,7 +100,7 @@ public void fromMethodTestDescriptor() {
MethodBasedTestExtensionContext testExtensionContext = new MethodBasedTestExtensionContext(
classExtensionContext, null, methodTestDescriptor, new OuterClass());
Assertions.assertAll("methodContext", //
() -> assertEquals(OuterClass.class, testExtensionContext.getTestClass()), //
() -> assertEquals(OuterClass.class, testExtensionContext.getTestClass().get()), //
() -> assertEquals(methodTestDescriptor.getDisplayName(), testExtensionContext.getDisplayName()), //
() -> assertEquals(classExtensionContext, testExtensionContext.getParent().get()), //
() -> assertEquals(OuterClass.class, testExtensionContext.getTestInstance().getClass()) //
Expand Down Expand Up @@ -188,12 +188,10 @@ static class OuterClass {

@Tag("nested-tag")
class NestedClass {

}

@Tag("method-tag")
void aMethod() {

}
}

Expand Down
13 changes: 13 additions & 0 deletions junit5-api/src/main/java/org/junit/gen5/api/TestInfo.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@

import static org.junit.gen5.commons.meta.API.Usage.Experimental;

import java.lang.reflect.Method;
import java.util.Optional;
import java.util.Set;

import org.junit.gen5.commons.meta.API;
Expand Down Expand Up @@ -56,4 +58,15 @@ public interface TestInfo {
* or "inherited" from an outer context.
*/
Set<String> getTags();

/**
* Get the {@link Class} associated with the current test, if available.
*/
Optional<Class<?>> getTestClass();

/**
* Get the {@link Method} associated with the current test, if available.
*/
Optional<Method> getTestMethod();

}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import static org.junit.gen5.commons.meta.API.Usage.Experimental;

import java.lang.reflect.AnnotatedElement;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Map;
Expand All @@ -36,7 +37,7 @@
public interface ExtensionContext {

/**
* Get the parent extension context if there is one.
* Get the parent extension context, if available.
*/
Optional<ExtensionContext> getParent();

Expand Down Expand Up @@ -71,9 +72,15 @@ public interface ExtensionContext {
Set<String> getTags();

/**
* Get the {@link Class} associated with the current test or container.
* Get the {@link Class} associated with the current test or container,
* if available.
*/
Class<?> getTestClass();
Optional<Class<?>> getTestClass();

/**
* Get the {@link Method} associated with the current test, if available.
*/
Optional<Method> getTestMethod();

/**
* Get the {@link AnnotatedElement} corresponding to the current extension
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@

import static org.junit.gen5.commons.meta.API.Usage.Experimental;

import java.lang.reflect.Method;

import org.junit.gen5.commons.meta.API;

/**
Expand All @@ -27,5 +25,4 @@ public interface TestExtensionContext extends ExtensionContext {

Object getTestInstance();

Method getTestMethod();
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
import static org.junit.gen5.commons.meta.API.Usage.Internal;

import java.lang.reflect.AnnotatedElement;
import java.lang.reflect.Method;
import java.util.Optional;

import org.junit.gen5.api.extension.ContainerExtensionContext;
import org.junit.gen5.api.extension.ExtensionContext;
Expand Down Expand Up @@ -48,12 +50,17 @@ public String getDisplayName() {

@Override
public AnnotatedElement getElement() {
return getTestClass();
return getTestClass().get();
}

@Override
public Class<?> getTestClass() {
return ((ClassTestDescriptor) getTestDescriptor()).getTestClass();
public Optional<Class<?>> getTestClass() {
return Optional.of(((ClassTestDescriptor) getTestDescriptor()).getTestClass());
}

@Override
public Optional<Method> getTestMethod() {
return Optional.empty();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@

import java.lang.reflect.AnnotatedElement;
import java.lang.reflect.Method;
import java.util.Optional;

import org.junit.gen5.api.extension.ExtensionContext;
import org.junit.gen5.api.extension.TestExtensionContext;
Expand All @@ -35,8 +36,8 @@ public MethodBasedTestExtensionContext(ExtensionContext parent, EngineExecutionL
}

@Override
public Method getTestMethod() {
return ((MethodTestDescriptor) getTestDescriptor()).getTestMethod();
public Optional<Method> getTestMethod() {
return Optional.of(((MethodTestDescriptor) getTestDescriptor()).getTestMethod());
}

@Override
Expand All @@ -45,8 +46,8 @@ public Object getTestInstance() {
}

@Override
public Class<?> getTestClass() {
return ((MethodTestDescriptor) getTestDescriptor()).getTestClass();
public Optional<Class<?>> getTestClass() {
return Optional.of(((MethodTestDescriptor) getTestDescriptor()).getTestClass());
}

@Override
Expand All @@ -66,7 +67,7 @@ public String getDisplayName() {

@Override
public AnnotatedElement getElement() {
return getTestMethod();
return getTestMethod().get();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ protected void invokeTestMethod(JUnit5EngineExecutionContext context, TestExtens

throwableCollector.execute(() -> {
MethodInvocationContext methodInvocationContext = methodInvocationContext(
testExtensionContext.getTestInstance(), testExtensionContext.getTestMethod());
testExtensionContext.getTestInstance(), testExtensionContext.getTestMethod().get());
try {
new MethodInvoker(testExtensionContext, context.getExtensionRegistry()).invoke(methodInvocationContext);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@

package org.junit.gen5.engine.junit5.extension;

import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
import java.util.Optional;
import java.util.Set;

import org.junit.gen5.api.TestInfo;
Expand All @@ -36,22 +38,25 @@ public boolean supports(Parameter parameter, MethodInvocationContext methodInvoc

@Override
public TestInfo resolve(Parameter parameter, MethodInvocationContext methodInvocationContext,
final ExtensionContext extensionContext) {
ExtensionContext extensionContext) {

return new DefaultTestInfo(extensionContext.getName(), extensionContext.getDisplayName(),
extensionContext.getTags());
return new DefaultTestInfo(extensionContext);
}

private static class DefaultTestInfo implements TestInfo {

private final String name;
private final String displayName;
private final Optional<Class<?>> testClass;
private final Optional<Method> testMethod;
private final Set<String> tags;

DefaultTestInfo(String name, String displayName, Set<String> tags) {
this.name = name;
this.displayName = displayName;
this.tags = tags;
DefaultTestInfo(ExtensionContext extensionContext) {
this.name = extensionContext.getName();
this.displayName = extensionContext.getDisplayName();
this.testClass = extensionContext.getTestClass();
this.testMethod = extensionContext.getTestMethod();
this.tags = extensionContext.getTags();
}

@Override
Expand All @@ -69,13 +74,25 @@ public Set<String> getTags() {
return tags;
}

@Override
public Optional<Class<?>> getTestClass() {
return this.testClass;
}

@Override
public Optional<Method> getTestMethod() {
return this.testMethod;
}

@Override
public String toString() {
// @formatter:off
return new ToStringBuilder(this)
.append("name", this.name)
.append("displayName", this.displayName)
.append("tags", this.tags)
.append("testClass", this.testClass)
.append("testMethod", this.testMethod)
.toString();
// @formatter:on
}
Expand Down

0 comments on commit a409b27

Please # to comment.