/* * Copyright 2015-2017 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.platform.engine.discovery; import static org.junit.platform.engine.FilterResult.excluded; import static org.junit.platform.engine.FilterResult.included; import java.util.function.Predicate; import java.util.regex.Pattern; import org.junit.platform.engine.FilterResult; /** * {@link ClassNameFilter} that matches fully qualified class names against * patterns in the form of regular expressions. * * <p>If the fully qualified name of a class matches against at least one * pattern, the class will be excluded. * * @since 1.0 */ class ExcludeClassNameFilter extends AbstractClassNameFilter { ExcludeClassNameFilter(String... patterns) { super(patterns); } @Override public FilterResult apply(String className) { return findMatchingPattern(className) // .map(pattern -> excluded(formatExclusionReason(className, pattern))) // .orElseGet(() -> included(formatInclusionReason(className))); } private String formatExclusionReason(String className, Pattern pattern) { return String.format("Class name [%s] matches excluded pattern: '%s'", className, pattern); } private String formatInclusionReason(String className) { return String.format("Class name [%s] does not match any excluded pattern: %s", className, patternDescription); } @Override public Predicate<String> toPredicate() { return className -> !findMatchingPattern(className).isPresent(); } @Override public String toString() { return "Excludes class names that match regular expression " + patternDescription; } }