Skip to content

Commit

Permalink
Provide better names for the test plan specification
Browse files Browse the repository at this point in the history
- Moved factory methods from builder classes into interfaces and
  implementation classes
- Removed builder classes

Issue: #116
  • Loading branch information
bechte committed Jan 18, 2016
1 parent 1295e3f commit e99b163
Show file tree
Hide file tree
Showing 50 changed files with 344 additions and 538 deletions.
Expand Up @@ -11,19 +11,19 @@
package org.junit.gen5.console.tasks;

import static java.util.stream.Collectors.toSet;
import static org.junit.gen5.engine.discoveryrequest.dsl.ClasspathSelectorBuilder.byPaths;
import static org.junit.gen5.engine.discoveryrequest.dsl.DiscoveryRequestBuilder.request;
import static org.junit.gen5.engine.discoveryrequest.dsl.NameBasedSelectorBuilder.byNames;
import static org.junit.gen5.engine.ClasspathSelector.forPaths;
import static org.junit.gen5.engine.DiscoveryRequestBuilder.request;
import static org.junit.gen5.engine.NameBasedSelector.forNames;

import java.io.File;
import java.util.Set;

import org.junit.gen5.commons.util.Preconditions;
import org.junit.gen5.commons.util.ReflectionUtils;
import org.junit.gen5.console.options.CommandLineOptions;
import org.junit.gen5.engine.ClassFilter;
import org.junit.gen5.engine.DiscoveryRequest;
import org.junit.gen5.engine.discoveryrequest.dsl.ClassFilterBuilder;
import org.junit.gen5.engine.discoveryrequest.dsl.TagFilterBuilder;
import org.junit.gen5.engine.TagFilter;

