package de.flower.common.util; import com.google.common.collect.Lists; import org.testng.annotations.Test; import java.util.List; import static org.testng.Assert.*; /** * @author flowerrrr */ public class ClazzTest { @Test public void testGetCallingClassStatic() { class A { public Class<?> callingClass; public A() { callingClass = Clazz.getCallingClassStatic(A.class); } } ; class B extends A { public B() { callingClass = Clazz.getCallingClassStatic(B.class); } } ; class C extends B { public C() { callingClass = Clazz.getCallingClassStatic(C.class); } } assertEquals(new A().callingClass, ClazzTest.class); assertEquals(new B().callingClass, ClazzTest.class); assertEquals(new C().callingClass, ClazzTest.class); } @Test public void testGetThisClassStatic() { class A { public Class<?> thisClass; public A() { thisClass = Clazz.getThisClassStatic(A.class); } } ; class B extends A { public B() { } } ; class C extends B { public C() { } } class D extends A { public Class<?> innerThisClass; public D() { innerThisClass = new C().thisClass; } } assertEquals(new A().thisClass, A.class); assertEquals(new B().thisClass, B.class); assertEquals(new C().thisClass, C.class); assertEquals(new D().innerThisClass, C.class); } @Test public void testIsAnonymousClass() { Object o = new Object(); assertFalse(Clazz.isAnonymousClass(o.getClass())); o = new Object() { }; assertTrue(Clazz.isAnonymousClass(o.getClass())); assertFalse(Clazz.isAnonymousClass(InnerStaticClass.class)); assertFalse(Clazz.isAnonymousClass(InnerClass.class)); } @Test public void testGetSuperClass() { Object o = new Object() { }; o.getClass().getSuperclass(); assertTrue(Clazz.isAnonymousClass(o.getClass())); assertEquals(Clazz.getSuperClass(o.getClass()), Object.class); } @Test public void testGetShortName() { assertEquals(Clazz.getShortName(String.class), "String"); assertEquals(Clazz.getShortName(new Object() { }.getClass()), "ClazzTest$3"); assertEquals(Clazz.getShortName(InnerStaticClass.class), "InnerStaticClass"); assertEquals(Clazz.getShortName(InnerClass.class), "InnerClass"); } @Test public void testGetClassList() { class A { }; class B extends A { } ; class C { } B clazz = new B() { }; List<Class<?>> classes = Clazz.getClassList(B.class, A.class); assertEquals(classes, Lists.newArrayList(B.class, A.class), classes.toString()); classes = Clazz.getClassList(C.class, Object.class); assertEquals(classes, Lists.newArrayList(C.class, Object.class), classes.toString()); classes = Clazz.getClassList(clazz.getClass(), A.class); assertEquals(classes, Lists.newArrayList(clazz.getClass(), B.class, A.class), classes.toString()); try { Clazz.getClassList(C.class, A.class); fail(); } catch (IllegalArgumentException e) { // what we expect } } public static class InnerStaticClass { } public class InnerClass { } }