Skip to content

Commit

Permalink
Extracted resolution process into SpecificationResolver (intermediate…
Browse files Browse the repository at this point in the history
… step)
  • Loading branch information
jlink committed Nov 1, 2015
1 parent 335180e commit ab5add2
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 26 deletions.
Expand Up @@ -28,6 +28,7 @@
import org.junit.gen5.engine.TestPlanSpecificationElement; import org.junit.gen5.engine.TestPlanSpecificationElement;
import org.junit.gen5.engine.UniqueIdSpecification; import org.junit.gen5.engine.UniqueIdSpecification;
import org.junit.gen5.engine.junit5.descriptor.ClassNameTestDescriptorResolver; import org.junit.gen5.engine.junit5.descriptor.ClassNameTestDescriptorResolver;
import org.junit.gen5.engine.junit5.descriptor.SpecificationResolver;
import org.junit.gen5.engine.junit5.descriptor.TestDescriptorResolver; import org.junit.gen5.engine.junit5.descriptor.TestDescriptorResolver;
import org.junit.gen5.engine.junit5.descriptor.TestDescriptorResolverRegistry; import org.junit.gen5.engine.junit5.descriptor.TestDescriptorResolverRegistry;
import org.junit.gen5.engine.junit5.descriptor.UniqueIdTestDescriptorResolver; import org.junit.gen5.engine.junit5.descriptor.UniqueIdTestDescriptorResolver;
Expand Down Expand Up @@ -55,36 +56,12 @@ public List<TestDescriptor> discoverTests(TestPlanSpecification specification, T
// Isolated this step to allow easier experimentation / branching / pull requesting // Isolated this step to allow easier experimentation / branching / pull requesting
private void resolveSpecification(TestPlanSpecification specification, TestDescriptor engineDescriptor, private void resolveSpecification(TestPlanSpecification specification, TestDescriptor engineDescriptor,
Set<TestDescriptor> testDescriptors) { Set<TestDescriptor> testDescriptors) {
TestDescriptorResolverRegistry testDescriptorResolverRegistry = createResolverRegistry(); SpecificationResolver resolver = new SpecificationResolver(testDescriptors, engineDescriptor);

for (TestPlanSpecificationElement element : specification) { for (TestPlanSpecificationElement element : specification) {
testDescriptors.addAll(resolveElement(testDescriptorResolverRegistry, engineDescriptor, element)); resolver.resolveElement(element);
} }
} }


@SuppressWarnings({ "rawtypes", "unchecked" })
private Set<TestDescriptor> resolveElement(TestDescriptorResolverRegistry testDescriptorResolverRegistry,
TestDescriptor root, TestPlanSpecificationElement element) {
Set<TestDescriptor> testDescriptors = new LinkedHashSet<>();
TestDescriptorResolver testDescriptorResolver = testDescriptorResolverRegistry.forType(element.getClass());
TestDescriptor descriptor = testDescriptorResolver.resolve(root, element);
//Get rid of null check
if (descriptor != null) {
testDescriptors.add(descriptor);
testDescriptors.addAll(testDescriptorResolver.resolveChildren(descriptor, element));
}
return testDescriptors;
}

private TestDescriptorResolverRegistry createResolverRegistry() {
// TODO Look up TestDescriptorResolverRegistry within the
// ApplicationExecutionContext
TestDescriptorResolverRegistry testDescriptorResolverRegistry = new TestDescriptorResolverRegistry();
testDescriptorResolverRegistry.addResolver(ClassNameSpecification.class, new ClassNameTestDescriptorResolver());
testDescriptorResolverRegistry.addResolver(UniqueIdSpecification.class, new UniqueIdTestDescriptorResolver());
return testDescriptorResolverRegistry;
}

@Override @Override
public boolean supports(TestDescriptor testDescriptor) { public boolean supports(TestDescriptor testDescriptor) {
// TODO Consider creating a superclass or marker interface for JUnit 5 test // TODO Consider creating a superclass or marker interface for JUnit 5 test
Expand Down
@@ -0,0 +1,60 @@
/*
* Copyright 2015 the original author or authors.
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License v1.0 which
* accompanies this distribution and is available at
*
* http://www.eclipse.org/legal/epl-v10.html
*/

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

import java.util.LinkedHashSet;
import java.util.Set;

import org.junit.gen5.engine.ClassNameSpecification;
import org.junit.gen5.engine.TestDescriptor;
import org.junit.gen5.engine.TestPlanSpecificationElement;
import org.junit.gen5.engine.UniqueIdSpecification;

public class SpecificationResolver {

private final Set testDescriptors;
private final TestDescriptor root;
private final TestDescriptorResolverRegistry resolverRegistry;

public SpecificationResolver(Set testDescriptors, TestDescriptor root) {
this.testDescriptors = testDescriptors;
this.root = root;
this.resolverRegistry = createResolverRegistry();
}

public void resolveElement(TestPlanSpecificationElement element) {
testDescriptors.addAll(resolveElement(resolverRegistry, root, element));
}

@SuppressWarnings({ "rawtypes", "unchecked" })
private Set<TestDescriptor> resolveElement(TestDescriptorResolverRegistry testDescriptorResolverRegistry,
TestDescriptor root, TestPlanSpecificationElement element) {
Set<TestDescriptor> testDescriptors = new LinkedHashSet<>();
TestDescriptorResolver testDescriptorResolver = testDescriptorResolverRegistry.forType(element.getClass());
TestDescriptor descriptor = testDescriptorResolver.resolve(root, element);
//Get rid of null check
if (descriptor != null) {
testDescriptors.add(descriptor);
testDescriptors.addAll(testDescriptorResolver.resolveChildren(descriptor, element));
}
return testDescriptors;
}

private TestDescriptorResolverRegistry createResolverRegistry() {
// TODO Look up TestDescriptorResolverRegistry within the
// ApplicationExecutionContext
TestDescriptorResolverRegistry testDescriptorResolverRegistry = new TestDescriptorResolverRegistry();
testDescriptorResolverRegistry.addResolver(ClassNameSpecification.class, new ClassNameTestDescriptorResolver());
testDescriptorResolverRegistry.addResolver(UniqueIdSpecification.class, new UniqueIdTestDescriptorResolver());
return testDescriptorResolverRegistry;
}

}

0 comments on commit ab5add2

Please sign in to comment.