package spoon.test.enums;
import org.junit.Test;
import spoon.Launcher;
import spoon.reflect.declaration.CtEnum;
import spoon.reflect.declaration.CtMethod;
import spoon.reflect.declaration.CtType;
import spoon.reflect.factory.Factory;
import spoon.reflect.visitor.DefaultJavaPrettyPrinter;
import spoon.test.annotation.AnnotationTest;
import spoon.test.enums.testclasses.Burritos;
import spoon.test.enums.testclasses.Foo;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static spoon.testing.utils.ModelUtils.build;
public class EnumsTest {
@Test
public void testModelBuildingEnum() throws Exception {
CtEnum<Regular> enumeration = build("spoon.test.enums", "Regular");
assertEquals("Regular", enumeration.getSimpleName());
assertEquals(3, Regular.values().length);
assertEquals(3, enumeration.getEnumValues().size());
assertEquals("A", enumeration.getEnumValues().get(0).getSimpleName());
assertEquals(5, enumeration.getFields().size());
}
@Test
public void testAnnotationsOnEnum() throws Exception {
final Launcher launcher = new Launcher();
launcher.run(new String[] {
"-i", "./src/test/java/spoon/test/enums/testclasses",
"-o", "./target/spooned"
});
final CtEnum<?> foo = (CtEnum) launcher.getFactory().Type().get(Foo.class);
assertEquals(1, foo.getFields().size());
assertEquals(1, foo.getFields().get(0).getAnnotations().size());
assertEquals(Deprecated.class, AnnotationTest.getActualClassFromAnnotation(
foo.getFields().get(0).getAnnotations().get(0)));
assertEquals(
"public enum Foo {" + DefaultJavaPrettyPrinter.LINE_SEPARATOR
+ "@java.lang.Deprecated"
+ DefaultJavaPrettyPrinter.LINE_SEPARATOR + " Bar;}",
foo.toString());
}
@Test
public void testEnumWithoutField() throws Exception {
final Factory factory = build(Burritos.class);
final CtType<Burritos> burritos = factory.Type().get(Burritos.class);
assertEquals("public enum Burritos {" + DefaultJavaPrettyPrinter.LINE_SEPARATOR //
+ " ;" + DefaultJavaPrettyPrinter.LINE_SEPARATOR + DefaultJavaPrettyPrinter.LINE_SEPARATOR //
+ " public static void m() {" + DefaultJavaPrettyPrinter.LINE_SEPARATOR //
+ " }" + DefaultJavaPrettyPrinter.LINE_SEPARATOR //
+ "}", burritos.toString());
}
@Test
public void testGetAllMethods() throws Exception {
// contract: getAllMethods also returns the methods of Enum
final Factory factory = build(Burritos.class);
final CtType<Burritos> burritos = factory.Type().get(Burritos.class);
CtMethod name = factory.Core().createMethod();
name.setSimpleName("name"); // from Enum
name.setType(factory.Type().createReference(String.class));
assertTrue(burritos.hasMethod(name));
assertTrue(burritos.getAllMethods().contains(name));
}
}