package de.is24.deadcode4j.analyzer; import org.junit.Test; public final class An_InterfacesAnalyzer extends AByteCodeAnalyzer<InterfacesAnalyzer> { @Override protected InterfacesAnalyzer createAnalyzer() { return new InterfacesAnalyzer("junit", "java.lang.Cloneable") { }; } @Test public void reportsImplementingClassAsBeingUsed() { objectUnderTest = new InterfacesAnalyzer("junit", "java.lang.Cloneable", "java.io.Serializable") { }; analyzeFile("ClassImplementingCloneable.class"); analyzeFile("DeadServlet.class"); assertThatDependenciesAreReported("ClassImplementingCloneable", "DeadServlet"); } @Test public void doesNotReportNonImplementingClassAsBeingUsed() { analyzeFile("ClassImplementingCloneable.class"); analyzeFile("DeadServlet.class"); assertThatDependenciesAreReported("ClassImplementingCloneable"); } @Test public void reportsSubClassImplementingClassAsBeingUsed() { objectUnderTest = new InterfacesAnalyzer("junit", "java.lang.Runnable") { }; analyzeFile("SubClassThatShouldBeLive.class"); assertThatDependenciesAreReported("SubClassThatShouldBeLive"); } @Test public void reportsClassImplementingSubInterfaceAsBeingUsed() { objectUnderTest = new InterfacesAnalyzer("junit", "java.io.Serializable") { }; analyzeFile("ClassImplementingExternalizable.class"); analyzeFile("SubClassOfClassImplementingExternalizable.class"); assertThatDependenciesAreReported( "ClassImplementingExternalizable", "SubClassOfClassImplementingExternalizable"); } }