// Path: centipede-parser/src/main/java/com/ontology2/centipede/parser/OptionParser.java
// static Object defaultValueFor(Type type) {
//     if (Byte.TYPE.equals(type)) {
//         return (byte) 0;
//     }
//     ;
// 
//     if (Short.TYPE.equals(type)) {
//         return (short) 0;
//     }
// 
//     if (Integer.TYPE.equals(type)) {
//         return (int) 0;
//     }
// 
//     if (Long.TYPE.equals(type)) {
//         return 0L;
//     }
// 
//     if (Float.TYPE.equals(type)) {
//         return 0.0F;
//     }
// 
//     if (Double.TYPE.equals(type)) {
//         return 0.0;
//     }
// 
//     if (Boolean.TYPE.equals(type)) {
//         return false;
//     }
// 
//     if (Character.TYPE.equals(type)) {
//         return '\0';
//     }
// 
//     if (String.class.equals(type)) {
//         return "";
//     }
// 
//     if (List.class.equals(type)) {
//         return new ArrayList();
//     }
// 
//     if (type instanceof ParameterizedType) {
//         ParameterizedType generic = (ParameterizedType) type;
//         if (List.class.isAssignableFrom((Class) generic.getRawType())) {
//             return new ArrayList();
//         }
//     }
// 
//     return null;
// }
// 
// Path: centipede-parser/src/main/java/com/ontology2/centipede/parser/OptionParser.java
// static Field findPositionalParameter(Class that) {
//     for (Field f : that.getFields())
//         if(f.getAnnotation(Positional.class)!=null) {
//             if(!List.class.isAssignableFrom(f.getType()))
//                 throw new MisconfigurationException("The @Positional parameter must be a List<String>");
// 
//             ParameterizedType generic=(ParameterizedType) f.getGenericType();
//             if(!String.class.equals(generic.getActualTypeArguments()[0]))
//                 throw new MisconfigurationException("The @Positional parameter must be a List<String>");
// 
//             return f;
//         }
//     return null;
// }


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.*;
        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

// Path: centipede-parser/src/main/java/com/ontology2/centipede/parser/OptionParser.java
// static Object defaultValueFor(Type type) {
//     if (Byte.TYPE.equals(type)) {
//         return (byte) 0;
//     }
//     ;
// 
//     if (Short.TYPE.equals(type)) {
//         return (short) 0;
//     }
// 
//     if (Integer.TYPE.equals(type)) {
//         return (int) 0;
//     }
// 
//     if (Long.TYPE.equals(type)) {
//         return 0L;
//     }
// 
//     if (Float.TYPE.equals(type)) {
//         return 0.0F;
//     }
// 
//     if (Double.TYPE.equals(type)) {
//         return 0.0;
//     }
// 
//     if (Boolean.TYPE.equals(type)) {
//         return false;
//     }
// 
//     if (Character.TYPE.equals(type)) {
//         return '\0';
//     }
// 
//     if (String.class.equals(type)) {
//         return "";
//     }
// 
//     if (List.class.equals(type)) {
//         return new ArrayList();
//     }
// 
//     if (type instanceof ParameterizedType) {
//         ParameterizedType generic = (ParameterizedType) type;
//         if (List.class.isAssignableFrom((Class) generic.getRawType())) {
//             return new ArrayList();
//         }
//     }
// 
//     return null;
// }
// 
// Path: centipede-parser/src/main/java/com/ontology2/centipede/parser/OptionParser.java
// static Field findPositionalParameter(Class that) {
//     for (Field f : that.getFields())
//         if(f.getAnnotation(Positional.class)!=null) {
//             if(!List.class.isAssignableFrom(f.getType()))
//                 throw new MisconfigurationException("The @Positional parameter must be a List<String>");
// 
//             ParameterizedType generic=(ParameterizedType) f.getGenericType();
//             if(!String.class.equals(generic.getActualTypeArguments()[0]))
//                 throw new MisconfigurationException("The @Positional parameter must be a List<String>");
// 
//             return f;
//         }
//     return null;
// }


// Path: centipede-parser/src/test/java/com/ontology2/centipede/parser/TestAnnotationExtraction.java
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.*;

        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));