package spoon.test.factory;
import org.junit.Assert;
import org.junit.Test;
import spoon.reflect.declaration.CtClass;
import spoon.reflect.declaration.CtConstructor;
import spoon.reflect.declaration.CtParameter;
import spoon.reflect.declaration.ModifierKind;
import spoon.reflect.factory.ClassFactory;
import spoon.reflect.factory.ConstructorFactory;
import spoon.reflect.factory.CoreFactory;
import spoon.reflect.factory.Factory;
import spoon.reflect.factory.FactoryImpl;
import spoon.reflect.reference.CtTypeReference;
import spoon.support.DefaultCoreFactory;
import spoon.support.StandardEnvironment;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import static spoon.testing.utils.ModelUtils.build;
public class ConstructorFactoryTest {
@Test
public void testCreate() throws Exception {
CtClass<?> type = build("spoon.test", "SampleClass");
Factory factory = type.getFactory();
ConstructorFactory ctorf = factory.Constructor();
CoreFactory coref = factory.Core();
Set<ModifierKind> mods = new HashSet<ModifierKind>();
mods.add(ModifierKind.PUBLIC);
List<CtParameter<?>> params = new ArrayList<CtParameter<?>>();
CtParameter<?> param = coref.createParameter();
CtTypeReference<?> tref = factory.Type().createReference(String.class);
param.setType((CtTypeReference)tref);
param.setSimpleName("str");
params.add(param);
Set<CtTypeReference<? extends Throwable>> thrownTypes =
new HashSet<CtTypeReference<? extends Throwable>>();
ctorf.create(type,mods,params,thrownTypes);
CtConstructor<?> c = type.getConstructor(tref);
Assert.assertEquals(1, c.getParameters().size());
Assert.assertEquals("str", c.getParameters().get(0).getSimpleName());
}
@Test
public void testCreateDefault() {
Factory factory =
new FactoryImpl(new DefaultCoreFactory(),new StandardEnvironment());
ClassFactory classf = factory.Class();
ConstructorFactory ctorf = factory.Constructor();
CtClass<?> ctclass = classf.create("Sample");
ctorf.createDefault(ctclass);
CtConstructor<?> c = ctclass.getConstructor();
Assert.assertEquals(0, c.getParameters().size());
}
}