// Path: src/main/java/com/tngtech/configbuilder/configuration/BuilderConfiguration.java
// public class BuilderConfiguration {
// 
//     private Properties properties;
//     private CommandLine commandLine;
//     private Object importedConfiguration;
//     private Class<? extends Annotation>[] annotationOrder = new Class[]{CommandLineValue.class, PropertyValue.class, EnvironmentVariableValue.class, SystemPropertyValue.class, ImportedValue.class, DefaultValue.class};
// 
//     public BuilderConfiguration() {
//         properties = new Properties();
//         commandLine = null;
//         importedConfiguration = null;
//     }
// 
//     public CommandLine getCommandLine() {
//         return commandLine;
//     }
// 
//     public Properties getProperties() {
//         return properties;
//     }
// 
//     public Object getImportedConfiguration() {
//         return importedConfiguration;
//     }
// 
//     public void setProperties(Properties properties) {
//         this.properties = properties;
//     }
// 
//     public void setCommandLine(CommandLine commandLine) {
//         this.commandLine = commandLine;
//     }
// 
//     public void setImportedConfiguration(Object importedConfiguration) {
//         this.importedConfiguration = importedConfiguration;
//     }
// 
//     public void setAnnotationOrder(Class<? extends Annotation>[] annotationOrder) {
//         this.annotationOrder = annotationOrder;
//     }
// 
//     public Class<? extends Annotation>[] getAnnotationOrder() {
//         return annotationOrder;
//     }
// }
// 
// Path: src/main/java/com/tngtech/configbuilder/configuration/ErrorMessageSetup.java
// public class ErrorMessageSetup {
// 
//     private Properties errorMessages;
// 
//     /**
//      * loads the default error messages for the system locale, then merges them with additional error messages loaded with the PropertyLoader
//      *
//      * @param baseName       the filename for additional error messages
//      * @param propertyLoader the PropertyLoader used to load additional error messages
//      */
//     public void initialize(String baseName, PropertyLoader propertyLoader) {
//         ResourceBundle resourceBundle = ResourceBundle.getBundle("errors");
//         errorMessages = convertResourceBundleToProperties(resourceBundle);
//         if (baseName != null) {
//             errorMessages.putAll(propertyLoader.load(baseName));
//         }
//     }
// 
//     private Properties convertResourceBundleToProperties(ResourceBundle resource) {
//         Properties properties = new Properties();
// 
//         Enumeration<String> keys = resource.getKeys();
//         while (keys.hasMoreElements()) {
//             String key = keys.nextElement();
//             properties.put(key, resource.getString(key));
//         }
//         return properties;
//     }
// 
//     public String getErrorMessage(Throwable e, String... variables) {
//         String message = errorMessages.getProperty(e.getClass().getName());
//         return message == null ? String.format(errorMessages.getProperty("standardMessage"), e.getClass().getName()) : String.format(message, variables);
//     }
// 
//     public String getErrorMessage(Class exceptionClass, String... variables) {
//         String message = errorMessages.getProperty(exceptionClass.getName());
//         return message == null ? String.format(errorMessages.getProperty("standardMessage"), exceptionClass.getName()) : String.format(message, variables);
//     }
// }
// 
// Path: src/main/java/com/tngtech/configbuilder/exception/PrimitiveParsingException.java
// public class PrimitiveParsingException extends RuntimeException {
//     public PrimitiveParsingException(String errorMessage) {
//         super(errorMessage);
//     }
// }


import com.google.common.collect.Lists;
import com.tngtech.configbuilder.annotation.valuetransformer.*;
import com.tngtech.configbuilder.configuration.BuilderConfiguration;
import com.tngtech.configbuilder.configuration.ErrorMessageSetup;
import com.tngtech.configbuilder.exception.PrimitiveParsingException;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import java.lang.reflect.Field;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Collection;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
    
    private class TestConfigClass {

        @ValueTransformers({CharacterSeparatedStringToStringListTransformer.class})
        private Collection<String> stringCollectionField;
        private int intField;
        private double doubleField;
        private Boolean boolField;
        @ValueTransformers({TestTransformer.class})
        private int otherIntField;
        @ValueTransformers({AnotherTestTransformer.class})
        private Integer integerField;
        private Collection<Path> pathCollectionField;
        private Collection<Integer> integerCollectionField;
        private Collection<Object> objectCollectionField;
    }

    @Mock
    private ConfigBuilderFactory configBuilderFactory;
    
    @Mock
    private FieldValueExtractor fieldValueExtractor;
    
    @Mock
    private ErrorMessageSetup errorMessageSetup;
    
    @Mock
    private BuilderConfiguration builderConfiguration;
    
    private Field stringCollectionField;
