package org.sql2o.reflect;
import javax.persistence.Column;
import org.junit.Test;
import org.sql2o.reflection.PojoMetadata;
import com.google.common.collect.ImmutableMap;
import junit.framework.TestCase;
@SuppressWarnings("unused")
public class ReadColumnAnnotationTest extends TestCase {
@Test
public void testNoAnnotationPojo() {
PojoMetadata metadata = newPojoMetadata(NoAnnotation.class);
assertNotNull(metadata.getPropertySetterIfExists("field1"));
}
@Test
public void testNoAnnotationSetterPojo() {
PojoMetadata metadata = newPojoMetadata(NoAnnotationSetter.class);
assertNotNull(metadata.getPropertySetterIfExists("field1"));
}
@Test
public void testOnlyOneAnnotationFieldPojo() {
PojoMetadata metadata = newPojoMetadata(OnlyOneAnnotationField.class);
assertNotNull(metadata.getPropertySetterIfExists("field_1"));
}
@Test
public void testOneAnnotationFieldPojo() {
PojoMetadata metadata = newPojoMetadata(OneAnnotationField.class);
assertNotNull(metadata.getPropertySetterIfExists("field_1"));
assertNotNull(metadata.getPropertySetterIfExists("field2"));
}
@Test
public void testAnnotationFieldAndSetterPojo() {
PojoMetadata metadata = newPojoMetadata(AnnotationFieldAndASetter.class);
assertNotNull(metadata.getPropertySetterIfExists("field_1"));
assertNotNull(metadata.getPropertySetterIfExists("field2"));
assertNotNull(metadata.getPropertySetterIfExists("field_3"));
assertNotNull(metadata.getPropertySetterIfExists("field4"));
}
@Test
public void testUppercaseAnnotationFieldPojo() {
PojoMetadata metadata = newPojoMetadata(UpperCaseAnnotationField.class);
assertNotNull(metadata.getPropertySetterIfExists("field_1"));
}
private PojoMetadata newPojoMetadata(Class<?> clazz) {
return new PojoMetadata(clazz, false, false, ImmutableMap.<String, String> of(), true);
}
private static class NoAnnotation {
private String field1;
}
private static class NoAnnotationSetter {
private String field1;
void setField1(String field1) {
this.field1 = field1;
}
}
private static class OnlyOneAnnotationField {
@Column(name = "field_1")
private String field1;
}
private static class OneAnnotationField {
@Column(name = "field_1")
private String field1;
private String field2;
}
private static class AnnotationFieldAndASetter {
@Column(name = "field_1")
private String field1;
private String field2;
private String field3;
private String field4;
@Column(name = "field_3")
void setField3(String field3) {
this.field3 = field3;
}
void setField4(String field4) {
this.field4 = field4;
}
}
private static class UpperCaseAnnotationField {
@Column(name = "FIELD_1")
private String field1;
}
}