package ser; import java.io.Serializable; import java.util.Arrays; import org.junit.Test; import static org.junit.Assert.*; import static org.nustaq.serialization.FSTClazzLineageInfo.*; /** * Created by odd on 2017-03-09. */ public class LineageTest { public static class O {} public static class OO extends O {} public interface I {} public interface II extends I {} public static class OIO extends O implements I {} public static class OIOO extends OIO {} public static class OIOOIO extends OIOO implements I {} public static class OIOIIO extends OIO implements II {} public static class OIOOIIO extends OIOO implements II {} @Test public void testSpecificity() { assertSpecificity(null, 0); assertSpecificity(Object.class, 0); assertSpecificity(Serializable.class, 1); assertSpecificity(String.class, 4); assertSpecificity(O.class, 1); assertSpecificity(OO.class, 2); assertSpecificity(I.class, 1); assertSpecificity(II.class, 2); assertSpecificity(OIO.class, 3); assertSpecificity(OIOO.class, 4); assertSpecificity(OIOOIO.class, 6); assertSpecificity(OIOIIO.class, 6); assertSpecificity(OIOOIIO.class, 7); } @Test public void testLineage() { assertLineage(null); assertLineage(Object.class, Object.class); assertLineage(Serializable.class, Serializable.class); assertLineage(String.class, String.class, Serializable.class, Comparable.class, CharSequence.class, Object.class); assertLineage(O.class, O.class, Object.class); assertLineage(OO.class, OO.class, O.class, Object.class); assertLineage(I.class, I.class); assertLineage(II.class, II.class, I.class); assertLineage(OIO.class, OIO.class, O.class, I.class, Object.class); assertLineage(OIOO.class, OIOO.class, OIO.class, O.class, I.class, Object.class); assertLineage(OIOOIO.class, OIOOIO.class, OIOO.class, OIO.class, O.class, I.class, Object.class); assertLineage(OIOIIO.class, OIOIIO.class, OIO.class, II.class, O.class, I.class, Object.class); assertLineage(OIOOIIO.class, OIOOIIO.class, OIOO.class, OIO.class, II.class, O.class, I.class, Object.class); } private void assertSpecificity(final Class<?> clazz, final int expected) { assertEquals(clazz != null ? clazz.getSimpleName() : "null" + " is " + expected, expected, getSpecificity(clazz)); } private void assertLineage(final Class<?> clazz, final Class<?>... expected) { assertArrayEquals(clazz != null ? clazz.getSimpleName() : "null" + " is " + Arrays.toString(expected), expected, getLineage(clazz)); } }