/* * Copyright 2012 Red Hat, Inc. and/or its affiliates. * * Licensed under the Eclipse Public License version 1.0, available at * http://www.eclipse.org/legal/epl-v10.html */ package org.jboss.forge.test.roaster.model; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.io.InputStream; import org.jboss.forge.roaster.Roaster; import org.jboss.forge.roaster.model.source.FieldSource; import org.jboss.forge.roaster.model.source.JavaEnumSource; import org.junit.Before; import org.junit.Test; /** * @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a> */ public class JavaEnumFieldTest { private JavaEnumSource javaEnum; private FieldSource<JavaEnumSource> field; @Before public void reset() { InputStream stream = JavaEnumFieldTest.class.getResourceAsStream("/org/jboss/forge/grammar/java/MockEnum.java"); javaEnum = Roaster.parse(JavaEnumSource.class, stream); field = javaEnum.getFields().get(javaEnum.getFields().size() - 1); } @Test public void testParse() throws Exception { assertNotNull(field); assertEquals("field", field.getName()); assertEquals("String", field.getType().getName()); } @Test public void testSetName() throws Exception { assertEquals("field", field.getName()); field.setName("newName"); field.getOrigin(); assertTrue(field.toString().contains("newName;")); assertEquals("newName", field.getName()); } @Test public void testSetNameWithReservedWordPart() throws Exception { assertEquals("field", field.getName()); field.setName("privateIpAddress"); assertTrue(javaEnum.hasField("privateIpAddress")); } @Test public void testIsTypeChecksImports() throws Exception { FieldSource<JavaEnumSource> field = javaEnum.addField().setType(JavaEnumFieldTest.class).setPublic() .setName("test"); assertTrue(field.getType().isType(JavaEnumFieldTest.class)); assertTrue(field.getType().isType(JavaEnumFieldTest.class.getName())); assertTrue(javaEnum.hasImport(JavaEnumFieldTest.class)); } @Test public void testIsTypeChecksImportsIgnoresJavaLang() throws Exception { FieldSource<JavaEnumSource> field = javaEnum.addField("private Boolean bar;").setPublic().setName("test"); assertTrue(field.getType().isType(Boolean.class)); assertTrue(field.getType().isType("Boolean")); assertTrue(field.getType().isType(Boolean.class.getName())); assertFalse(javaEnum.hasImport(Boolean.class)); } @Test public void testIsTypeStringChecksImports() throws Exception { FieldSource<JavaEnumSource> field = javaEnum.addField().setType(JavaEnumFieldTest.class.getName()).setPublic() .setName("test"); assertTrue(field.getType().isType(JavaEnumFieldTest.class.getSimpleName())); assertTrue(javaEnum.hasImport(JavaEnumFieldTest.class)); } @Test public void testIsTypeChecksImportsTypes() throws Exception { FieldSource<JavaEnumSource> field = javaEnum.addField("private org.jboss.JavaEnumFieldTest test;"); FieldSource<JavaEnumSource> field2 = javaEnum.addField().setType(JavaEnumFieldTest.class).setName("test2") .setPrivate(); assertTrue(field.getType().isType(JavaEnumFieldTest.class.getSimpleName())); assertFalse(field.getType().isType(JavaEnumFieldTest.class)); assertTrue(field.getType().isType("org.jboss.JavaEnumFieldTest")); assertTrue(field2.getType().isType(JavaEnumFieldTest.class.getSimpleName())); assertTrue(field2.getType().isType(JavaEnumFieldTest.class)); assertFalse(field2.getType().isType("org.jboss.JavaEnumFieldTest")); } @Test public void testSetTypeSimpleNameDoesNotAddImport() throws Exception { FieldSource<JavaEnumSource> field = javaEnum.addField().setType(JavaEnumFieldTest.class.getSimpleName()) .setPublic() .setName("test"); assertFalse(field.getType().isType(JavaEnumFieldTest.class)); assertFalse(javaEnum.hasImport(JavaEnumFieldTest.class)); } @Test public void testSetType() throws Exception { assertEquals("field", field.getName()); field.setType(JavaEnumFieldTest.class); field.getOrigin(); assertTrue(field.toString().contains("JavaEnumFieldTest")); assertEquals(JavaEnumFieldTest.class.getName(), field.getType().getQualifiedName()); } @Test public void testSetTypeStringIntPrimitive() throws Exception { assertEquals("field", field.getName()); field.setType("int"); field.getOrigin(); assertTrue(field.toString().contains("int")); assertEquals("int", field.getType().getName()); } @Test public void testSetTypeClassIntPrimitive() throws Exception { assertEquals("field", field.getName()); field.setType(int.class.getName()); field.getOrigin(); assertTrue(field.toString().contains("int")); assertEquals("int", field.getType().getName()); } @Test public void testSetTypeString() throws Exception { assertEquals("field", field.getName()); field.setType("FooBarType"); field.getOrigin(); assertTrue(field.toString().contains("FooBarType")); assertEquals("FooBarType", field.getType().getName()); } @Test public void testAddField() throws Exception { javaEnum.addField("public Boolean flag = false;"); FieldSource<JavaEnumSource> fld = javaEnum.getFields().get(javaEnum.getFields().size() - 1); fld.getOrigin(); assertTrue(fld.toString().contains("Boolean")); assertEquals("java.lang.Boolean", fld.getType().getQualifiedName()); assertEquals("flag", fld.getName()); assertEquals("false", fld.getLiteralInitializer()); } @Test public void testAddFieldWithVisibilityScope() throws Exception { javaEnum.addField("private String privateIpAddress;"); assertTrue(javaEnum.hasField("privateIpAddress")); } @Test public void testIsPrimitive() throws Exception { FieldSource<JavaEnumSource> objectField = javaEnum.addField("public Boolean flag = false;"); FieldSource<JavaEnumSource> primitiveField = javaEnum.addField("public boolean flag = false;"); assertFalse(objectField.getType().isPrimitive()); assertTrue(primitiveField.getType().isPrimitive()); } @Test public void testAddFieldInitializerLiteral() throws Exception { javaEnum.addField("public int flag;").setLiteralInitializer("1234").setPrivate(); FieldSource<JavaEnumSource> fld = javaEnum.getFields().get(javaEnum.getFields().size() - 1); assertEquals("int", fld.getType().getName()); assertEquals("flag", fld.getName()); assertEquals("1234", fld.getLiteralInitializer()); assertEquals("1234", fld.getStringInitializer()); assertEquals("private int flag=1234;", fld.toString().trim()); } @Test public void testAddFieldInitializerLiteralIgnoresTerminator() throws Exception { javaEnum.addField("public int flag;").setLiteralInitializer("1234;").setPrivate(); FieldSource<JavaEnumSource> fld = javaEnum.getFields().get(javaEnum.getFields().size() - 1); assertEquals("int", fld.getType().getName()); assertEquals("flag", fld.getName()); assertEquals("1234", fld.getLiteralInitializer()); assertEquals("1234", fld.getStringInitializer()); assertEquals("private int flag=1234;", fld.toString().trim()); } @Test public void testAddFieldInitializerString() throws Exception { javaEnum.addField("public String flag;").setStringInitializer("american"); FieldSource<JavaEnumSource> fld = javaEnum.getFields().get(javaEnum.getFields().size() - 1); fld.getOrigin(); assertEquals("String", fld.getType().getName()); assertEquals("flag", fld.getName()); assertEquals("\"american\"", fld.getLiteralInitializer()); assertEquals("american", fld.getStringInitializer()); assertEquals("public String flag=\"american\";", fld.toString().trim()); } @Test public void testAddQualifiedFieldType() throws Exception { javaEnum.addField().setName("flag").setType(String.class.getName()).setStringInitializer("american") .setPrivate(); FieldSource<JavaEnumSource> fld = javaEnum.getFields().get(javaEnum.getFields().size() - 1); fld.getOrigin(); assertEquals(String.class.getName(), fld.getType().getQualifiedName()); assertFalse(javaEnum.hasImport(String.class)); assertEquals("flag", fld.getName()); assertEquals("\"american\"", fld.getLiteralInitializer()); assertEquals("american", fld.getStringInitializer()); assertEquals("private String flag=\"american\";", fld.toString().trim()); } @Test public void testHasField() throws Exception { javaEnum.addField().setName("flag").setType(String.class.getName()).setStringInitializer("american") .setPrivate(); FieldSource<JavaEnumSource> fld = javaEnum.getFields().get(javaEnum.getFields().size() - 1); assertTrue(javaEnum.hasField(fld)); FieldSource<JavaEnumSource> notFld = Roaster.parse(JavaEnumSource.class, "public enum Foo { BAR(-1); }") .addField("private int foobar;"); assertFalse(javaEnum.hasField(notFld)); } }