package com.github.markusbernhardt.xmldoclet;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.util.List;
import org.junit.Test;
import com.github.markusbernhardt.xmldoclet.simpledata.Annotation12;
import com.github.markusbernhardt.xmldoclet.xjc.AnnotationArgument;
import com.github.markusbernhardt.xmldoclet.xjc.AnnotationInstance;
import com.github.markusbernhardt.xmldoclet.xjc.Class;
import com.github.markusbernhardt.xmldoclet.xjc.Field;
import com.github.markusbernhardt.xmldoclet.xjc.Package;
import com.github.markusbernhardt.xmldoclet.xjc.Root;
/**
* Unit test group for Fields
*/
public class FieldTest extends AbstractTestParent {
/**
* Rigourous Parser :-)
*/
@Test
public void testSampledoc() {
executeJavadoc(".", new String[] { "./src/test/java" }, null, null, new String[] { "com" },
new String[] { "-dryrun" });
}
/**
* testing a returns of fields
*/
@Test
public void testMethod1() {
String[] sourceFiles = new String[] { "./src/test/java/com/github/markusbernhardt/xmldoclet/simpledata/Field1.java" };
Root rootNode = executeJavadoc(null, null, null, sourceFiles, null, new String[] { "-dryrun" });
Package packageNode = rootNode.getPackage().get(0);
Class classNode = packageNode.getClazz().get(0);
List<Field> fields = classNode.getField();
assertEquals(rootNode.getPackage().size(), 1);
assertNull(packageNode.getComment());
assertEquals(packageNode.getName(), "com.github.markusbernhardt.xmldoclet.simpledata");
assertEquals(packageNode.getAnnotation().size(), 0);
assertEquals(packageNode.getEnum().size(), 0);
assertEquals(packageNode.getInterface().size(), 0);
assertEquals(packageNode.getClazz().size(), 1);
// field0 -- test name
Field field = findByFieldName("field0", fields);
assertEquals(field.getName(), "field0");
// field1 -- test public field
field = findByFieldName("field1", fields);
assertEquals(field.getScope(), "public");
// field2 -- test private field
field = findByFieldName("field2", fields);
assertEquals(field.getScope(), "private");
// field3 -- default scope field (non defined)
field = findByFieldName("field3", fields);
assertEquals(field.getScope(), "");
// field4 -- protected scope field
field = findByFieldName("field4", fields);
assertEquals(field.getScope(), "protected");
// field5 -- volatile field
field = findByFieldName("field5", fields);
assertTrue(field.isVolatile());
// negative test of volatile
assertFalse(findByFieldName("field4", fields).isVolatile());
// field6 -- static field
field = findByFieldName("field6", fields);
assertTrue(field.isStatic());
// negative test of static
assertFalse(findByFieldName("field4", fields).isStatic());
// field7 -- transient field
field = findByFieldName("field7", fields);
assertTrue(field.isTransient());
// negative test of transient
assertFalse(findByFieldName("field4", fields).isTransient());
// field8 -- final field
field = findByFieldName("field8", fields);
assertTrue(field.isFinal());
// negative test of final
assertFalse(findByFieldName("field4", fields).isFinal());
// field9 -- string final expression
field = findByFieldName("field9", fields);
assertEquals(field.getConstant(), "\"testy\"");
// field10 -- int final expression
field = findByFieldName("field10", fields);
assertEquals(field.getConstant(), "10");
// field11 -- annotation
field = findByFieldName("field11", fields);
assertEquals(field.getAnnotation().size(), 1);
AnnotationInstance annotation = field.getAnnotation().get(0);
assertEquals(annotation.getQualified(), "java.lang.Deprecated");
assertEquals(annotation.getName(), "Deprecated");
assertEquals(annotation.getArgument().size(), 0);
// field12 -- two annotations
field = findByFieldName("field12", fields);
assertEquals(field.getAnnotation().size(), 2);
annotation = field.getAnnotation().get(0);
assertEquals(annotation.getQualified(), "java.lang.Deprecated");
assertEquals(annotation.getName(), "Deprecated");
assertEquals(annotation.getArgument().size(), 0);
annotation = field.getAnnotation().get(1);
assertEquals(annotation.getQualified(), Annotation12.class.getName());
assertEquals(annotation.getName(), Annotation12.class.getSimpleName());
assertEquals(annotation.getArgument().size(), 1);
AnnotationArgument argument = annotation.getArgument().get(0);
assertEquals(argument.getName(), "value");
assertEquals(argument.getValue().get(0), "mister");
// field13 - type testing
field = findByFieldName("field13", fields);
assertNotNull(field.getType());
assertEquals(field.getType().getQualified(), "java.lang.String");
assertNull(field.getType().getDimension());
assertNull(field.getType().getWildcard());
assertEquals(field.getType().getGeneric().size(), 0);
// field14 - wild card
field = findByFieldName("field14", fields);
assertNotNull(field.getType());
assertEquals(field.getType().getQualified(), "java.util.ArrayList");
assertNotNull(field.getType().getGeneric());
assertEquals(field.getType().getGeneric().size(), 1);
assertEquals(field.getType().getGeneric().get(0).getQualified(), "?");
assertNotNull(field.getType().getGeneric().get(0).getWildcard());
// field15 - typed generic
field = findByFieldName("field15", fields);
assertNotNull(field.getType());
assertEquals(field.getType().getQualified(), "java.util.HashMap");
assertEquals(field.getType().getGeneric().size(), 2);
assertEquals(field.getType().getGeneric().get(0).getQualified(), "java.lang.String");
assertNull(field.getType().getGeneric().get(0).getWildcard());
assertEquals(field.getType().getGeneric().get(1).getQualified(), "java.lang.Integer");
assertNull(field.getType().getGeneric().get(1).getWildcard());
// field16 - array
field = findByFieldName("field16", fields);
assertNotNull(field.getType());
assertEquals(field.getType().getQualified(), "java.lang.String");
assertEquals(field.getType().getDimension(), "[]");
}
/**
* Short way of finding fields.
*
* @param fieldName
* the shortname of the method
* @param fields
* the list of methods to look through.
* @return The matching field
*/
private Field findByFieldName(String fieldName, List<Field> fields) {
for (Field field : fields) {
if (field.getName().equals(fieldName)) {
return field;
}
}
fail();
return null;
}
}