// Path: heroku-json-gson/src/main/java/com/heroku/api/parser/GsonParser.java
// public class GsonParser implements Parser {
// 
//     @Override
//     public String encode(Object object) {
//         GsonBuilder builder = new GsonBuilder();
// 
//         Gson gson = builder.create();
//         return gson.toJson(object);
//     }
// 
//     @Override
//     public <T> T parse(byte[] data, final Type type) {
//         Reader dataReader = getReader(data);
//         JsonReader jsonReader = new JsonReader(dataReader);
//         jsonReader.setLenient(true);
//         return new Gson().<T>fromJson(jsonReader, type);
//     }
// 
//     private Reader getReader(byte[] raw) {
//         try {
//             return new InputStreamReader(new ByteArrayInputStream(raw), "UTF-8");
//         } catch (UnsupportedEncodingException e) {
//             throw new RuntimeException("Somehow UTF-8 is unsupported", e);
//         }
//     }
// }
// 
// Path: heroku-json-jackson/src/main/java/com/heroku/api/parser/JacksonParser.java
// public class JacksonParser implements Parser {
//     @Override
//     public String encode(Object object) {
//         ObjectMapper mapper = new ObjectMapper();
//         mapper.setVisibilityChecker(mapper.getSerializationConfig().getDefaultVisibilityChecker()
//             .withFieldVisibility(JsonAutoDetect.Visibility.NONE)
//             .withGetterVisibility(JsonAutoDetect.Visibility.ANY)
//             .withSetterVisibility(JsonAutoDetect.Visibility.NONE)
//             .withCreatorVisibility(JsonAutoDetect.Visibility.NONE));
//         try {
//             return mapper.writeValueAsString(object);
//         } catch (IOException e) {
//             throw new ParseException("Unable to encode object.", e);
//         }
//     }
// 
//     @Override
//     public <T> T parse(byte[] data, Type type) {
//         ObjectMapper mapper = new ObjectMapper();
//         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
//         JavaType javaType = mapper.constructType(type);
//         try {
//             return mapper.readValue(data, javaType);
//         } catch (IOException e) {
//             throw new ParseException("Unable to parse data.", e);
//         }
//     }
// }


import com.google.inject.Module;
import com.heroku.api.parser.GsonParser;
import com.heroku.api.parser.JacksonParser;
import org.testng.IModuleFactory;
import org.testng.ITestContext;
package com.heroku.api;



public class TestModuleFactory implements IModuleFactory {
    @Override
    public Module createModule(ITestContext iTestContext, Class<?> aClass) {
        if (iTestContext.getCurrentXmlTest().getName().contains("finagle")) {
            return new FinagleModule();
        } else if (iTestContext.getCurrentXmlTest().getName().contains("asynchttp")) {
            return new AsyncHttpClientModule();
        } else if (iTestContext.getCurrentXmlTest().getName().contains("jackson")) {
// Path: heroku-json-gson/src/main/java/com/heroku/api/parser/GsonParser.java
// public class GsonParser implements Parser {
// 
//     @Override
//     public String encode(Object object) {
//         GsonBuilder builder = new GsonBuilder();
// 
//         Gson gson = builder.create();
//         return gson.toJson(object);
//     }
// 
//     @Override
//     public <T> T parse(byte[] data, final Type type) {
//         Reader dataReader = getReader(data);
//         JsonReader jsonReader = new JsonReader(dataReader);
//         jsonReader.setLenient(true);
//         return new Gson().<T>fromJson(jsonReader, type);
//     }
// 
//     private Reader getReader(byte[] raw) {
//         try {
//             return new InputStreamReader(new ByteArrayInputStream(raw), "UTF-8");
//         } catch (UnsupportedEncodingException e) {
//             throw new RuntimeException("Somehow UTF-8 is unsupported", e);
//         }
//     }
// }
// 
// Path: heroku-json-jackson/src/main/java/com/heroku/api/parser/JacksonParser.java
// public class JacksonParser implements Parser {
//     @Override
//     public String encode(Object object) {
//         ObjectMapper mapper = new ObjectMapper();
//         mapper.setVisibilityChecker(mapper.getSerializationConfig().getDefaultVisibilityChecker()
//             .withFieldVisibility(JsonAutoDetect.Visibility.NONE)
//             .withGetterVisibility(JsonAutoDetect.Visibility.ANY)
//             .withSetterVisibility(JsonAutoDetect.Visibility.NONE)
//             .withCreatorVisibility(JsonAutoDetect.Visibility.NONE));
//         try {
//             return mapper.writeValueAsString(object);
//         } catch (IOException e) {
//             throw new ParseException("Unable to encode object.", e);
//         }
//     }
// 
//     @Override
//     public <T> T parse(byte[] data, Type type) {
//         ObjectMapper mapper = new ObjectMapper();
//         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
//         JavaType javaType = mapper.constructType(type);
//         try {
//             return mapper.readValue(data, javaType);
//         } catch (IOException e) {
//             throw new ParseException("Unable to parse data.", e);
//         }
//     }
// }


// Path: heroku-api-integration-tests/src/test/java/com/heroku/api/TestModuleFactory.java
import com.google.inject.Module;
import com.heroku.api.parser.GsonParser;
import com.heroku.api.parser.JacksonParser;
import org.testng.IModuleFactory;
import org.testng.ITestContext;

package com.heroku.api;



public class TestModuleFactory implements IModuleFactory {
    @Override
    public Module createModule(ITestContext iTestContext, Class<?> aClass) {
        if (iTestContext.getCurrentXmlTest().getName().contains("finagle")) {
            return new FinagleModule();
        } else if (iTestContext.getCurrentXmlTest().getName().contains("asynchttp")) {
            return new AsyncHttpClientModule();
        } else if (iTestContext.getCurrentXmlTest().getName().contains("jackson")) {
            return new HttpClientModule(new JacksonParser());