Skip to content

Commit

Permalink
Polish TestFactoryTestDescriptor
Browse files Browse the repository at this point in the history
  • Loading branch information
sbrannen committed Jun 1, 2016
1 parent 86810b1 commit 502a023
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 37 deletions.
Expand Up @@ -74,12 +74,12 @@ void dynamicTestsAreExecutedFromStream() {
event(engine(), started()), // event(engine(), started()), //
event(container(MyDynamicTestCase.class), started()), // event(container(MyDynamicTestCase.class), started()), //
event(container("dynamicStream"), started()), // event(container("dynamicStream"), started()), //
event(dynamicTestRegistered("dynamic-test:%1")), // event(dynamicTestRegistered("dynamic-test:#1")), //
event(test("dynamic-test:%1", "succeedingTest"), started()), // event(test("dynamic-test:#1", "succeedingTest"), started()), //
event(test("dynamic-test:%1", "succeedingTest"), finishedSuccessfully()), // event(test("dynamic-test:#1", "succeedingTest"), finishedSuccessfully()), //
event(dynamicTestRegistered("dynamic-test:%2")), // event(dynamicTestRegistered("dynamic-test:#2")), //
event(test("dynamic-test:%2", "failingTest"), started()), // event(test("dynamic-test:#2", "failingTest"), started()), //
event(test("dynamic-test:%2", "failingTest"), finishedWithFailure(message("failing"))), // event(test("dynamic-test:#2", "failingTest"), finishedWithFailure(message("failing"))), //
event(container("dynamicStream"), finishedSuccessfully()), // event(container("dynamicStream"), finishedSuccessfully()), //
event(container(MyDynamicTestCase.class), finishedSuccessfully()), // event(container(MyDynamicTestCase.class), finishedSuccessfully()), //
event(engine(), finishedSuccessfully())); event(engine(), finishedSuccessfully()));
Expand Down
Expand Up @@ -10,16 +10,16 @@


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


import static java.util.Spliterator.ORDERED;
import static java.util.Spliterators.spliteratorUnknownSize;
import static java.util.stream.StreamSupport.stream;
import static org.junit.gen5.commons.meta.API.Usage.Internal; import static org.junit.gen5.commons.meta.API.Usage.Internal;


import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.Collection; import java.util.Collection;
import java.util.Iterator; import java.util.Iterator;
import java.util.Spliterator;
import java.util.Spliterators;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Stream; import java.util.stream.Stream;
import java.util.stream.StreamSupport;


import org.junit.gen5.api.DynamicTest; import org.junit.gen5.api.DynamicTest;
import org.junit.gen5.api.extension.TestExtensionContext; import org.junit.gen5.api.extension.TestExtensionContext;
Expand Down Expand Up @@ -57,11 +57,6 @@ public boolean isContainer() {
return true; return true;
} }


@Override
public boolean isTest() {
return true;
}

@Override @Override
public boolean isLeaf() { public boolean isLeaf() {
return true; return true;
Expand All @@ -79,55 +74,51 @@ protected void invokeTestMethod(JUnit5EngineExecutionContext context, TestExtens
Object testFactoryMethodResult = executableInvoker.invoke(method, instance, testExtensionContext, Object testFactoryMethodResult = executableInvoker.invoke(method, instance, testExtensionContext,
context.getExtensionRegistry()); context.getExtensionRegistry());


Stream<? extends DynamicTest> dynamicTestStream = toDynamicTestStream(testExtensionContext,
testFactoryMethodResult);

AtomicInteger index = new AtomicInteger();
try { try {
dynamicTestStream.forEach( AtomicInteger index = new AtomicInteger();
toDynamicTestStream(testExtensionContext, testFactoryMethodResult).forEach(
dynamicTest -> registerAndExecute(dynamicTest, index.incrementAndGet(), listener)); dynamicTest -> registerAndExecute(dynamicTest, index.incrementAndGet(), listener));
} }
catch (ClassCastException cce) { catch (ClassCastException ex) {
throw invalidReturnTypeException(testExtensionContext); throw invalidReturnTypeException(testExtensionContext);
} }
}); });
} }