class DiscoveryRequestCreator {
DiscoveryRequest toDiscoveryRequest(CommandLineOptions options) {
Expand All @@ -41,7 +41,7 @@ private DiscoveryRequest buildDiscoveryRequest(CommandLineOptions options) {

private DiscoveryRequest buildDiscoveryRequestForAllTests(CommandLineOptions options) {
Set<File> rootDirectoriesToScan = determineClasspathRootDirectories(options);
return request().select(byPaths(rootDirectoriesToScan)).build();
return request().select(forPaths(rootDirectoriesToScan)).build();
}

private Set<File> determineClasspathRootDirectories(CommandLineOptions options) {
Expand All @@ -53,16 +53,16 @@ private Set<File> determineClasspathRootDirectories(CommandLineOptions options)

private DiscoveryRequest buildNameBasedDiscoveryRequest(CommandLineOptions options) {
Preconditions.notEmpty(options.getArguments(), "No arguments given");
return request().select(byNames(options.getArguments())).build();
return request().select(forNames(options.getArguments())).build();
}

private void applyFilters(DiscoveryRequest discoveryRequest, CommandLineOptions options) {
options.getClassnameFilter().ifPresent(regex -> discoveryRequest.addFilter(ClassFilterBuilder.pattern(regex)));
options.getClassnameFilter().ifPresent(regex -> discoveryRequest.addFilter(ClassFilter.byNamePattern(regex)));
if (!options.getTagsFilter().isEmpty()) {
discoveryRequest.addPostFilter(TagFilterBuilder.includeTags(options.getTagsFilter()));
discoveryRequest.addPostFilter(TagFilter.includeTags(options.getTagsFilter()));
}
if (!options.getExcludeTags().isEmpty()) {
discoveryRequest.addPostFilter(TagFilterBuilder.excludeTags(options.getExcludeTags()));
discoveryRequest.addPostFilter(TagFilter.excludeTags(options.getExcludeTags()));
}
}
}
Expand Up @@ -11,4 +11,7 @@
package org.junit.gen5.engine;

public interface ClassFilter extends DiscoveryFilter<Class<?>> {
static ClassFilter byNamePattern(String pattern) {
return new ClassNameFilter(pattern);
}
}
Expand Up @@ -8,7 +8,7 @@
* http://www.eclipse.org/legal/epl-v10.html
*/

package org.junit.gen5.engine.discoveryrequest;
package org.junit.gen5.engine;

import static org.junit.gen5.engine.FilterResult.excluded;
import static org.junit.gen5.engine.FilterResult.included;
Expand All @@ -18,11 +18,14 @@
import org.junit.gen5.engine.ClassFilter;
import org.junit.gen5.engine.FilterResult;

public class ClassNameFilter implements ClassFilter {
/**
* @since 5.0
*/
class ClassNameFilter implements ClassFilter {
private final Pattern pattern;

public ClassNameFilter(String regex) {
this.pattern = Pattern.compile(regex);
ClassNameFilter(String pattern) {
this.pattern = Pattern.compile(pattern);
}

@Override
Expand Down
Expand Up @@ -8,16 +8,17 @@
* http://www.eclipse.org/legal/epl-v10.html
*/

package org.junit.gen5.engine.discoveryrequest.dsl;
package org.junit.gen5.engine;

import org.junit.gen5.commons.util.PreconditionViolationException;
import org.junit.gen5.commons.util.ReflectionUtils;
import org.junit.gen5.engine.discoveryrequest.ClassSelector;
import org.junit.gen5.engine.DiscoverySelector;
import org.junit.gen5.engine.DiscoverySelectorVisitor;

/**
* @since 5.0
*/
public class ClassSelectorBuilder {
public class ClassSelector implements DiscoverySelector {
public static ClassSelector forClass(Class<?> testClass) {
return new ClassSelector(testClass);
}
Expand All @@ -26,4 +27,19 @@ public static ClassSelector forClassName(String className) {
return forClass(ReflectionUtils.loadClass(className).orElseThrow(
() -> new PreconditionViolationException("Could not resolve class with name: " + className)));
}

private final Class<?> testClass;

private ClassSelector(Class<?> testClass) {
this.testClass = testClass;
}

@Override
public void accept(DiscoverySelectorVisitor visitor) {
visitor.visitClass(testClass);
}

public Class<?> getTestClass() {
return testClass;
}
}
Expand Up @@ -8,9 +8,14 @@
* http://www.eclipse.org/legal/epl-v10.html
*/

package org.junit.gen5.engine.discoveryrequest;
package org.junit.gen5.engine;

import static java.util.Collections.singleton;

import java.io.File;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

import org.junit.gen5.engine.DiscoverySelector;
import org.junit.gen5.engine.DiscoverySelectorVisitor;
Expand All @@ -19,9 +24,22 @@
* @since 5.0
*/
public class ClasspathSelector implements DiscoverySelector {
public static List<DiscoverySelector> forPath(String path) {
return forPaths(singleton(new File(path)));
}

public static List<DiscoverySelector> forPaths(Set<File> paths) {
// @formatter:off
return paths.stream()
.filter(File::exists)
.map(ClasspathSelector::new)
.collect(Collectors.toList());
// @formatter:on
}

private final File classpathRoot;

public ClasspathSelector(File classpathRoot) {
private ClasspathSelector(File classpathRoot) {
this.classpathRoot = classpathRoot;
}

Expand Down
Expand Up @@ -8,55 +8,46 @@
* http://www.eclipse.org/legal/epl-v10.html
*/

package org.junit.gen5.engine.discoveryrequest.dsl;
package org.junit.gen5.engine;

import static java.lang.String.format;
import static java.util.Arrays.asList;
import static java.util.stream.Collectors.joining;

import java.util.Collection;
import java.util.StringJoiner;
import java.util.stream.Collectors;

import org.junit.gen5.engine.DiscoveryFilter;
import org.junit.gen5.engine.DiscoveryRequest;
import org.junit.gen5.engine.FilterResult;

/**
* A collection of common builders for {@link DiscoveryRequest} elements.
*
* @since 5.0
*/
public class CommonBuilder {
public static <T> DiscoveryFilter<T> alwaysIncluded() {
return (any) -> FilterResult.included("Always included");
}

public static <T> DiscoveryFilter<T> alwaysExcluded() {
return (any) -> FilterResult.excluded("Always excluded");
}

public static <T> DiscoveryFilter<T> allOf(DiscoveryFilter<T>... filters) {
class CommonFilter {
@SafeVarargs
public static <T> DiscoveryFilter<T> combine(DiscoveryFilter<T>... filters) {
if (filters == null) {
return alwaysIncluded();
}
else {
return allOf(asList(filters));
return combine(asList(filters));
}
}

public static <T> DiscoveryFilter<T> allOf(Collection<DiscoveryFilter<T>> filters) {
public static <T> DiscoveryFilter<T> combine(Collection<DiscoveryFilter<T>> filters) {
if (filters == null || filters.isEmpty()) {
return alwaysIncluded();
}
else if (filters.size() == 1) {
return filters.iterator().next();
}
else {
return new AndAllDiscoveryFilter(filters);
return new AndAllDiscoveryFilter<>(filters);
}
}

private static <T> DiscoveryFilter<T> alwaysIncluded() {
return (any) -> FilterResult.included("Always included");
}

private static class AndAllDiscoveryFilter<T> implements DiscoveryFilter<T> {
private final Collection<DiscoveryFilter<T>> filters;

Expand Down
Expand Up @@ -8,18 +8,12 @@
* http://www.eclipse.org/legal/epl-v10.html
*/

package org.junit.gen5.engine.discoveryrequest.dsl;
package org.junit.gen5.engine;

import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;

import org.junit.gen5.engine.DiscoveryFilter;
import org.junit.gen5.engine.DiscoveryRequest;
import org.junit.gen5.engine.DiscoverySelector;
import org.junit.gen5.engine.EngineIdFilter;
import org.junit.gen5.engine.PostDiscoveryFilter;

/**
* The {@code DiscoveryRequestBuilder} provides a light-weight DSL for
* generating a {@link DiscoveryRequest}.
Expand Down Expand Up @@ -50,7 +44,6 @@
* </pre>
*/
public final class DiscoveryRequestBuilder {

private List<DiscoverySelector> selectors = new LinkedList<>();
private List<EngineIdFilter> engineIdFilters = new LinkedList<>();
private List<DiscoveryFilter<?>> filters = new LinkedList<>();
Expand Down
Expand Up @@ -22,9 +22,13 @@
* @see DiscoveryRequest
*/
public class EngineIdFilter implements GenericFilter<String> {
public static EngineIdFilter byEngineId(String engineId) {
return new EngineIdFilter(engineId);
}

private final String engineId;

public EngineIdFilter(String engineId) {
private EngineIdFilter(String engineId) {
this.engineId = engineId;
}

Expand Down
Expand Up @@ -10,6 +10,10 @@

package org.junit.gen5.engine;

import static java.util.Arrays.asList;

import java.util.Collection;

/**
* {@code GenericFilter} filters particular tests during and after test discovery.
*
Expand Down
@@ -0,0 +1,66 @@
/*
* Copyright 2015-2016 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;

import java.lang.reflect.Method;

import org.junit.gen5.commons.util.ReflectionUtils;
import org.junit.gen5.engine.DiscoverySelector;
import org.junit.gen5.engine.DiscoverySelectorVisitor;

/**
* @since 5.0
*/
public class MethodSelector implements DiscoverySelector {
public static MethodSelector forMethod(String testClassName, String testMethodName) {
Class<?> testClass = getTestClass(testClassName);
Method testMethod = getTestMethod(testClass, testMethodName);
return forMethod(testClass, testMethod);
}

public static MethodSelector forMethod(Class<?> testClass, String testMethodName) {
Method testMethod = getTestMethod(testClass, testMethodName);
return forMethod(testClass, testMethod);
}

public static MethodSelector forMethod(Class<?> testClass, Method testMethod) {
return new MethodSelector(testClass, testMethod);
}

private final Class<?> testClass;
private final Method testMethod;

private MethodSelector(Class<?> testClass, Method testMethod) {
this.testClass = testClass;
this.testMethod = testMethod;
}

@Override
public void accept(DiscoverySelectorVisitor visitor) {
visitor.visitMethod(testClass, testMethod);
}

public Class<?> getTestClass() {
return testClass;
}

public Method getTestMethod() {
return testMethod;
}

private static Class<?> getTestClass(String testClassName) {
return ReflectionUtils.loadClass(testClassName).get();
}

private static Method getTestMethod(Class<?> testClass, String testMethodName) {
return ReflectionUtils.findMethod(testClass, testMethodName).get();
}
}

0 comments on commit e99b163

Please sign in to comment.