// Path: centipede-parser/src/main/java/com/ontology2/centipede/errors/UnparsableDefaultException.java
// public class UnparsableDefaultException extends RuntimeException {
//     private final String optionName;
//     private final String invalidValue;
//     private final Type targetType;
// 
//     public UnparsableDefaultException(
//             String optionName
//             ,String invalidValue
//             ,Type targetType
//             ,Throwable innerException) {
//         super("Could not parse ["+invalidValue+"] for option ["+optionName+"] with target type ["+targetType+"]",innerException);
//         this.optionName=optionName;
//         this.invalidValue=invalidValue;
//         this.targetType=targetType;
//     }
// 
//     public UnparsableDefaultException(
//             String optionName
//             ,String invalidValue
//             ,Type targetType
//     ) {
//         this(optionName,invalidValue,targetType,null);
//     }
// 
//     public String getOptionName() {
//         return optionName;
//     }
// 
//     public String getInvalidValue() {
//         return invalidValue;
//     }
// 
//     public Type getTargetType() {
//         return targetType;
//     }
// }
// 
// Path: centipede-parser/src/main/java/com/ontology2/centipede/errors/UnparsableOptionException.java
// public class UnparsableOptionException extends RuntimeException {
//     private final String optionName;
//     private final String invalidValue;
//     private final Type targetType;
// 
//     public UnparsableOptionException(
//             String optionName
//             ,String invalidValue
//             ,Type targetType
//             ,Throwable innerException) {
//         super("Could not parse ["+invalidValue+"] for option ["+optionName+"] with target type ["+targetType+"]",innerException);
//         this.optionName=optionName;
//         this.invalidValue=invalidValue;
//         this.targetType=targetType;
//     }
// 
//     public UnparsableOptionException(
//             String optionName
//             ,String invalidValue
//             ,Type targetType
//     ) {
//         this(optionName,invalidValue,targetType,null);
//     }
// 
//     public String getOptionName() {
//         return optionName;
//     }
// 
//     public String getInvalidValue() {
//         return invalidValue;
//     }
// 
//     public Type getTargetType() {
//         return targetType;
//     }
// }


import com.google.common.collect.Lists;
import com.ontology2.centipede.errors.UnparsableDefaultException;
import com.ontology2.centipede.errors.UnparsableOptionException;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import javax.annotation.Resource;
import static com.google.common.collect.Lists.*;
import static org.junit.Assert.*;
import java.util.ArrayList;
import java.util.List;
    @Test
    public void testCaseTwo() throws IllegalAccessException, InstantiationException {
        InheritedOptionExample ioe = (InheritedOptionExample) exampleOne.parse(
                new ArrayList<String>() {{
                    add("-badass");
                    add("-johnny");
                    add("77");
                }}
        );
        assertEquals(77L, (long) ioe.john);
        assertEquals(true, ioe.badass);
        assertEquals(0,ioe.jimmy);
        assertTrue(ioe.numbers.isEmpty());
    }

    @Test
    public void assignToJimmy() throws IllegalAccessException, InstantiationException {
        InheritedOptionExample ioe = (InheritedOptionExample) exampleOne.parse(
                new ArrayList<String>() {{
                    add("-jimmy");
                    add("419");
                }}
        );

        assertEquals(ioe.jimmy,419);
    }


    @Test
    public void unparsableOptionFailsAppropriately() throws IllegalAccessException {
// Path: centipede-parser/src/main/java/com/ontology2/centipede/errors/UnparsableDefaultException.java
// public class UnparsableDefaultException extends RuntimeException {
//     private final String optionName;
//     private final String invalidValue;
//     private final Type targetType;
// 
//     public UnparsableDefaultException(
//             String optionName
//             ,String invalidValue
//             ,Type targetType
//             ,Throwable innerException) {
//         super("Could not parse ["+invalidValue+"] for option ["+optionName+"] with target type ["+targetType+"]",innerException);
//         this.optionName=optionName;
//         this.invalidValue=invalidValue;
//         this.targetType=targetType;
//     }
// 
//     public UnparsableDefaultException(
//             String optionName
//             ,String invalidValue
//             ,Type targetType
//     ) {
//         this(optionName,invalidValue,targetType,null);
//     }
// 
//     public String getOptionName() {
//         return optionName;
//     }
// 
//     public String getInvalidValue() {
//         return invalidValue;
//     }
// 
//     public Type getTargetType() {
//         return targetType;
//     }
// }
// 
// Path: centipede-parser/src/main/java/com/ontology2/centipede/errors/UnparsableOptionException.java
// public class UnparsableOptionException extends RuntimeException {
//     private final String optionName;
//     private final String invalidValue;
//     private final Type targetType;
// 
//     public UnparsableOptionException(
//             String optionName
//             ,String invalidValue
//             ,Type targetType
//             ,Throwable innerException) {
//         super("Could not parse ["+invalidValue+"] for option ["+optionName+"] with target type ["+targetType+"]",innerException);
//         this.optionName=optionName;
//         this.invalidValue=invalidValue;
//         this.targetType=targetType;
//     }
// 
//     public UnparsableOptionException(
//             String optionName
//             ,String invalidValue
//             ,Type targetType
//     ) {
//         this(optionName,invalidValue,targetType,null);
//     }
// 
//     public String getOptionName() {
//         return optionName;
//     }
// 
//     public String getInvalidValue() {
//         return invalidValue;
//     }
// 
//     public Type getTargetType() {
//         return targetType;
//     }
// }


// Path: centipede-parser/src/test/java/com/ontology2/centipede/parser/TestParsing.java
import com.google.common.collect.Lists;
import com.ontology2.centipede.errors.UnparsableDefaultException;
import com.ontology2.centipede.errors.UnparsableOptionException;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import javax.annotation.Resource;
import static com.google.common.collect.Lists.*;
import static org.junit.Assert.*;
import java.util.ArrayList;
import java.util.List;

    @Test
    public void testCaseTwo() throws IllegalAccessException, InstantiationException {
        InheritedOptionExample ioe = (InheritedOptionExample) exampleOne.parse(
                new ArrayList<String>() {{
                    add("-badass");
                    add("-johnny");
                    add("77");
                }}
        );
        assertEquals(77L, (long) ioe.john);
        assertEquals(true, ioe.badass);
        assertEquals(0,ioe.jimmy);
        assertTrue(ioe.numbers.isEmpty());
    }

    @Test
    public void assignToJimmy() throws IllegalAccessException, InstantiationException {
        InheritedOptionExample ioe = (InheritedOptionExample) exampleOne.parse(
                new ArrayList<String>() {{
                    add("-jimmy");
                    add("419");
                }}
        );

        assertEquals(ioe.jimmy,419);
    }


    @Test
    public void unparsableOptionFailsAppropriately() throws IllegalAccessException {
        UnparsableOptionException blowup = null;