|
@@ -0,0 +1,208 @@
|
|
|
|
|
+/*
|
|
|
|
|
+ * @author Ranides Atterwim <ranides@gmail.com>
|
|
|
|
|
+ * @copyright Ranides Atterwim
|
|
|
|
|
+ * @license WTFPL
|
|
|
|
|
+ * @url http://ranides.net/projects/assira
|
|
|
|
|
+ */
|
|
|
|
|
+package net.ranides.assira.reflection.impl;
|
|
|
|
|
+
|
|
|
|
|
+import java.util.Arrays;
|
|
|
|
|
+import java.util.List;
|
|
|
|
|
+import net.ranides.assira.annotations.Meta;
|
|
|
|
|
+import net.ranides.assira.reflection.IClass;
|
|
|
|
|
+import net.ranides.assira.reflection.IClasses;
|
|
|
|
|
+import net.ranides.assira.reflection.mockup.ForClassTraits;
|
|
|
|
|
+import org.junit.Test;
|
|
|
|
|
+import static net.ranides.assira.junit.NewAssert.*;
|
|
|
|
|
+import static net.ranides.assira.reflection.IAttribute.*;
|
|
|
|
|
+import net.ranides.assira.reflection.IMethod;
|
|
|
|
|
+import net.ranides.assira.reflection.mockup.ForMemberTraits;
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ *
|
|
|
|
|
+ * @author Ranides Atterwim <ranides@gmail.com>
|
|
|
|
|
+ */
|
|
|
|
|
+public class AClassesTest {
|
|
|
|
|
+
|
|
|
|
|
+ private static final IClass STRING = IClass.typeinfo(String.class);
|
|
|
|
|
+ private static final IClass INTEGER = IClass.typeinfo(Integer.class);
|
|
|
|
|
+ private static final IClass NUMBER = IClass.typeinfo(Number.class);
|
|
|
|
|
+ private static final IClass TI = IClass.typeinfo(ForClassTraits.INTERFACE);
|
|
|
|
|
+ private static final IClass A1 = IClass.typeinfo(ForClassTraits.CAnnotated1.class);
|
|
|
|
|
+ private static final IClass A2 = IClass.typeinfo(ForClassTraits.CAnnotated2.class);
|
|
|
|
|
+
|
|
|
|
|
+ private static final IClass IB1 = IClass.typeinfo(ForMemberTraits.Bean.class);
|
|
|
|
|
+ private static final IClass IB2 = IClass.typeinfo(ForMemberTraits.Bean2.class);
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ @Test
|
|
|
|
|
+ public void testNames() {
|
|
|
|
|
+ IClasses ic = new AClasses(new IClass[]{STRING, INTEGER, NUMBER, TI});
|
|
|
|
|
+
|
|
|
|
|
+ List<String> names = Arrays.asList(
|
|
|
|
|
+ "java.lang.String",
|
|
|
|
|
+ "java.lang.Integer",
|
|
|
|
|
+ "java.lang.Number",
|
|
|
|
|
+ "net.ranides.assira.reflection.mockup.ForClassTraits$CInterface"
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ assertEquals(names, ic.names());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Test
|
|
|
|
|
+ public void testRequire() {
|
|
|
|
|
+
|
|
|
|
|
+ List<String> exp1 = Arrays.asList(
|
|
|
|
|
+ "net.ranides.assira.reflection.mockup.ForClassTraits$CAnnotated1",
|
|
|
|
|
+ "net.ranides.assira.reflection.mockup.ForClassTraits$CAnnotated2"
|
|
|
|
|
+ );
|
|
|
|
|
+ List<String> exp2 = Arrays.asList(
|
|
|
|
|
+ "net.ranides.assira.reflection.mockup.ForClassTraits$CAnnotated2"
|
|
|
|
|
+ );
|
|
|
|
|
+ List<String> exp3 = Arrays.asList(
|
|
|
|
|
+ "net.ranides.assira.reflection.mockup.ForClassTraits$CInterface"
|
|
|
|
|
+ );
|
|
|
|
|
+ List<String> exp4 = Arrays.asList(
|
|
|
|
|
+ "java.lang.String", "java.lang.Integer"
|
|
|
|
|
+ );
|
|
|
|
|
+ List<String> exp5 = Arrays.asList(
|
|
|
|
|
+ "java.lang.String"
|
|
|
|
|
+ );
|
|
|
|
|
+ List<String> exp6 = Arrays.asList(
|
|
|
|
|
+ "net.ranides.assira.reflection.mockup.ForMemberTraits$Bean",
|
|
|
|
|
+ "net.ranides.assira.reflection.mockup.ForMemberTraits$Bean2"
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ assertEquals(exp1, iclist().require(Meta.Immutable.class).names());
|
|
|
|
|
+
|
|
|
|
|
+ assertEquals(exp1, iclist().require(A1.annotations()).names());
|
|
|
|
|
+ assertEquals(exp2, iclist().require(A2.annotations()).names());
|
|
|
|
|
+
|
|
|
|
|
+ assertEquals(exp3, iclist().require(INTERFACE).names());
|
|
|
|
|
+
|
|
|
|
|
+ assertEquals(exp4, iclist().require(collect(PUBLIC, FINAL)).names());
|
|
|
|
|
+
|
|
|
|
|
+ IMethod m = STRING.methods().require("valueOf").first();
|
|
|
|
|
+ assertEquals(exp5, iclist().require(m).names());
|
|
|
|
|
+
|
|
|
|
|
+ IClasses ic2 = new AClasses(new IClass[]{INTEGER, IB1, IB2});
|
|
|
|
|
+ IMethod m2 = IB1.methods().require("getName1").first();
|
|
|
|
|
+ assertEquals(exp6, ic2.require(m2).names());
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Test
|
|
|
|
|
+ public void testDiscard() {
|
|
|
|
|
+
|
|
|
|
|
+ List<String> exp1 = Arrays.asList(
|
|
|
|
|
+ "java.lang.String",
|
|
|
|
|
+ "java.lang.Integer",
|
|
|
|
|
+ "java.lang.Number",
|
|
|
|
|
+ "net.ranides.assira.reflection.mockup.ForClassTraits$CInterface"
|
|
|
|
|
+ );
|
|
|
|
|
+ List<String> exp2 = Arrays.asList(
|
|
|
|
|
+ "java.lang.String",
|
|
|
|
|
+ "java.lang.Integer",
|
|
|
|
|
+ "java.lang.Number",
|
|
|
|
|
+ "net.ranides.assira.reflection.mockup.ForClassTraits$CInterface",
|
|
|
|
|
+ "net.ranides.assira.reflection.mockup.ForClassTraits$CAnnotated1"
|
|
|
|
|
+ );
|
|
|
|
|
+ List<String> exp3 = Arrays.asList(
|
|
|
|
|
+ "java.lang.Number",
|
|
|
|
|
+ "net.ranides.assira.reflection.mockup.ForClassTraits$CInterface",
|
|
|
|
|
+ "net.ranides.assira.reflection.mockup.ForClassTraits$CAnnotated1",
|
|
|
|
|
+ "net.ranides.assira.reflection.mockup.ForClassTraits$CAnnotated2"
|
|
|
|
|
+ );
|
|
|
|
|
+ List<String> exp4 = Arrays.asList(
|
|
|
|
|
+ "java.lang.Number",
|
|
|
|
|
+ "net.ranides.assira.reflection.mockup.ForClassTraits$CInterface",
|
|
|
|
|
+ "net.ranides.assira.reflection.mockup.ForClassTraits$CAnnotated1",
|
|
|
|
|
+ "net.ranides.assira.reflection.mockup.ForClassTraits$CAnnotated2"
|
|
|
|
|
+ );
|
|
|
|
|
+ List<String> exp5 = Arrays.asList(
|
|
|
|
|
+ "java.lang.Integer",
|
|
|
|
|
+ "java.lang.Number",
|
|
|
|
|
+ "net.ranides.assira.reflection.mockup.ForClassTraits$CInterface",
|
|
|
|
|
+ "net.ranides.assira.reflection.mockup.ForClassTraits$CAnnotated1",
|
|
|
|
|
+ "net.ranides.assira.reflection.mockup.ForClassTraits$CAnnotated2"
|
|
|
|
|
+ );
|
|
|
|
|
+ List<String> exp6 = Arrays.asList(
|
|
|
|
|
+ "java.lang.Integer"
|
|
|
|
|
+ );
|
|
|
|
|
+ List<String> exp7 = Arrays.asList(
|
|
|
|
|
+ "java.lang.String", "java.lang.Integer", "java.lang.Number"
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ assertEquals(exp1, iclist().discard(Meta.Immutable.class).names());
|
|
|
|
|
+ assertEquals(exp2, iclist().discard(Meta.Unsafe.class).names());
|
|
|
|
|
+
|
|
|
|
|
+ assertEquals(exp1, iclist().discard(A1.annotations()).names());
|
|
|
|
|
+ assertEquals(exp1, iclist().discard(A2.annotations()).names());
|
|
|
|
|
+
|
|
|
|
|
+ assertEquals(exp3, iclist().discard(FINAL).names());
|
|
|
|
|
+
|
|
|
|
|
+ assertEquals(exp4, iclist().discard(collect(PUBLIC,FINAL)).names());
|
|
|
|
|
+
|
|
|
|
|
+ IMethod m = STRING.methods().require("valueOf").first();
|
|
|
|
|
+ assertEquals(exp5, iclist().discard(m).names());
|
|
|
|
|
+
|
|
|
|
|
+ IClasses ic2 = new AClasses(new IClass[]{INTEGER, IB1, IB2});
|
|
|
|
|
+ IMethod m2 = IB1.methods().require("getName1").first();
|
|
|
|
|
+ assertEquals(exp6, ic2.discard(m2).names());
|
|
|
|
|
+
|
|
|
|
|
+ assertEquals(exp7, iclist().discard(n -> n.name().startsWith("net.")).names());
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Test
|
|
|
|
|
+ public void testFields() {
|
|
|
|
|
+ List<String> exp1 = Arrays.asList(
|
|
|
|
|
+ "CASE_INSENSITIVE_ORDER",
|
|
|
|
|
+ "MIN_VALUE",
|
|
|
|
|
+ "MAX_VALUE",
|
|
|
|
|
+ "TYPE",
|
|
|
|
|
+ "SIZE",
|
|
|
|
|
+ "BYTES"
|
|
|
|
|
+ );
|
|
|
|
|
+ List<String> exp2 = Arrays.asList(
|
|
|
|
|
+ "serialVersionUID",
|
|
|
|
|
+ "serialVersionUID",
|
|
|
|
|
+ "serialVersionUID",
|
|
|
|
|
+ "value",
|
|
|
|
|
+ "value",
|
|
|
|
|
+ "serialPersistentFields",
|
|
|
|
|
+ "hash"
|
|
|
|
|
+ );
|
|
|
|
|
+ List<String> exp3 = Arrays.asList(
|
|
|
|
|
+ "serialVersionUID",
|
|
|
|
|
+ "serialVersionUID",
|
|
|
|
|
+ "serialVersionUID",
|
|
|
|
|
+ "this$0",
|
|
|
|
|
+ "this$0",
|
|
|
|
|
+ "value",
|
|
|
|
|
+ "value",
|
|
|
|
|
+ "sizeTable",
|
|
|
|
|
+ "serialPersistentFields",
|
|
|
|
|
+ "hash",
|
|
|
|
|
+ "digits",
|
|
|
|
|
+ "DigitTens",
|
|
|
|
|
+ "DigitOnes",
|
|
|
|
|
+ "TYPE",
|
|
|
|
|
+ "SIZE",
|
|
|
|
|
+ "MIN_VALUE",
|
|
|
|
|
+ "MAX_VALUE",
|
|
|
|
|
+ "CASE_INSENSITIVE_ORDER",
|
|
|
|
|
+ "BYTES"
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ assertEquivalent(exp1, iclist().fields().names());
|
|
|
|
|
+ assertEquivalent(exp2, iclist().fields().require(PRIVATE).names());
|
|
|
|
|
+ assertEquivalent(exp3, iclist().fields().require(DECLARED).names());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private static AClasses iclist() {
|
|
|
|
|
+ return new AClasses(new IClass[]{STRING, INTEGER, NUMBER, TI, A1, A2});
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+}
|