package org.tynamo.descriptor.annotation; import org.apache.tapestry5.ioc.ObjectLocator; import org.apache.tapestry5.ioc.test.MockTester; import org.easymock.EasyMock; import org.testng.Assert; import org.testng.annotations.AfterMethod; import org.testng.annotations.Test; import org.tynamo.descriptor.*; import org.tynamo.descriptor.annotation.handlers.ClassDescriptorAnnotationHandler; import org.tynamo.descriptor.annotation.handlers.DescriptorAnnotationHandler; import org.tynamo.descriptor.annotation.handlers.PropertyDescriptorAnnotationHandler; import org.tynamo.descriptor.decorators.TynamoDecorator; import org.tynamo.test.Embeddee; import org.tynamo.test.Embeddor; import org.tynamo.test.Foo; public class AnnotationDecoratorTest extends Assert { private final MockTester tester = new MockTester(); /** * Discards any mock objects created during the test. */ @AfterMethod(alwaysRun = true) public final void discardMockControl() { tester.cleanup(); } @Test public void testDecorate() { ObjectLocator locator = tester.newMock(ObjectLocator.class); TynamoDecorator decorator = new TynamoDecorator(locator); EasyMock.expect(locator.getService("ClassDescriptorAnnotationHandler", DescriptorAnnotationHandler.class)) .andReturn(new ClassDescriptorAnnotationHandler()); EasyMock.expect(locator.getService("PropertyDescriptorAnnotationHandler", DescriptorAnnotationHandler.class)) .andReturn(new PropertyDescriptorAnnotationHandler()).anyTimes(); tester.replay(); TynamoClassDescriptor descriptor = new TynamoClassDescriptorImpl(Annotated.class); TynamoPropertyDescriptor fieldPropDescriptor = new TynamoPropertyDescriptorImpl(Annotated.class, "notBloppity", String.class); TynamoPropertyDescriptor hiddenDescriptor = new TynamoPropertyDescriptorImpl(Annotated.class, "hidden", String.class); TynamoPropertyDescriptor booleanDescriptor = new TynamoPropertyDescriptorImpl(Annotated.class, "booleanProperty", boolean.class); descriptor.getPropertyDescriptors().add(fieldPropDescriptor); descriptor.getPropertyDescriptors().add(hiddenDescriptor); descriptor.getPropertyDescriptors().add(new IdentifierDescriptorImpl(Foo.class, "id", Integer.class)); descriptor.getPropertyDescriptors().add(booleanDescriptor); descriptor = decorator.decorate(descriptor); assertTrue(descriptor.getPropertyDescriptor("notBloppity").isReadOnly()); assertTrue(descriptor.getPropertyDescriptor("hidden").isNonVisual()); assertTrue(descriptor.getPropertyDescriptor("id") instanceof IdentifierDescriptor, "still an id descriptor"); tester.verify(); } @Test public void testDecorateEmbedded() throws Exception { TynamoDecorator decorator = new TynamoDecorator(null); TynamoClassDescriptor embeddorDescriptor = new TynamoClassDescriptorImpl(Embeddor.class); EmbeddedDescriptor embeddeeDescriptor = new EmbeddedDescriptor(Embeddor.class, new TynamoPropertyDescriptorImpl(Embeddor.class, "embeddee", Embeddee.class), new TynamoClassDescriptorImpl(Embeddee.class)); embeddeeDescriptor.getEmbeddedClassDescriptor().getPropertyDescriptors().add(new TynamoPropertyDescriptorImpl(Embeddee.class, "title", String.class)); embeddeeDescriptor.getEmbeddedClassDescriptor().getPropertyDescriptors().add(new TynamoPropertyDescriptorImpl(Embeddee.class, "description", String.class)); embeddorDescriptor.getPropertyDescriptors().add(embeddeeDescriptor); embeddorDescriptor = decorator.decorate(embeddorDescriptor); assertTrue(embeddorDescriptor.getPropertyDescriptors().get(0) instanceof EmbeddedDescriptor); embeddeeDescriptor = (EmbeddedDescriptor) embeddorDescriptor.getPropertyDescriptors().get(0); assertEquals(2, embeddeeDescriptor.getEmbeddedClassDescriptor().getPropertyDescriptors().size(), "2 props"); assertEquals(embeddeeDescriptor.getEmbeddedClassDescriptor().getPropertyDescriptor("title").getName(), "title"); } }