@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
private Stream<? extends DynamicTest> toDynamicTestStream(TestExtensionContext testExtensionContext, private Stream<DynamicTest> toDynamicTestStream(TestExtensionContext testExtensionContext,
Object testFactoryMethodResult) { Object testFactoryMethodResult) {


if (testFactoryMethodResult instanceof Stream) { if (testFactoryMethodResult instanceof Stream) {
return (Stream<? extends DynamicTest>) testFactoryMethodResult; return (Stream<DynamicTest>) testFactoryMethodResult;
} }
// use Collection's stream() implementation even though it implements Iterable
if (testFactoryMethodResult instanceof Collection) { if (testFactoryMethodResult instanceof Collection) {
Collection<? extends DynamicTest> dynamicTestCollection = (Collection<? extends DynamicTest>) testFactoryMethodResult; // Use Collection's stream() implementation even though Collection implements Iterable
return dynamicTestCollection.stream(); Collection<DynamicTest> collection = (Collection<DynamicTest>) testFactoryMethodResult;
return collection.stream();
} }
if (testFactoryMethodResult instanceof Iterable) { if (testFactoryMethodResult instanceof Iterable) {
Iterable<? extends DynamicTest> dynamicTestIterable = (Iterable<? extends DynamicTest>) testFactoryMethodResult; Iterable<DynamicTest> iterable = (Iterable<DynamicTest>) testFactoryMethodResult;
return StreamSupport.stream(dynamicTestIterable.spliterator(), false); return stream(iterable.spliterator(), false);
} }
if (testFactoryMethodResult instanceof Iterator) { if (testFactoryMethodResult instanceof Iterator) {
Iterator<? extends DynamicTest> dynamicTestIterator = (Iterator<? extends DynamicTest>) testFactoryMethodResult; Iterator<DynamicTest> iterator = (Iterator<DynamicTest>) testFactoryMethodResult;
return StreamSupport.stream(Spliterators.spliteratorUnknownSize(dynamicTestIterator, Spliterator.ORDERED), return stream(spliteratorUnknownSize(iterator, ORDERED), false);
false);
} }


throw invalidReturnTypeException(testExtensionContext); throw invalidReturnTypeException(testExtensionContext);
} }


private void registerAndExecute(DynamicTest dynamicTest, int index, EngineExecutionListener listener) { private void registerAndExecute(DynamicTest dynamicTest, int index, EngineExecutionListener listener) {
UniqueId uniqueId = getUniqueId().append(DYNAMIC_TEST_SEGMENT_TYPE, "%" + index); UniqueId uniqueId = getUniqueId().append(DYNAMIC_TEST_SEGMENT_TYPE, "#" + index);
DynamicTestTestDescriptor dynamicTestTestDescriptor = new DynamicTestTestDescriptor(uniqueId, dynamicTest, TestDescriptor descriptor = new DynamicTestTestDescriptor(uniqueId, dynamicTest, getSource().get());
getSource().get());
addChild(dynamicTestTestDescriptor); addChild(descriptor);
listener.dynamicTestRegistered(descriptor);


listener.dynamicTestRegistered(dynamicTestTestDescriptor); listener.executionStarted(descriptor);
listener.executionStarted(dynamicTestTestDescriptor);
TestExecutionResult result = singleTestExecutor.executeSafely(dynamicTest.getExecutable()::execute); TestExecutionResult result = singleTestExecutor.executeSafely(dynamicTest.getExecutable()::execute);
listener.executionFinished(dynamicTestTestDescriptor, result); listener.executionFinished(descriptor, result);
} }


private JUnitException invalidReturnTypeException(TestExtensionContext testExtensionContext) { private JUnitException invalidReturnTypeException(TestExtensionContext testExtensionContext) {
Expand Down

0 comments on commit 502a023

Please sign in to comment.