// Path: src/main/java/com/tngtech/configbuilder/configuration/BuilderConfiguration.java
// public class BuilderConfiguration {
// 
//     private Properties properties;
//     private CommandLine commandLine;
//     private Object importedConfiguration;
//     private Class<? extends Annotation>[] annotationOrder = new Class[]{CommandLineValue.class, PropertyValue.class, EnvironmentVariableValue.class, SystemPropertyValue.class, ImportedValue.class, DefaultValue.class};
// 
//     public BuilderConfiguration() {
//         properties = new Properties();
//         commandLine = null;
//         importedConfiguration = null;
//     }
// 
//     public CommandLine getCommandLine() {
//         return commandLine;
//     }
// 
//     public Properties getProperties() {
//         return properties;
//     }
// 
//     public Object getImportedConfiguration() {
//         return importedConfiguration;
//     }
// 
//     public void setProperties(Properties properties) {
//         this.properties = properties;
//     }
// 
//     public void setCommandLine(CommandLine commandLine) {
//         this.commandLine = commandLine;
//     }
// 
//     public void setImportedConfiguration(Object importedConfiguration) {
//         this.importedConfiguration = importedConfiguration;
//     }
// 
//     public void setAnnotationOrder(Class<? extends Annotation>[] annotationOrder) {
//         this.annotationOrder = annotationOrder;
//     }
// 
//     public Class<? extends Annotation>[] getAnnotationOrder() {
//         return annotationOrder;
//     }
// }
// 
// Path: src/main/java/com/tngtech/configbuilder/configuration/ErrorMessageSetup.java
// public class ErrorMessageSetup {
// 
//     private Properties errorMessages;
// 
//     /**
//      * loads the default error messages for the system locale, then merges them with additional error messages loaded with the PropertyLoader
//      *
//      * @param baseName       the filename for additional error messages
//      * @param propertyLoader the PropertyLoader used to load additional error messages
//      */
//     public void initialize(String baseName, PropertyLoader propertyLoader) {
//         ResourceBundle resourceBundle = ResourceBundle.getBundle("errors");
//         errorMessages = convertResourceBundleToProperties(resourceBundle);
//         if (baseName != null) {
//             errorMessages.putAll(propertyLoader.load(baseName));
//         }
//     }
// 
//     private Properties convertResourceBundleToProperties(ResourceBundle resource) {
//         Properties properties = new Properties();
// 
//         Enumeration<String> keys = resource.getKeys();
//         while (keys.hasMoreElements()) {
//             String key = keys.nextElement();
//             properties.put(key, resource.getString(key));
//         }
//         return properties;
//     }
// 
//     public String getErrorMessage(Throwable e, String... variables) {
//         String message = errorMessages.getProperty(e.getClass().getName());
//         return message == null ? String.format(errorMessages.getProperty("standardMessage"), e.getClass().getName()) : String.format(message, variables);
//     }
// 
//     public String getErrorMessage(Class exceptionClass, String... variables) {
//         String message = errorMessages.getProperty(exceptionClass.getName());
//         return message == null ? String.format(errorMessages.getProperty("standardMessage"), exceptionClass.getName()) : String.format(message, variables);
//     }
// }
// 
// Path: src/main/java/com/tngtech/configbuilder/exception/PrimitiveParsingException.java
// public class PrimitiveParsingException extends RuntimeException {
//     public PrimitiveParsingException(String errorMessage) {
//         super(errorMessage);
//     }
// }


// Path: src/test/java/com/tngtech/configbuilder/util/FieldValueTransformerComponentTest.java
import com.google.common.collect.Lists;
import com.tngtech.configbuilder.annotation.valuetransformer.*;
import com.tngtech.configbuilder.configuration.BuilderConfiguration;
import com.tngtech.configbuilder.configuration.ErrorMessageSetup;
import com.tngtech.configbuilder.exception.PrimitiveParsingException;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import java.lang.reflect.Field;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Collection;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

    
    private class TestConfigClass {

        @ValueTransformers({CharacterSeparatedStringToStringListTransformer.class})
        private Collection<String> stringCollectionField;
        private int intField;
        private double doubleField;
        private Boolean boolField;
        @ValueTransformers({TestTransformer.class})
        private int otherIntField;
        @ValueTransformers({AnotherTestTransformer.class})
        private Integer integerField;
        private Collection<Path> pathCollectionField;
        private Collection<Integer> integerCollectionField;
        private Collection<Object> objectCollectionField;
    }

    @Mock
    private ConfigBuilderFactory configBuilderFactory;
    
    @Mock
    private FieldValueExtractor fieldValueExtractor;
    
    @Mock
    private ErrorMessageSetup errorMessageSetup;
    
    @Mock
    private BuilderConfiguration builderConfiguration;
    
    private Field stringCollectionField;
    private Field intField;