package de.is24.deadcode4j.plugin.packaginghandler; import de.is24.deadcode4j.Repository; import de.is24.deadcode4j.junit.FileLoader; import de.is24.deadcode4j.junit.LoggingRule; import org.apache.commons.io.DirectoryWalker; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.testing.stubs.MavenProjectStub; import org.apache.maven.project.MavenProject; import org.hamcrest.Matchers; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.io.File; import java.io.IOException; import java.util.Collection; import static com.google.common.collect.Lists.newArrayList; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.*; public final class A_PackagingHandler { @Rule public final LoggingRule enableLogging = new LoggingRule(); private PackagingHandler objectUnderTest; @Before public void setUp() throws Exception { objectUnderTest = new PackagingHandler() { @Nullable @Override public Repository getOutputRepositoryFor(@Nonnull MavenProject project) throws MojoExecutionException { return null; } @Nonnull @Override public Iterable<Repository> getAdditionalRepositoriesFor(@Nonnull MavenProject project) throws MojoExecutionException { return getJavaFilesOfCompileSourceRootsAsRepositories(project); } }; } @Test public void addsNoRepositoryIfThereAreNoCompileSourceRoots() throws MojoExecutionException { MavenProjectStub mavenProject = new MavenProjectStub(); mavenProject.setCompileSourceRoots(null); Iterable<Repository> repositories = objectUnderTest.getAdditionalRepositoriesFor(mavenProject); assertThat(repositories, is(emptyIterable())); } @Test public void addsCompileSourceRootsAsCodeRepositories() throws MojoExecutionException, IOException { MavenProject mavenProject = new MavenProject(); mavenProject.getCompileSourceRoots().add(directoryThisClassIsLocated()); Iterable<Repository> repositories = objectUnderTest.getAdditionalRepositoriesFor(mavenProject); assertThat(repositories, is(Matchers.<Repository>iterableWithSize(1))); Repository repository = repositories.iterator().next(); Collection<String> results = getFileNames(repository); assertThat(results, hasItem(getClass().getSimpleName() + ".java")); } @Test public void addsCompileSourceRootsOnlyIfTheyExist() throws MojoExecutionException, IOException { MavenProject mavenProject = new MavenProject(); mavenProject.getCompileSourceRoots().add("thisDirectory/is/so/never/going/to/exist"); Iterable<Repository> repositories = objectUnderTest.getAdditionalRepositoriesFor(mavenProject); assertThat(repositories, is(emptyIterable())); } private String directoryThisClassIsLocated() { return FileLoader.getFile("../../src/test/java/de/is24/deadcode4j/plugin/packaginghandler").getAbsolutePath(); } private Collection<String> getFileNames(final Repository repository) throws IOException { return new DirectoryWalker<String>(repository.getFileFilter(), -1) { @Override protected void handleFile(File file, int depth, Collection<String> results) throws IOException { if (file.isFile()) { results.add(file.getName()); } } public Collection<String> go(File directory) throws IOException { Collection<String> results = newArrayList(); super.walk(directory, results); return results; } }.go(repository.getDirectory()); } }