package de.is24.deadcode4j.analyzer; import com.google.common.collect.Sets; import de.is24.deadcode4j.DeadCodeComputer; import de.is24.deadcode4j.junit.LoggingRule; import org.apache.maven.plugin.logging.Log; import org.junit.Test; import static org.mockito.Mockito.verify; public class An_IgnoreClassesAnalyzer extends AByteCodeAnalyzer<IgnoreClassesAnalyzer> { private Log logMock; @Override public LoggingRule enableLogging() { logMock = LoggingRule.createMock(); return new LoggingRule(logMock); } @Override protected IgnoreClassesAnalyzer createAnalyzer() { return new IgnoreClassesAnalyzer(new DeadCodeComputer(), Sets.newHashSet("A", "C")); } @Test public void marksIgnoredClassAsLiveCode() throws Exception { analyzeFile("A.class"); doFinishAnalysis(); assertThatDependenciesAreReported("A"); } @Test public void doesNotMarkUnknownClassAsLiveCode() throws Exception { analyzeFile("B.class"); doFinishAnalysis(); assertThatNoDependenciesAreReported(); } @Test public void logsThatAClassWasIgnored() throws Exception { analyzeFile("A.class"); doFinishAnalysis(); verify(logMock).info("Ignoring 1 class(es) which seem(s) to be unused."); } @Test public void logsThatAnIgnoredClassDoesNotExist() throws Exception { analyzeFile("A.class"); doFinishAnalysis(); verify(logMock).warn("Class [C] should be ignored, but does not exist. You should remove the configuration entry."); } @Test public void logsThatAnIgnoredClassIsRequiredAnyway() throws Exception { analysisContext.addDependencies("B", "A"); analyzeFile("A.class"); doFinishAnalysis(); verify(logMock).warn("Class [A] should be ignored, but is not dead. You should remove the configuration entry."); } }