package com.arondor.common.reflection.catalog;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.util.Collection;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import com.arondor.common.reflection.api.catalog.AccessibleClassCatalog;
import com.arondor.common.reflection.api.parser.AccessibleClassParser;
import com.arondor.common.reflection.model.java.AccessibleClass;
import com.arondor.common.reflection.parser.java.JavaAccessibleClassParser;
import com.arondor.common.reflection.parser.java.testing.ClassA;
import com.arondor.common.reflection.parser.java.testing.InterfaceA;
public class TestSimpleAccessibleCatalog
{
private AccessibleClassParser accessibleClassParser;
private AccessibleClassCatalog accessibleClassCatalog;
@Before
public void init()
{
accessibleClassParser = new JavaAccessibleClassParser();
accessibleClassCatalog = new SimpleAccessibleClassCatalog();
accessibleClassCatalog.addAccessibleClass(accessibleClassParser.parseAccessibleClass(InterfaceA.class));
accessibleClassCatalog.addAccessibleClass(accessibleClassParser.parseAccessibleClass(ClassA.class));
}
@Test
public void testSimpleGet() throws ClassNotFoundException
{
AccessibleClass interfaceA = accessibleClassCatalog.getAccessibleClass(InterfaceA.class.getName());
assertNotNull(interfaceA);
assertEquals(InterfaceA.class.getName(), interfaceA.getName());
AccessibleClass classA = accessibleClassCatalog.getAccessibleClass(ClassA.class.getName());
assertNotNull(classA);
assertEquals(ClassA.class.getName(), classA.getName());
}
@Test
public void testParsedInheritance() throws ClassNotFoundException
{
AccessibleClass classA = accessibleClassCatalog.getAccessibleClass(ClassA.class.getName());
List<String> interfaces = classA.getAllInterfaces();
assertEquals(2, interfaces.size());
assertEquals(Object.class.getName(), interfaces.get(0));
assertEquals(InterfaceA.class.getName(), interfaces.get(1));
}
@Test
public void testRetrieveInheritance()
{
Collection<AccessibleClass> inherited = accessibleClassCatalog
.getImplementingAccessibleClasses(InterfaceA.class.getName());
assertNotNull(inherited);
assertEquals(1, inherited.size());
AccessibleClass clazz = inherited.iterator().next();
assertEquals(ClassA.class.getName(), clazz.getName());
}
}