package org.tynamo.descriptor;
import org.apache.tapestry5.ioc.test.TestBase;
import org.easymock.EasyMock;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import org.tynamo.descriptor.decorators.DescriptorDecorator;
import org.tynamo.descriptor.factories.*;
import org.tynamo.services.DescriptorService;
import org.tynamo.services.DescriptorServiceImpl;
import java.util.*;
public class DescriptorServiceTest extends TestBase
{
PropertyDescriptorFactory propertyDescriptorFactory;
MethodDescriptorFactory methodDescriptorFactory;
ArrayList<Class> types;
List<DescriptorDecorator> decorators;
@BeforeClass
public void setUp() throws Exception
{
types = new ArrayList<Class>();
types.add(TestBean.class);
types.add(ABean.class);
types.add(A.class);
types.add(B.class);
types.add(C.class);
types.add(D.class);
types.add(E.class);
propertyDescriptorFactory = new PropertyDescriptorFactoryImpl(Collections.<String>emptyList());
methodDescriptorFactory = new MethodDescriptorFactoryImpl(Collections.<String>emptyList());
decorators = Collections.emptyList();
}
@Test
public void testGetDescriptor()
{
DescriptorService descriptorService = new DescriptorServiceImpl(types,
new ReflectionDescriptorFactory(decorators, methodDescriptorFactory, propertyDescriptorFactory));
TynamoClassDescriptor descriptor = descriptorService.getClassDescriptor(TestBean.class);
assertNotNull(descriptor, "got descripor");
assertEquals(descriptor.getPropertyDescriptors().size(), 3, "3 prop descriptors");
}
@Test
public void testExcluding() throws Exception
{
PropertyDescriptorFactory propertyDescriptorFactory = new PropertyDescriptorFactoryImpl(Arrays.asList("bork", "class"));
DescriptorService descriptorService = new DescriptorServiceImpl(types,
new ReflectionDescriptorFactory(decorators, methodDescriptorFactory, propertyDescriptorFactory));
TynamoClassDescriptor descriptor = descriptorService.getClassDescriptor(TestBean.class);
assertEquals(descriptor.getPropertyDescriptors().size(), 1, "property excluded");
}
@Test
public void testDecorating() throws Exception
{
ArrayList<Class> types = new ArrayList<Class>();
types.add(TestBean.class);
TynamoClassDescriptor decoratedDescriptor = new TynamoClassDescriptorImpl(TestBean.class);
decoratedDescriptor.setHasCyclicRelationships(true);
decoratedDescriptor.setNonVisual(true);
DescriptorDecorator decorator = newMock(DescriptorDecorator.class);
expect(decorator.decorate(EasyMock.<TynamoClassDescriptor>anyObject())).andReturn(decoratedDescriptor).atLeastOnce();
replay();
DescriptorService descriptorService = new DescriptorServiceImpl(types,
new ReflectionDescriptorFactory(Arrays.asList(decorator), methodDescriptorFactory, propertyDescriptorFactory));
TynamoClassDescriptor classDescriptor = descriptorService.getClassDescriptor(TestBean.class);
assertNotNull(classDescriptor);
assertTrue(classDescriptor.isNonVisual(), "was decorated");
assertTrue(classDescriptor.getHasCyclicRelationships(), "was decorated");
verify();
}
@Test
public void testGetAllDescriptors() throws Exception
{
DescriptorService descriptorService = new DescriptorServiceImpl(types,
new ReflectionDescriptorFactory(decorators, methodDescriptorFactory, propertyDescriptorFactory));
assertEquals(descriptorService.getAllDescriptors().size(), 7, "There is 7 descriptors");
}
/*
@Test
public void testMethodDescriptors() throws Exception
{
factory.setMethodExcludes(Arrays.asList(new String[]{"equals", "toString", "hashCode"}));
factory.init();
descriptor = factory.getClassDescriptor(TestBean.class);
assertEquals("1 method", 1, descriptor.getMethodDescriptors().size());
IMethodDescriptor methodDescriptor = (IMethodDescriptor) descriptor.getMethodDescriptors().get(0);
assertEquals("right method", "doSomething", methodDescriptor.getName());
}
*/
public class ABean
{
private String name;
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
}
public class TestBean
{
private String bar;
private String bork;
public String getBar()
{
return bar;
}
public void setBar(String bar)
{
this.bar = bar;
}
public String getBork()
{
return bork;
}
public void setBork(String bork)
{
this.bork = bork;
}
public void doSomething()
{
//System.out.println("foo");
}
}
public class A
{
private B b;
private C c;
public B getB()
{
return b;
}
public void setB(B b)
{
this.b = b;
}
public C getC()
{
return c;
}
public void setC(C c)
{
this.c = c;
}
}
public class B
{
private C c;
private E e;
public C getC()
{
return c;
}
public void setC(C c)
{
this.c = c;
}
public E getE()
{
return e;
}
public void setE(E e)
{
this.e = e;
}
}
public class C
{
private D d;
public D getD()
{
return d;
}
public void setD(D d)
{
this.d = d;
}
}
public class D
{
private E e;
public E getE()
{
return e;
}
public void setE(E e)
{
this.e = e;
}
}
public class E
{
}
}