package org.tynamo.descriptor.annotation;
import java.util.Date;
import org.testng.Assert;
import org.testng.annotations.Test;
import org.tynamo.descriptor.TynamoPropertyDescriptor;
import org.tynamo.descriptor.TynamoClassDescriptorImpl;
import org.tynamo.descriptor.TynamoPropertyDescriptorImpl;
import org.tynamo.descriptor.annotation.handlers.PropertyDescriptorAnnotationHandler;
import org.tynamo.test.Foo;
public class PropertyDescriptorDecoratorTest extends Assert
{
@Test
public void testPropertyDescriptorDecorator() throws Exception
{
PropertyDescriptorAnnotationHandler decorator = new PropertyDescriptorAnnotationHandler();
TynamoClassDescriptorImpl descriptor = new TynamoClassDescriptorImpl(Annotated.class);
TynamoPropertyDescriptor fieldPropDescriptor = new TynamoPropertyDescriptorImpl(Foo.class, "notBloppity", String.class);
TynamoPropertyDescriptor hiddenDescriptor = new TynamoPropertyDescriptorImpl(Foo.class, "Hidden", String.class);
TynamoPropertyDescriptor dateDescriptor = new TynamoPropertyDescriptorImpl(Foo.class, "date", Date.class);
descriptor.getPropertyDescriptors().add(fieldPropDescriptor);
descriptor.getPropertyDescriptors().add(hiddenDescriptor);
PropertyDescriptor fieldAppearance = Annotated.class.getDeclaredField("notBloppity").getAnnotation(PropertyDescriptor.class);
decorator.decorateFromAnnotation(fieldAppearance, fieldPropDescriptor);
assertEquals("notBloppity", fieldPropDescriptor.getName());
assertTrue(fieldPropDescriptor.isReadOnly());
PropertyDescriptor propDescriptorAnno = Annotated.class.getMethod("getHidden").getAnnotation(PropertyDescriptor.class);
decorator.decorateFromAnnotation(propDescriptorAnno, hiddenDescriptor);
assertTrue(hiddenDescriptor.isNonVisual());
assertEquals("Hidden", hiddenDescriptor.getName());
PropertyDescriptor dateDescriptorAnno = Annotated.class.getMethod("getDate").getAnnotation(PropertyDescriptor.class);
decorator.decorateFromAnnotation(dateDescriptorAnno, dateDescriptor);
assertEquals("MM/dd/yyyy", dateDescriptor.getFormat());
}
}