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

        assertEquals(ioe.jimmy,419);
    }


    @Test
    public void unparsableOptionFailsAppropriately() throws IllegalAccessException {
        UnparsableOptionException blowup = null;
        try {
            InheritedOptionExample ioe = (InheritedOptionExample) exampleOne.parse(
                    new ArrayList<String>() {{
                        add("-johnny");
                        add("-badass");
                        add("421");
                    }}
            );
        } catch (UnparsableOptionException x) {
            blowup = x;
        }

        assertNotNull(blowup);
        assertEquals("johnny", blowup.getOptionName());
        assertEquals("-badass", blowup.getInvalidValue());
        assertEquals(Long.class, blowup.getTargetType());
    }

    @Test
    public void unparsableDefaultFailsAppropriately() 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;

                }}
        );

        assertEquals(ioe.jimmy,419);
    }


    @Test
    public void unparsableOptionFailsAppropriately() throws IllegalAccessException {
        UnparsableOptionException blowup = null;
        try {
            InheritedOptionExample ioe = (InheritedOptionExample) exampleOne.parse(
                    new ArrayList<String>() {{
                        add("-johnny");
                        add("-badass");
                        add("421");
                    }}
            );
        } catch (UnparsableOptionException x) {
            blowup = x;
        }

        assertNotNull(blowup);
        assertEquals("johnny", blowup.getOptionName());
        assertEquals("-badass", blowup.getInvalidValue());
        assertEquals(Long.class, blowup.getTargetType());
    }

    @Test
    public void unparsableDefaultFailsAppropriately() throws IllegalAccessException {
        UnparsableDefaultException blowup = null;