package de.is24.deadcode4j.analyzer;
import org.junit.Test;
public final class A_TypeErasureAnalyzer extends AnAnalyzer<TypeErasureAnalyzer> {
@Override
protected TypeErasureAnalyzer createAnalyzer() {
return new TypeErasureAnalyzer();
}
@Test
public void recognizesClassTypeParameter() {
analyzeFile("../../src/test/java/de/is24/deadcode4j/analyzer/typeerasure/TypedArrayList.java");
assertThatDependenciesAreReportedFor("de.is24.deadcode4j.analyzer.typeerasure.TypedArrayList",
"java.lang.Comparable",
"java.math.BigDecimal",
"java.util.ResourceBundle$Control",
"java.util.Map$Entry",
"java.util.regex.Pattern",
"de.is24.deadcode4j.analyzer.typeerasure.TypedArrayList$InnerClass");
assertThatDependenciesAreReportedFor("de.is24.deadcode4j.analyzer.typeerasure.TypedArrayList$InnerClass",
"de.is24.deadcode4j.analyzer.typeerasure.PackageClass");
assertThatDependenciesAreReportedFor("de.is24.deadcode4j.analyzer.typeerasure.TypedArrayList$SecondInnerClass",
"de.is24.deadcode4j.analyzer.typeerasure.TypedArrayList$InnerClass$NestedInnerClass");
}
@Test
public void recognizesDefaultPackageReference() {
analyzeFile("../../src/test/java/ClassWithTypeArgument.java");
assertThatDependenciesAreReportedFor("ClassWithTypeArgument",
"TypeParameterClass");
}
@Test
public void recognizesLowerBoundOfWildCard() {
analyzeFile("../../src/test/java/de/is24/deadcode4j/analyzer/typeerasure/ClassWithLowerBoundedWildCard.java");
assertThatDependenciesAreReportedFor("de.is24.deadcode4j.analyzer.typeerasure.ClassWithLowerBoundedWildCard",
"java.util.Collection");
}
@Test
public void recognizesUpperBoundOfWildCard() {
analyzeFile("../../src/test/java/de/is24/deadcode4j/analyzer/typeerasure/ClassWithUpperBoundedWildCard.java");
assertThatDependenciesAreReportedFor("de.is24.deadcode4j.analyzer.typeerasure.ClassWithUpperBoundedWildCard",
"java.util.Collection");
}
@Test
public void recognizesInheritedType() {
analyzeFile("../../src/test/java/de/is24/deadcode4j/analyzer/typeerasure/ClassWithInheritedType.java");
assertThatDependenciesAreReportedFor("de.is24.deadcode4j.analyzer.typeerasure.ClassWithInheritedType",
"de.is24.deadcode4j.analyzer.typeerasure.TypedArrayList$InnerClass");
assertThatDependenciesAreReportedFor("de.is24.deadcode4j.analyzer.typeerasure.ClassWithInheritedType$Inner",
"de.is24.deadcode4j.analyzer.typeerasure.TypedArrayList$InnerClass$NestedInnerClass");
assertThatDependenciesAreReportedFor("de.is24.deadcode4j.analyzer.typeerasure.ClassWithInheritedType$Inner$Core",
"de.is24.deadcode4j.junit.SomeInterface$InnerType");
}
@Test
public void recognizesAnonymousClasses() {
analyzeFile("../../src/test/java/de/is24/deadcode4j/analyzer/typeerasure/ClassWithAnonymousClasses.java");
assertThatDependenciesAreReportedFor("de.is24.deadcode4j.analyzer.typeerasure.ClassWithAnonymousClasses$1",
"java.lang.String");
assertThatDependenciesAreReportedFor("de.is24.deadcode4j.analyzer.typeerasure.ClassWithAnonymousClasses$1$1",
"java.lang.Integer");
assertThatDependenciesAreReportedFor("de.is24.deadcode4j.analyzer.typeerasure.ClassWithAnonymousClasses$1$2",
"de.is24.deadcode4j.junit.SomeInterface");
assertThatDependenciesAreReportedFor(
"de.is24.deadcode4j.analyzer.typeerasure.ClassWithAnonymousClasses$1$1AnonymousInner",
"java.lang.String");
assertThatDependenciesAreReportedFor("de.is24.deadcode4j.analyzer.typeerasure.ClassWithAnonymousClasses$2",
"java.util.Set");
}
@Test
public void recognizesLambdaMethodReference() {
analyzeFile("../../src/test/resources/de/is24/deadcode4j/java8/Lambda.java");
assertThatDependenciesAreReportedFor("de.is24.deadcode4j.java8.Lambda", "java.lang.String");
}
@Test
public void gracefullyHandlesIrrelevantTypes() {
analyzeFile("../../src/test/java/de/is24/deadcode4j/analyzer/typeerasure/ClassWithTypesThatShouldNotBeRecognized.java");
assertThatNoDependenciesAreReported();
}
}