// Path: src/test/java/com/statemachinesystems/envy/common/MyClass.java
// public class MyClass {
//     private final String value;
// 
//     public MyClass(String value) {
//         this.value = value;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
// 
//         MyClass myClass = (MyClass) o;
// 
//         if (!value.equals(myClass.value)) return false;
// 
//         return true;
//     }
// 
//     @Override
//     public int hashCode() {
//         return value.hashCode();
//     }
// 
//     @Override
//     public String toString() {
//         return "MyClass{" +
//                 "value='" + value + '\'' +
//                 '}';
//     }
// }
// 
// Path: src/test/java/com/statemachinesystems/envy/common/MyEnum.java
// public enum MyEnum {
//     FOO, BAR, BAZ
// }
// 
// Path: src/main/java/com/statemachinesystems/envy/parsers/BooleanValueParser.java
// public class BooleanValueParser implements ValueParser<Boolean> {
// 
//     public static BooleanValueParser createParser(Map<String, Boolean> acceptedValues) {
//         Map<String, Boolean> lowerCasedValues = new HashMap<String, Boolean>();
//         for (Map.Entry<String, Boolean> entry : acceptedValues.entrySet()) {
//             lowerCasedValues.put(entry.getKey().toLowerCase(), entry.getValue());
//         }
//         return new BooleanValueParser(lowerCasedValues);
//     }
// 
//     private static Map<String, Boolean> defaultAcceptedValues() {
//         Map<String, Boolean> acceptedValues = new HashMap<String, Boolean>();
// 
//         acceptedValues.put("true", Boolean.TRUE);
//         acceptedValues.put("false", Boolean.FALSE);
//         acceptedValues.put("yes", Boolean.TRUE);
//         acceptedValues.put("no", Boolean.FALSE);
//         acceptedValues.put("y", Boolean.TRUE);
//         acceptedValues.put("n", Boolean.FALSE);
//         acceptedValues.put("on", Boolean.TRUE);
//         acceptedValues.put("off", Boolean.FALSE);
// 
//         return acceptedValues;
//     }
// 
//     private final Map<String, Boolean> acceptedValues;
// 
//     public BooleanValueParser() {
//         this(defaultAcceptedValues());
//     }
// 
//     private BooleanValueParser(Map<String, Boolean> acceptedValues) {
//         this.acceptedValues = acceptedValues;
//     }
// 
//     @Override
//     public Boolean parseValue(String value) {
//         String key = value.toLowerCase();
//         if (! acceptedValues.containsKey(key)) {
//             throw new IllegalArgumentException(
//                     String.format("No registered Boolean value for '%s'", value));
//         }
//         return acceptedValues.get(key);
//     }
// 
//     @Override
//     public Class<Boolean> getValueClass() {
//         return Boolean.class;
//     }
// }


import com.statemachinesystems.envy.common.MyClass;
import com.statemachinesystems.envy.common.MyEnum;
import com.statemachinesystems.envy.parsers.BooleanValueParser;
import org.junit.Test;
import java.util.Random;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertNull;
package com.statemachinesystems.envy;




public class ValueParserFactoryTest {

    private final ValueParserFactory valueParserFactory =
            new ValueParserFactory(new BooleanValueParser());

    @Test
    public void createsParserForRegisteredType() {
        ValueParser<?> parser = valueParserFactory.getValueParser(Boolean.class);
        assertEquals(Boolean.TRUE, parser.parseValue("true"));
    }

    @Test
    public void createsParserForBoxedRegisteredType() {
        ValueParser<?> parser = valueParserFactory.getValueParser(boolean.class);
        assertEquals(Boolean.FALSE, parser.parseValue("false"));
    }

    @Test
    public void createsParserForEnumType() {
// Path: src/test/java/com/statemachinesystems/envy/common/MyClass.java
// public class MyClass {
//     private final String value;
// 
//     public MyClass(String value) {
//         this.value = value;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
// 
//         MyClass myClass = (MyClass) o;
// 
//         if (!value.equals(myClass.value)) return false;
// 
//         return true;
//     }
// 
//     @Override
//     public int hashCode() {
//         return value.hashCode();
//     }
// 
//     @Override
//     public String toString() {
//         return "MyClass{" +
//                 "value='" + value + '\'' +
//                 '}';
//     }
// }
// 
// Path: src/test/java/com/statemachinesystems/envy/common/MyEnum.java
// public enum MyEnum {
//     FOO, BAR, BAZ
// }
// 
// Path: src/main/java/com/statemachinesystems/envy/parsers/BooleanValueParser.java
// public class BooleanValueParser implements ValueParser<Boolean> {
// 
//     public static BooleanValueParser createParser(Map<String, Boolean> acceptedValues) {
//         Map<String, Boolean> lowerCasedValues = new HashMap<String, Boolean>();
//         for (Map.Entry<String, Boolean> entry : acceptedValues.entrySet()) {
//             lowerCasedValues.put(entry.getKey().toLowerCase(), entry.getValue());
//         }
//         return new BooleanValueParser(lowerCasedValues);
//     }
// 
//     private static Map<String, Boolean> defaultAcceptedValues() {
//         Map<String, Boolean> acceptedValues = new HashMap<String, Boolean>();
// 
//         acceptedValues.put("true", Boolean.TRUE);
//         acceptedValues.put("false", Boolean.FALSE);
//         acceptedValues.put("yes", Boolean.TRUE);
//         acceptedValues.put("no", Boolean.FALSE);
//         acceptedValues.put("y", Boolean.TRUE);
//         acceptedValues.put("n", Boolean.FALSE);
//         acceptedValues.put("on", Boolean.TRUE);
//         acceptedValues.put("off", Boolean.FALSE);
// 
//         return acceptedValues;
//     }
// 
//     private final Map<String, Boolean> acceptedValues;
// 
//     public BooleanValueParser() {
//         this(defaultAcceptedValues());
//     }
// 
//     private BooleanValueParser(Map<String, Boolean> acceptedValues) {
//         this.acceptedValues = acceptedValues;
//     }
// 
//     @Override
//     public Boolean parseValue(String value) {
//         String key = value.toLowerCase();
//         if (! acceptedValues.containsKey(key)) {
//             throw new IllegalArgumentException(
//                     String.format("No registered Boolean value for '%s'", value));
//         }
//         return acceptedValues.get(key);
//     }
// 
//     @Override
//     public Class<Boolean> getValueClass() {
//         return Boolean.class;
//     }
// }


// Path: src/test/java/com/statemachinesystems/envy/ValueParserFactoryTest.java
import com.statemachinesystems.envy.common.MyClass;
import com.statemachinesystems.envy.common.MyEnum;
import com.statemachinesystems.envy.parsers.BooleanValueParser;
import org.junit.Test;
import java.util.Random;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertNull;

package com.statemachinesystems.envy;




public class ValueParserFactoryTest {

    private final ValueParserFactory valueParserFactory =
            new ValueParserFactory(new BooleanValueParser());

    @Test
    public void createsParserForRegisteredType() {
        ValueParser<?> parser = valueParserFactory.getValueParser(Boolean.class);
        assertEquals(Boolean.TRUE, parser.parseValue("true"));
    }

    @Test
    public void createsParserForBoxedRegisteredType() {
        ValueParser<?> parser = valueParserFactory.getValueParser(boolean.class);
        assertEquals(Boolean.FALSE, parser.parseValue("false"));
    }

    @Test
    public void createsParserForEnumType() {
        ValueParser<?> parser = valueParserFactory.getValueParser(MyEnum.class);