// Copyright © 2011-2013, Esko Luontola <www.orfjackal.net>
// This software is released under the Apache License 2.0.
// The license text is at http://www.apache.org/licenses/LICENSE-2.0
package fi.jumi.core.discovery;
import fi.jumi.actors.ActorRef;
import fi.jumi.core.api.TestFile;
import fi.jumi.core.discovery.dummies.DummyTest;
import org.junit.Test;
import java.net.*;
import java.nio.file.*;
import static org.mockito.Mockito.*;
public class PathMatcherTestFileFinderTest {
private final Path classesDirectory = getClassesDirectory(DummyTest.class);
private final TestFileFinderListener listener = mock(TestFileFinderListener.class);
@Test
public void finds_all_classes_from_a_directory_matching_a_pattern() {
PathMatcher matcher = classesDirectory.getFileSystem().getPathMatcher("glob:fi/jumi/core/discovery/dummies/*Test.class");
PathMatcherTestFileFinder finder = new PathMatcherTestFileFinder(matcher, classesDirectory);
finder.findTestFiles(ActorRef.wrap(listener));
verify(listener).onTestFileFound(TestFile.fromPath(Paths.get("fi/jumi/core/discovery/dummies/DummyTest.class")));
verify(listener).onTestFileFound(TestFile.fromPath(Paths.get("fi/jumi/core/discovery/dummies/AnotherDummyTest.class")));
verify(listener).onAllTestFilesFound();
verifyNoMoreInteractions(listener);
}
@Test
public void does_nothing_when_finds_no_matches() {
PathMatcher matcher = classesDirectory.getFileSystem().getPathMatcher("glob:NoMatches");
PathMatcherTestFileFinder finder = new PathMatcherTestFileFinder(matcher, classesDirectory);
finder.findTestFiles(ActorRef.wrap(listener));
verify(listener).onAllTestFilesFound();
verifyNoMoreInteractions(listener);
}
private static Path getClassesDirectory(Class<?> clazz) {
try {
URL classFile = clazz.getResource(clazz.getSimpleName() + ".class");
Path path = Paths.get(classFile.toURI());
int directoryDepth = clazz.getName().split("\\.").length;
for (int i = 0; i < directoryDepth; i++) {
path = path.getParent();
}
return path;
} catch (URISyntaxException e) {
throw new RuntimeException(e);
}
}
}