// Path: android/tweakr/src/main/java/com/google/tweakr/types/DefaultValueTypeConverter.java
// public class DefaultValueTypeConverter implements ValueTypeConverter {
// 
//     @Override
//     public ValueType getType(Class<?> fieldType) {
//         if (fieldType.isArray()) {
//             return new ArrayValueType(getType(fieldType.getComponentType()));
//         }
// 
//         if (fieldType == float.class || fieldType == double.class || fieldType == Float.class || fieldType == Double.class) {
//             return new PrimitiveValueType(PrimitiveValueType.TYPE_FLOAT);
//         } else if (fieldType == int.class || fieldType == long.class || fieldType == Integer.class || fieldType == Long.class) {
//             return new PrimitiveValueType(PrimitiveValueType.TYPE_INT);
//         } else if (fieldType == boolean.class || fieldType == Boolean.class) {
//             return new PrimitiveValueType(PrimitiveValueType.TYPE_BOOLEAN);
//         } else if (fieldType.isAssignableFrom(String.class)) {
//             return new PrimitiveValueType(PrimitiveValueType.TYPE_STRING);
//         } else if (fieldType.isEnum()) {
//             return new EnumValueType(fieldType);
//         }
// 
//         return new PrimitiveValueType(PrimitiveValueType.TYPE_UNKNOWN);
//     }
// }
// 
// Path: android/tweakr/src/main/java/com/google/tweakr/types/ValueType.java
// public interface ValueType {
//     /**
//      * Simple name of the type. Used to select an appropriate UI.
//      */
//     String getName();
// 
//     /**
//      * A default value if one cannot be determined.
//      */
//     Object getDefault();
// 
//     /**
//      * Safely convert a value from Firebase into the correct type.
//      */
//     Object convert(Object newValue);
// 
//     /**
//      * For enum fields or other fields you want to restrict to only certain choices.
//      *
//      * @return An array of String representations of all possible values to choose from.
//      */
//     default List<String> getPossibleValues() {
//         return null;
//     }
// }
// 
// Path: android/tweakr/src/main/java/com/google/tweakr/types/VoidValueType.java
// public class VoidValueType implements ValueType {
// 
//     @Override
//     public String getName() {
//         return "void";
//     }
// 
//     @Override
//     public Object getDefault() {
//         return null;
//     }
// 
//     @Override
//     public Object convert(Object newValue) {
//         return null;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
//         ValueType that = (ValueType) o;
//         return getName().equals(that.getName());
//     }
// 
//     @Override
//     public int hashCode() {
//         return Objects.hash(getName());
//     }
// }


import static org.mockito.Mockito.verify;
import com.google.tweakr.annotations.Tweak;
import com.google.tweakr.types.DefaultValueTypeConverter;
import com.google.tweakr.types.ValueType;
import com.google.tweakr.types.VoidValueType;
import org.junit.Before;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertSame;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.isNull;
    public void tweakEnumMethod() {
        Object testObject = new Object() {
            @Tweak
            public void setTest(TestEnum p) {

            }

            public TestEnum getTest() {
                return TestEnum.SOMETHING_ELSE;
            }
        };

        registry.register(testObject, null);

        ValueType valueType = new DefaultValueTypeConverter().getType(TestEnum.class);
        verify(repo).add(eq("setTest"), eq(1), eq(valueType), eq(TestEnum.SOMETHING_ELSE),
            any());
    }

    @Test
    public void tweakVoidMethod() {
        Object testObject = new Object() {
            @Tweak
            public void setTest() {

            }
        };

        registry.register(testObject, null);

// Path: android/tweakr/src/main/java/com/google/tweakr/types/DefaultValueTypeConverter.java
// public class DefaultValueTypeConverter implements ValueTypeConverter {
// 
//     @Override
//     public ValueType getType(Class<?> fieldType) {
//         if (fieldType.isArray()) {
//             return new ArrayValueType(getType(fieldType.getComponentType()));
//         }
// 
//         if (fieldType == float.class || fieldType == double.class || fieldType == Float.class || fieldType == Double.class) {
//             return new PrimitiveValueType(PrimitiveValueType.TYPE_FLOAT);
//         } else if (fieldType == int.class || fieldType == long.class || fieldType == Integer.class || fieldType == Long.class) {
//             return new PrimitiveValueType(PrimitiveValueType.TYPE_INT);
//         } else if (fieldType == boolean.class || fieldType == Boolean.class) {
//             return new PrimitiveValueType(PrimitiveValueType.TYPE_BOOLEAN);
//         } else if (fieldType.isAssignableFrom(String.class)) {
//             return new PrimitiveValueType(PrimitiveValueType.TYPE_STRING);
//         } else if (fieldType.isEnum()) {
//             return new EnumValueType(fieldType);
//         }
// 
//         return new PrimitiveValueType(PrimitiveValueType.TYPE_UNKNOWN);
//     }
// }
// 
// Path: android/tweakr/src/main/java/com/google/tweakr/types/ValueType.java
// public interface ValueType {
//     /**
//      * Simple name of the type. Used to select an appropriate UI.
//      */
//     String getName();
// 
//     /**
//      * A default value if one cannot be determined.
//      */
//     Object getDefault();
// 
//     /**
//      * Safely convert a value from Firebase into the correct type.
//      */
//     Object convert(Object newValue);
// 
//     /**
//      * For enum fields or other fields you want to restrict to only certain choices.
//      *
//      * @return An array of String representations of all possible values to choose from.
//      */
//     default List<String> getPossibleValues() {
//         return null;
//     }
// }
// 
// Path: android/tweakr/src/main/java/com/google/tweakr/types/VoidValueType.java
// public class VoidValueType implements ValueType {
// 
//     @Override
//     public String getName() {
//         return "void";
//     }
// 
//     @Override
//     public Object getDefault() {
//         return null;
//     }
// 
//     @Override
//     public Object convert(Object newValue) {
//         return null;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
//         ValueType that = (ValueType) o;
//         return getName().equals(that.getName());
//     }
// 
//     @Override
//     public int hashCode() {
//         return Objects.hash(getName());
//     }
// }


// Path: android/tweakr/src/test/java/com/google/tweakr/TweakrRegistryTest.java
import static org.mockito.Mockito.verify;
import com.google.tweakr.annotations.Tweak;
import com.google.tweakr.types.DefaultValueTypeConverter;
import com.google.tweakr.types.ValueType;
import com.google.tweakr.types.VoidValueType;
import org.junit.Before;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertSame;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.isNull;

    public void tweakEnumMethod() {
        Object testObject = new Object() {
            @Tweak
            public void setTest(TestEnum p) {

            }

            public TestEnum getTest() {
                return TestEnum.SOMETHING_ELSE;
            }
        };

        registry.register(testObject, null);

        ValueType valueType = new DefaultValueTypeConverter().getType(TestEnum.class);
        verify(repo).add(eq("setTest"), eq(1), eq(valueType), eq(TestEnum.SOMETHING_ELSE),
            any());
    }

    @Test
    public void tweakVoidMethod() {
        Object testObject = new Object() {
            @Tweak
            public void setTest() {

            }
        };

        registry.register(testObject, null);

        ValueType valueType = new VoidValueType();