Skip to content

Commit

Permalink
#106 Using UniqueId in discovery. Compiles. Tests fail.
Browse files Browse the repository at this point in the history
  • Loading branch information
jlink committed Mar 11, 2016
1 parent b3d13e1 commit ef886b5
Show file tree
Hide file tree
Showing 8 changed files with 139 additions and 107 deletions.
Expand Up @@ -60,7 +60,7 @@ public String getUniqueString() {
}

public List<Segment> getSegments() {
return Collections.unmodifiableList(segments);
return new ArrayList<>(segments);
}

/**
Expand Down Expand Up @@ -130,6 +130,11 @@ public boolean equals(Object o) {

}

@Override
public String toString() {
return String.format("[%s:%s]", getType(), getValue());
}

@Override
public int hashCode() {
return 31 * type.hashCode() + value.hashCode();
Expand Down
Expand Up @@ -10,48 +10,48 @@

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

import static org.junit.gen5.api.Assertions.assertEquals;
import static org.junit.gen5.api.Assertions.assertSame;
import static org.junit.gen5.api.Assertions.*;

import java.lang.reflect.Method;
import java.math.BigDecimal;

import org.junit.gen5.api.Nested;
import org.junit.gen5.api.Test;
import org.junit.gen5.engine.UniqueId;
import org.junit.gen5.engine.support.descriptor.EngineDescriptor;

public class JUnit5TestableTests {

private final EngineDescriptor engineDescriptor = new EngineDescriptor("ENGINE_ID", "My Engine");
private final static EngineDescriptor engineDescriptor = new EngineDescriptor("ENGINE_ID", "My Engine");

@Test
public void fromUniqueIdForTopLevelClass() {

JUnit5Class testable = (JUnit5Class) JUnit5Testable.fromUniqueId(
"ENGINE_ID:org.junit.gen5.engine.junit5.discovery.ATestClass", engineDescriptor.getUniqueId());
assertEquals("ENGINE_ID:org.junit.gen5.engine.junit5.discovery.ATestClass", testable.getUniqueId());
JUnit5Class testable = (JUnit5Class) JUnit5Testable.fromUniqueId(uniqueIdForClass(ATestClass.class),
engineId());
assertEquals("[engine:ENGINE_ID]/[class:org.junit.gen5.engine.junit5.discovery.ATestClass]",
testable.getUniqueId().getUniqueString());
assertSame(ATestClass.class, testable.getJavaClass());
}

@Test
public void fromUniqueIdForNestedClass() {
public void fromUniqueIdForStaticInnerClass() {

JUnit5Class testable = (JUnit5Class) JUnit5Testable.fromUniqueId(
"ENGINE_ID:org.junit.gen5.engine.junit5.discovery.ATestClass$AnInnerTestClass",
engineDescriptor.getUniqueId());
assertEquals("ENGINE_ID:org.junit.gen5.engine.junit5.discovery.ATestClass$AnInnerTestClass",
testable.getUniqueId());
assertSame(ATestClass.AnInnerTestClass.class, testable.getJavaClass());
uniqueIdForClass(ATestClass.AnInnerStaticClass.class), engineId());
assertEquals("[engine:ENGINE_ID]/[class:org.junit.gen5.engine.junit5.discovery.ATestClass$AnInnerStaticClass]",
testable.getUniqueId().getUniqueString());
assertSame(ATestClass.AnInnerStaticClass.class, testable.getJavaClass());
}

@Test
public void fromUniqueIdForDoubleNestedClass() {
public void fromUniqueIdForNestedTestClass() {

JUnit5Class testable = (JUnit5Class) JUnit5Testable.fromUniqueId(
"ENGINE_ID:org.junit.gen5.engine.junit5.discovery.ATestClass$AnInnerTestClass$InnerInnerTestClass",
engineDescriptor.getUniqueId());
assertEquals("ENGINE_ID:org.junit.gen5.engine.junit5.discovery.ATestClass$AnInnerTestClass$InnerInnerTestClass",
testable.getUniqueId());
assertSame(ATestClass.AnInnerTestClass.InnerInnerTestClass.class, testable.getJavaClass());
uniqueIdForClass(ATestClass.ANestedTestClass.class), engineId());
assertEquals("[engine:ENGINE_ID]/[class:org.junit.gen5.engine.junit5.discovery.ATestClass]/[class:ANestedTestClass]",
testable.getUniqueId().getUniqueString());
assertSame(ATestClass.ANestedTestClass.class, testable.getJavaClass());
}

@Test
Expand Down Expand Up @@ -85,7 +85,7 @@ public void fromUniqueIdForMethodInNestedClass() throws NoSuchMethodException {
engineDescriptor.getUniqueId());
assertEquals("ENGINE_ID:org.junit.gen5.engine.junit5.discovery.ATestClass$AnInnerTestClass#test2()",
testable.getUniqueId());
Method testMethod = ATestClass.AnInnerTestClass.class.getDeclaredMethod("test2");
Method testMethod = ATestClass.AnInnerStaticClass.class.getDeclaredMethod("test2");
assertEquals(testMethod, testable.getJavaMethod());
}

Expand All @@ -98,11 +98,11 @@ public void fromClass() throws NoSuchMethodException {

@Test
public void nestedClassFromClass() throws NoSuchMethodException {
JUnit5Class testable = (JUnit5Class) JUnit5Testable.fromClass(ATestClass.AnInnerTestClass.class,
JUnit5Class testable = (JUnit5Class) JUnit5Testable.fromClass(ATestClass.AnInnerStaticClass.class,
engineDescriptor.getUniqueId());
assertEquals("ENGINE_ID:org.junit.gen5.engine.junit5.discovery.ATestClass$AnInnerTestClass",
testable.getUniqueId());
assertSame(ATestClass.AnInnerTestClass.class, testable.getJavaClass());
assertSame(ATestClass.AnInnerStaticClass.class, testable.getJavaClass());
}

@Test
Expand All @@ -126,6 +126,13 @@ public void fromMethodWithParameters() throws NoSuchMethodException {
assertSame(testMethod, testable.getJavaMethod());
}

private static UniqueId uniqueIdForClass(Class<?> clazz) {
return engineId().append("class", clazz.getName());
}

private static UniqueId engineId() {
return UniqueId.forEngine("engine", engineDescriptor.getUniqueId());
}
}

class ATestClass {
Expand All @@ -135,20 +142,23 @@ void test1() {

}

static class AnInnerTestClass {
static class AnInnerStaticClass {

@Test
void test2() {

}

static class InnerInnerTestClass {
}

@Test
void test3() {
@Nested
class ANestedTestClass {

@Test
void test3() {

}
}

}
}

Expand Down
Expand Up @@ -25,6 +25,7 @@
import org.junit.gen5.commons.util.ReflectionUtils;
import org.junit.gen5.engine.EngineDiscoveryRequest;
import org.junit.gen5.engine.TestDescriptor;
import org.junit.gen5.engine.UniqueId;
import org.junit.gen5.engine.discovery.ClassSelector;
import org.junit.gen5.engine.discovery.ClasspathSelector;
import org.junit.gen5.engine.discovery.MethodSelector;
Expand Down Expand Up @@ -66,39 +67,39 @@ public void resolveSelectors(EngineDiscoveryRequest request) {
resolveTestMethod(selector.getTestClass(), selector.getTestMethod());
});
request.getSelectorsByType(UniqueIdSelector.class).forEach(selector -> {
resolveUniqueId(selector.getUniqueId());
resolveUniqueId(UniqueId.parse(selector.getUniqueId()));
});
}

private void resolveTestClass(Class<?> testClass) {
JUnit5Testable testable = JUnit5Testable.fromClass(testClass, engineDescriptor.getUniqueId());
JUnit5Testable testable = JUnit5Testable.fromClass(testClass, engineIdStringToUniqueId(engineDescriptor.getUniqueId()));
resolveTestable(testable);
}

private void resolveTestMethod(Class<?> testClass, Method testMethod) {
JUnit5Testable testable = JUnit5Testable.fromMethod(testMethod, testClass, engineDescriptor.getUniqueId());
JUnit5Testable testable = JUnit5Testable.fromMethod(testMethod, testClass, engineIdStringToUniqueId(engineDescriptor.getUniqueId()));
resolveTestable(testable);
}

private void resolveUniqueId(String uniqueId) {
JUnit5Testable testable = JUnit5Testable.fromUniqueId(uniqueId, engineDescriptor.getUniqueId());
private void resolveUniqueId(UniqueId uniqueId) {
JUnit5Testable testable = JUnit5Testable.fromUniqueId(uniqueId, engineIdStringToUniqueId(engineDescriptor.getUniqueId()));
resolveTestable(testable);
}

private void resolveTestable(JUnit5Testable testable, boolean withChildren) {
testable.accept(new JUnit5Testable.Visitor() {
@Override
public void visitClass(String uniqueId, Class<?> testClass) {
public void visitClass(UniqueId uniqueId, Class<?> testClass) {
resolveClassTestable(testClass, uniqueId, engineDescriptor, withChildren);
}

@Override
public void visitMethod(String uniqueId, Method method, Class<?> container) {
public void visitMethod(UniqueId uniqueId, Method method, Class<?> container) {
resolveMethodTestable(method, container, uniqueId);
}

@Override
public void visitNestedClass(String uniqueId, Class<?> testClass, Class<?> containerClass) {
public void visitNestedClass(UniqueId uniqueId, Class<?> testClass, Class<?> containerClass) {
resolveNestedClassTestable(uniqueId, testClass, containerClass, withChildren);
}
});
Expand All @@ -108,14 +109,14 @@ private void resolveTestable(JUnit5Testable testable) {
resolveTestable(testable, true);
}

private void resolveMethodTestable(Method method, Class<?> testClass, String uniqueId) {
JUnit5Testable parentTestable = JUnit5Testable.fromClass(testClass, engineDescriptor.getUniqueId());
private void resolveMethodTestable(Method method, Class<?> testClass, UniqueId uniqueId) {
JUnit5Testable parentTestable = JUnit5Testable.fromClass(testClass, engineIdStringToUniqueId(engineDescriptor.getUniqueId()));
TestDescriptor newParentDescriptor = resolveAndReturnParentTestable(parentTestable);
MethodTestDescriptor descriptor = getOrCreateMethodDescriptor(testClass, method, uniqueId);
newParentDescriptor.addChild(descriptor);
}

private void resolveClassTestable(Class<?> testClass, String uniqueId, AbstractTestDescriptor parentDescriptor,
private void resolveClassTestable(Class<?> testClass, UniqueId uniqueId, AbstractTestDescriptor parentDescriptor,
boolean withChildren) {
JUnit5TestDescriptor descriptor = getOrCreateClassDescriptor(testClass, uniqueId);
parentDescriptor.addChild(descriptor);
Expand All @@ -126,9 +127,9 @@ private void resolveClassTestable(Class<?> testClass, String uniqueId, AbstractT
}
}

private void resolveNestedClassTestable(String uniqueId, Class<?> testClass, Class<?> containerClass,
private void resolveNestedClassTestable(UniqueId uniqueId, Class<?> testClass, Class<?> containerClass,
boolean withChildren) {
JUnit5Testable containerTestable = JUnit5Testable.fromClass(containerClass, engineDescriptor.getUniqueId());
JUnit5Testable containerTestable = JUnit5Testable.fromClass(containerClass, engineIdStringToUniqueId(engineDescriptor.getUniqueId()));
TestDescriptor parentDescriptor = resolveAndReturnParentTestable(containerTestable);
NestedClassTestDescriptor descriptor = getOrCreateNestedClassDescriptor(testClass, uniqueId);
parentDescriptor.addChild(descriptor);
Expand All @@ -153,7 +154,7 @@ private void resolveContainedTestMethods(Class<?> testClass, AbstractTestDescrip
ReflectionUtils.MethodSortOrder.HierarchyDown);
for (Method method : testMethodCandidates) {
JUnit5Testable methodTestable = JUnit5Testable.fromMethod(method, testClass,
engineDescriptor.getUniqueId());
engineIdStringToUniqueId(engineDescriptor.getUniqueId()));
MethodTestDescriptor methodDescriptor = getOrCreateMethodDescriptor(testClass, method,
methodTestable.getUniqueId());
parentDescriptor.addChild(methodDescriptor);
Expand All @@ -163,29 +164,33 @@ private void resolveContainedTestMethods(Class<?> testClass, AbstractTestDescrip
private void resolveContainedNestedClasses(Class<?> clazz) {
List<Class<?>> nestedClasses = findNestedClasses(clazz, isNestedTestClass);
for (Class<?> nestedClass : nestedClasses) {
JUnit5Testable nestedClassTestable = JUnit5Testable.fromClass(nestedClass, engineDescriptor.getUniqueId());
JUnit5Testable nestedClassTestable = JUnit5Testable.fromClass(nestedClass, engineIdStringToUniqueId(engineDescriptor.getUniqueId()));
resolveTestable(nestedClassTestable);
}
}

private MethodTestDescriptor getOrCreateMethodDescriptor(Class<?> testClass, Method method, String uniqueId) {
private MethodTestDescriptor getOrCreateMethodDescriptor(Class<?> testClass, Method method, UniqueId uniqueId) {
return (MethodTestDescriptor) descriptorByUniqueId(uniqueId).orElseGet(
() -> new MethodTestDescriptor(uniqueId, testClass, method));
() -> new MethodTestDescriptor(uniqueId.getUniqueString(), testClass, method));
}

private NestedClassTestDescriptor getOrCreateNestedClassDescriptor(Class<?> clazz, String uniqueId) {
private NestedClassTestDescriptor getOrCreateNestedClassDescriptor(Class<?> clazz, UniqueId uniqueId) {
return (NestedClassTestDescriptor) descriptorByUniqueId(uniqueId).orElseGet(
() -> new NestedClassTestDescriptor(uniqueId, clazz));
() -> new NestedClassTestDescriptor(uniqueId.getUniqueString(), clazz));
}

private JUnit5TestDescriptor getOrCreateClassDescriptor(Class<?> clazz, String uniqueId) {
private JUnit5TestDescriptor getOrCreateClassDescriptor(Class<?> clazz, UniqueId uniqueId) {
return (JUnit5TestDescriptor) descriptorByUniqueId(uniqueId).orElseGet(
() -> new ClassTestDescriptor(uniqueId, clazz));
() -> new ClassTestDescriptor(uniqueId.getUniqueString(), clazz));
}

@SuppressWarnings("unchecked")
private Optional<TestDescriptor> descriptorByUniqueId(String uniqueId) {
return (Optional<TestDescriptor>) engineDescriptor.findByUniqueId(uniqueId);
private Optional<TestDescriptor> descriptorByUniqueId(UniqueId uniqueId) {
return (Optional<TestDescriptor>) engineDescriptor.findByUniqueId(uniqueId.getUniqueString());
}

private static UniqueId engineIdStringToUniqueId(String engineId) {
return UniqueId.forEngine("engine", engineId);
}

}
Expand Up @@ -10,11 +10,13 @@

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

import org.junit.gen5.engine.UniqueId;

class JUnit5Class extends JUnit5Testable {

private final Class<?> javaClass;

JUnit5Class(String uniqueId, Class<?> javaClass) {
JUnit5Class(UniqueId uniqueId, Class<?> javaClass) {
super(uniqueId);
this.javaClass = javaClass;
}
Expand Down
Expand Up @@ -12,13 +12,15 @@

import java.lang.reflect.Method;

import org.junit.gen5.engine.UniqueId;

class JUnit5Method extends JUnit5Testable {

private final Class<?> containerClass;

private final Method javaMethod;

JUnit5Method(String uniqueId, Method javaElement, Class<?> containerClass) {
JUnit5Method(UniqueId uniqueId, Method javaElement, Class<?> containerClass) {
super(uniqueId);
this.javaMethod = javaElement;
this.containerClass = containerClass;
Expand Down
Expand Up @@ -10,11 +10,13 @@

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

import org.junit.gen5.engine.UniqueId;

class JUnit5NestedClass extends JUnit5Class {

private final Class<?> containerClass;

JUnit5NestedClass(String uniqueId, Class<?> javaClass, Class<?> containerClass) {
JUnit5NestedClass(UniqueId uniqueId, Class<?> javaClass, Class<?> containerClass) {
super(uniqueId, javaClass);
this.containerClass = containerClass;
}
Expand Down

0 comments on commit ef886b5

Please sign in to comment.