package spoon.test.factory;
import org.junit.Assert;
import org.junit.Test;
import spoon.reflect.declaration.CtClass;
import spoon.reflect.declaration.CtElement;
import spoon.reflect.declaration.CtField;
import spoon.reflect.declaration.ModifierKind;
import spoon.reflect.factory.Factory;
import spoon.reflect.factory.FieldFactory;
import spoon.reflect.factory.TypeFactory;
import spoon.reflect.reference.CtTypeReference;
import spoon.test.targeted.testclasses.Bar;
import spoon.test.targeted.testclasses.Foo;
import spoon.test.targeted.testclasses.SuperClass;
import java.util.HashSet;
import java.util.Set;
import static spoon.testing.utils.ModelUtils.build;
public class FieldFactoryTest {
@Test
public void testCreate() throws Exception {
CtClass<?> type = build("spoon.test", "SampleClass");
FieldFactory ff = type.getFactory().Field();
TypeFactory tf = type.getFactory().Type();
Set<ModifierKind> mods = new HashSet<ModifierKind>();
mods.add(ModifierKind.PRIVATE);
CtTypeReference<?> tref = tf.createReference(String.class);
ff.create(type,mods,tref,"name");
CtField<?> field = type.getField("name");
Assert.assertEquals("name", field.getSimpleName());
Assert.assertEquals(tref, field.getType());
CtElement parent = field.getParent();
Assert.assertTrue(parent instanceof CtClass<?>);
Assert.assertEquals("SampleClass", ((CtClass<?>)parent).getSimpleName());
}
@Test
public void testCreateFromSource() throws Exception {
CtClass<?> target = build("spoon.test", "SampleClass");
Factory factory = build(Foo.class, Bar.class, SuperClass.class);
final CtClass<Object> type = factory.Class().get(Foo.class);
CtField<?> source = type.getField("i");
FieldFactory ff = type.getFactory().Field();
TypeFactory tf = type.getFactory().Type();
ff.create(target,source);
CtField<?> field = target.getField("i");
Assert.assertEquals("i", field.getSimpleName());
CtTypeReference<?> tref = tf.createReference("int");
Assert.assertEquals(tref, field.getType());
CtElement parent = field.getParent();
Assert.assertTrue(parent instanceof CtClass<?>);
Assert.assertEquals("SampleClass", ((CtClass<?>)parent).getSimpleName());
}
}