package restx.common; import static org.assertj.core.api.Assertions.assertThat; import static restx.common.MoreClasses.getInheritedClasses; import org.junit.Test; import java.io.Closeable; import java.io.Externalizable; import java.io.FileOutputStream; import java.io.Flushable; import java.io.OutputStream; import java.io.Serializable; import java.util.AbstractCollection; import java.util.AbstractList; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.RandomAccess; /** * Test cases for {@link MoreClasses} * * @author apeyrard */ public class MoreClassesTest { @Test public void should_not_find_inherited_classes_for_primitive_types() { assertThat(getInheritedClasses(void.class)).isEmpty(); assertThat(getInheritedClasses(int.class)).isEmpty(); assertThat(getInheritedClasses(double.class)).isEmpty(); } public static class DummyClass { } @Test public void should_at_least_find_Object_class_for_classes_without_explicit_inheritance() { assertThat(getInheritedClasses(DummyClass.class)).containsExactly(Object.class); } @Test public void should_work_for_interfaces() { assertThat(getInheritedClasses(Externalizable.class)).containsExactly(Serializable.class); } @Test public void should_find_inherited_interfaces() { assertThat(getInheritedClasses(Number.class)).containsOnly(Serializable.class, Object.class); assertThat(getInheritedClasses(AbstractCollection.class)).containsOnly(Collection.class, Iterable.class, Object.class); } public static class A { } public static class B extends A { } public static class C extends B { } @Test public void should_find_inherited_super_classes() { assertThat(getInheritedClasses(B.class)).containsOnly(A.class, Object.class); assertThat(getInheritedClasses(C.class)).containsOnly(B.class, A.class, Object.class); } @Test public void should_find_superclasses_and_interfaces() { assertThat(getInheritedClasses(ArrayList.class)).containsOnly( AbstractList.class, AbstractCollection.class, Object.class, List.class, Collection.class, Iterable.class, Serializable.class, RandomAccess.class, Cloneable.class ); assertThat(getInheritedClasses(FileOutputStream.class)).containsOnly( OutputStream.class, Object.class, Closeable.class, AutoCloseable.class, Flushable.class ); } }