package com.mysema.rdfbean.object; import static org.junit.Assert.assertEquals; import java.io.IOException; import java.io.InputStream; import java.util.Arrays; import org.joda.time.DateTime; import org.junit.Test; import org.objectweb.asm.ClassReader; import com.mysema.rdfbean.TEST; import com.mysema.rdfbean.annotations.ClassMapping; import com.mysema.rdfbean.annotations.Id; import com.mysema.rdfbean.annotations.Predicate; import com.mysema.rdfbean.model.ID; public class ConstructorVisitorTest { @SuppressWarnings("unused") public static class Entity { private final String firstName, lastName; public Entity(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } public Entity(String firstName) { this.firstName = firstName; this.lastName = null; } } @SuppressWarnings("unused") public static class Entity2 { private long revision; private String text; private DateTime created; public Entity2() { } public Entity2(long rev, String t, DateTime c) { revision = rev; text = t; created = c; } } @SuppressWarnings("unused") public static class Entity3 { private long revision; private String text; private DateTime created; public Entity3() { } public Entity3(long revision, String text, DateTime created) { this.revision = revision; this.text = text; this.created = created; } } @ClassMapping(ns = TEST.NS) public static class Entity4 { @Id final ID id; final String firstName; final String lastName; public Entity4(ID id, @Predicate String firstName, @Predicate String lastName) { this.id = id; this.firstName = firstName; this.lastName = lastName; } } @Test public void Parse_Entity() throws IOException { ClassReader cr = new ClassReader(getResource(Entity.class)); ConstructorVisitor visitor = new ConstructorVisitor(); cr.accept(visitor, 0); visitor.close(); assertEquals(2, visitor.getConstructors().size()); assertEquals(Arrays.asList("firstName", "lastName"), visitor.getConstructors().get(0)); assertEquals(Arrays.asList("firstName"), visitor.getConstructors().get(1)); } // @Test // public void Debug() throws IOException{ // ClassReader cr = new ClassReader(getResource(Entity4.class)); // cr.accept(new ASMifierClassVisitor(new PrintWriter(System.out)), 0); // } @Test public void Parse_Entity2() throws IOException { ClassReader cr = new ClassReader(getResource(Entity2.class)); ConstructorVisitor visitor = new ConstructorVisitor(); cr.accept(visitor, 0); visitor.close(); assertEquals(1, visitor.getConstructors().size()); assertEquals(Arrays.asList("rev", "t", "c"), visitor.getConstructors().get(0)); } @Test public void Parse_Entity3() throws IOException { ClassReader cr = new ClassReader(getResource(Entity3.class)); ConstructorVisitor visitor = new ConstructorVisitor(); cr.accept(visitor, 0); visitor.close(); assertEquals(1, visitor.getConstructors().size()); assertEquals(Arrays.asList("revision", "text", "created"), visitor.getConstructors().get(0)); } @Test public void Parse_Entity4() throws IOException { ClassReader cr = new ClassReader(getResource(Entity4.class)); ConstructorVisitor visitor = new ConstructorVisitor(); cr.accept(visitor, 0); visitor.close(); assertEquals(1, visitor.getConstructors().size()); assertEquals(Arrays.asList("id", "firstName", "lastName"), visitor.getConstructors().get(0)); } private InputStream getResource(Class<?> cl) { return cl.getClassLoader().getResourceAsStream(cl.getName().replace('.', '/') + ".class"); } }