package spoon.test.factory;
import org.junit.Test;
import spoon.Launcher;
import spoon.reflect.declaration.CtType;
import spoon.reflect.factory.TypeFactory;
import spoon.reflect.reference.CtTypeReference;
import spoon.test.factory.testclasses3.Cooking;
import spoon.test.factory.testclasses3.Prepare;
import spoon.testing.utils.ModelUtils;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
public class TypeFactoryTest {
@Test
public void testCreateTypeRef() {
Launcher launcher = new Launcher();
CtTypeReference<Object> ctTypeReference = launcher.getFactory().Code().createCtTypeReference(short.class);
assertEquals("short", ctTypeReference.getSimpleName());
assertEquals("short", ctTypeReference.getQualifiedName());
ctTypeReference = launcher.getFactory().Code().createCtTypeReference(Object.class);
assertEquals("Object", ctTypeReference.getSimpleName());
assertEquals("java.lang.Object", ctTypeReference.getQualifiedName());
ctTypeReference = launcher.getFactory().Code().createCtTypeReference(null);
assertEquals(null, ctTypeReference);
}
@Test
public void reflectionAPI() throws Exception {
// Spoon can be used as reflection API
CtType s = new TypeFactory().get(String.class);
assertEquals("String", s.getSimpleName());
assertEquals("java.lang.String", s.getQualifiedName());
assertEquals(3, s.getSuperInterfaces().size());
assertEquals(2,s.getMethodsByName("toLowerCase").size());
}
@Test
public void testGetClassInAnInterface() throws Exception {
final CtType<Cooking> cook = ModelUtils.buildClass(Cooking.class);
assertNotNull(cook.getFactory().Type().get("spoon.test.factory.testclasses3.Cooking$Tacos"));
assertNotNull(cook.getFactory().Class().get("spoon.test.factory.testclasses3.Cooking$Tacos"));
assertNotNull(cook.getFactory().Type().get(Cooking.Tacos.class));
assertNotNull(cook.getFactory().Class().get(Cooking.Tacos.class));
final CtType<Prepare> prepare = ModelUtils.buildClass(Prepare.class);
assertNotNull(prepare.getFactory().Type().get("spoon.test.factory.testclasses3.Prepare$Tacos"));
assertNotNull(prepare.getFactory().Interface().get("spoon.test.factory.testclasses3.Prepare$Tacos"));
assertNotNull(prepare.getFactory().Type().get(Prepare.Pozole.class));
assertNotNull(prepare.getFactory().Interface().get(Prepare.Pozole.class));
}
}