package com.ontology2.centipede.parser;
import org.junit.Assert;
import org.junit.Test;
import static com.ontology2.centipede.parser.OptionParser.defaultValueFor;
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import static com.ontology2.centipede.parser.OptionParser.findPositionalParameter;
import static org.junit.Assert.*;
public class TestAnnotationExtraction {
@Test
public void minimalCase() {
Map<String,RWOption> lookup= OptionParser.getStringAnnotationMap(OptionExample.class);
assertEquals(1, lookup.size());
assertTrue(lookup.containsKey("badass"));
RWOption o=lookup.get("badass");
assertEquals("badass", o.getName());
assertEquals("Never a dude like this one", o.getDescription());
assertEquals("", o.getDefaultValue());
}
@Test
public void inheritanceCase() {
Map<String,RWOption> lookup=OptionParser.getStringAnnotationMap(InheritedOptionExample.class);
assertEquals(4, lookup.size());
assertTrue(lookup.containsKey("badass"));
RWOption o1=lookup.get("badass");
assertEquals("badass", o1.getName());
assertEquals("Never a dude like this one", o1.getDescription());
assertEquals("", o1.getDefaultValue());
RWOption o2=lookup.get("johnny");
assertEquals("johnny", o2.getName());
assertEquals("one hundred feet", o2.getDescription());
assertEquals("1234", o2.getDefaultValue());
RWOption numbers=lookup.get("numbers");
assert(numbers.isList());
assertEquals(Integer.class, numbers.getElementType());
}
@Test
public void testDefaults() {
// 8 primitive types get defaults from the JLS
assertEquals((byte) 0, defaultValueFor(Byte.TYPE));
assertEquals((short) 0, defaultValueFor(Short.TYPE));
assertEquals(0, defaultValueFor(Integer.TYPE));
assertEquals(0L, defaultValueFor(Long.TYPE));
assertEquals(0.0f, defaultValueFor(Float.TYPE));
assertEquals(0.0, defaultValueFor(Double.TYPE));
assertEquals(false, defaultValueFor(Boolean.TYPE));
assertEquals('\0', defaultValueFor(Character.TYPE));
// For a string we get the empty String
assertEquals("", defaultValueFor(String.class));
assertEquals(new ArrayList(), defaultValueFor(List.class));
ParameterizedType t=(ParameterizedType)
((new ArrayList<Exception>())
.getClass()
.getGenericSuperclass());
assertEquals(new ArrayList<Exception>(), defaultValueFor(t));
assertEquals(new ArrayList<Long>(), defaultValueFor(t));
}
@Test
public void extractsPositional() {
Field f=findPositionalParameter(InheritedOptionExample.class);
assertEquals("positional", f.getName());
}
}