package de.is24.deadcode4j; import de.is24.deadcode4j.analyzer.AnalyzerAdapter; import de.is24.deadcode4j.junit.FileLoader; import de.is24.deadcode4j.junit.LoggingRule; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import javax.annotation.Nonnull; import java.io.File; import java.util.List; import static com.google.common.collect.Lists.newArrayList; import static com.google.common.collect.Sets.newHashSet; import static de.is24.deadcode4j.ModuleBuilder.givenModule; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.*; public final class A_DeadCodeFinder { @Rule public final LoggingRule enableLogging = new LoggingRule(); private DeadCodeFinder objectUnderTest; @Before public void setUpObjectUnderTest() { createObjectUnderTest(); } @Test public void callsFinishAnalysisForEachModule() { final List<Module> reportedModules = newArrayList(); createObjectUnderTest(new AnalyzerAdapter() { @Override public void doAnalysis(@Nonnull AnalysisContext analysisContext, @Nonnull File fileName) { } @Override public void finishAnalysis(@Nonnull AnalysisContext analysisContext) { reportedModules.add(analysisContext.getModule()); } }); Module a = givenModule("A"); Module b = givenModule("B"); objectUnderTest.findDeadCode(newArrayList(a, b)); assertThat(reportedModules, hasItems(a, b)); } @Test public void callsFinishAnalysisForProject() { createObjectUnderTest(new AnalyzerAdapter() { @Override public void doAnalysis(@Nonnull AnalysisContext analysisContext, @Nonnull File fileName) { } @Override public void finishAnalysis(@Nonnull AnalysisSink analysisSink, @Nonnull AnalyzedCode analyzedCode) { analysisSink.addAnalyzedClass("A"); analysisSink.addException(AnalysisStage.DEADCODE_ANALYSIS); } }); DeadCode deadCode = objectUnderTest.findDeadCode(newArrayList(givenModule("A"), givenModule("B"))); assertThat(deadCode.getAnalyzedClasses(), contains("A")); assertThat(deadCode.getStagesWithExceptions(), contains(AnalysisStage.DEADCODE_ANALYSIS)); } @Test public void computesDeadCode() { createObjectUnderTest(new AnalyzerAdapter() { @Override public void doAnalysis(@Nonnull AnalysisContext analysisContext, @Nonnull File fileName) { analysisContext.addAnalyzedClass(fileName.getName()); } }); DeadCode deadCode = objectUnderTest.findDeadCode(newArrayList(givenModule("A", FileLoader.getFile(".")))); assertThat(deadCode, is(notNullValue())); assertThat("Working directory should contain several files!", deadCode.getAnalyzedClasses(), hasSize(greaterThan(0))); assertThat("As no valid analyzer is set up, everything should be dead!", deadCode.getDeadClasses(), hasSize(greaterThan(0))); } private void createObjectUnderTest(Analyzer... analyzers) { this.objectUnderTest = new DeadCodeFinder(new DeadCodeComputer(), newHashSet(analyzers)); } }