// Path: integration-test-java/src/test/java/verification/Utils.java
// public final class Utils {
// 
//     private Utils() {
//     }
// 
//     private static <T> TypeAdapter<T> getTypeAdapter(@NotNull Class<T> clazz) {
//         Gson gson = new Gson();
//         Stag.Factory factory = new Stag.Factory();
//         TypeToken<T> innerModelType = TypeToken.get(clazz);
//         return factory.create(gson, innerModelType);
//     }
// 
//     /**
//      * Verifies that a TypeAdapter was generated for the specified class.
//      *
//      * @param clazz the class to check.
//      * @param <T>   the type of the class, used internally.
//      */
//     public static <T> void verifyTypeAdapterGeneration(@NotNull Class<T> clazz) {
//         TypeAdapter<T> typeAdapter = getTypeAdapter(clazz);
//         assertNotNull("Type adapter should have been generated by Stag", typeAdapter);
//     }
// 
//     /**
//      * Verifies that a TypeAdapter was NOT generated for the specified class.
//      *
//      * @param clazz the class to check.
//      * @param <T>   the type of the class, used internally.
//      */
//     public static <T> void verifyNoTypeAdapterGeneration(@NotNull Class<T> clazz) {
//         TypeAdapter<T> typeAdapter = getTypeAdapter(clazz);
//         assertNull("Type adapter should not have been generated by Stag", typeAdapter);
//     }
// 
//     /**
//      * Verifies that the type adapter for a class is correct. It does this by manufacturing an
//      * instance of the class, writing it to JSON, and then reading that object back out of JSON
//      * and comparing the two instances.
//      *
//      * @param clazz the {@link Class} to use to get the {@link TypeAdapter}.
//      */
//     public static <T> void verifyTypeAdapterCorrectness(@NotNull Class<T> clazz) {
//         final PodamFactory factory = new PodamFactoryImpl();
//         factory.setClassStrategy(new HungarianNotationClassInfoStrategy());
// 
//         final T object = factory.manufacturePojo(clazz);
//         final TypeAdapter<T> typeAdapter = getTypeAdapter(clazz);
//         
//         T newObject = null;
//         if (typeAdapter != null) {
//             final String json = typeAdapter.toJson(object);
//             try {
//                 newObject = typeAdapter.fromJson(json);
//             } catch (IOException ignored) {}
//         }
// 
//         assertEquals(object, newObject);
//     }
// 
// }
// 
// Path: integration-test-java/src/main/java/com/vimeo/sample_java_model/BaseExternalModel.java
// @UseStag
// public class BaseExternalModel {
// 
//     @SerializedName("type")
//     private String mType;
// 
//     @SerializedName("base_value")
//     private int mBaseValue;
// 
//     public String getType() {
//         return mType;
//     }
// 
//     public void setType(String type) {
//         this.mType = type;
//     }
// 
//     public int getBaseValue() {
//         return mBaseValue;
//     }
// 
//     public void setBaseValue(int baseValue) {
//         this.mBaseValue = baseValue;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) { return true; }
//         if (o == null || getClass() != o.getClass()) { return false; }
// 
//         BaseExternalModel that = (BaseExternalModel) o;
// 
//         if (mBaseValue != that.mBaseValue) { return false; }
//         return mType != null ? mType.equals(that.mType) : that.mType == null;
//     }
// 
//     @Override
//     public int hashCode() {
//         int result = mType != null ? mType.hashCode() : 0;
//         result = 31 * result + mBaseValue;
//         return result;
//     }
// }


import verification.Utils;
import com.vimeo.sample_java_model.BaseExternalModel;
import org.junit.Test;
package com.vimeo.sample.model;



/**
 * Created by anthonycr on 2/7/17.
 */
public class ExternalModelDerivedExampleTest {

    @Test
// Path: integration-test-java/src/test/java/verification/Utils.java
// public final class Utils {
// 
//     private Utils() {
//     }
// 
//     private static <T> TypeAdapter<T> getTypeAdapter(@NotNull Class<T> clazz) {
//         Gson gson = new Gson();
//         Stag.Factory factory = new Stag.Factory();
//         TypeToken<T> innerModelType = TypeToken.get(clazz);
//         return factory.create(gson, innerModelType);
//     }
// 
//     /**
//      * Verifies that a TypeAdapter was generated for the specified class.
//      *
//      * @param clazz the class to check.
//      * @param <T>   the type of the class, used internally.
//      */
//     public static <T> void verifyTypeAdapterGeneration(@NotNull Class<T> clazz) {
//         TypeAdapter<T> typeAdapter = getTypeAdapter(clazz);
//         assertNotNull("Type adapter should have been generated by Stag", typeAdapter);
//     }
// 
//     /**
//      * Verifies that a TypeAdapter was NOT generated for the specified class.
//      *
//      * @param clazz the class to check.
//      * @param <T>   the type of the class, used internally.
//      */
//     public static <T> void verifyNoTypeAdapterGeneration(@NotNull Class<T> clazz) {
//         TypeAdapter<T> typeAdapter = getTypeAdapter(clazz);
//         assertNull("Type adapter should not have been generated by Stag", typeAdapter);
//     }
// 
//     /**
//      * Verifies that the type adapter for a class is correct. It does this by manufacturing an
//      * instance of the class, writing it to JSON, and then reading that object back out of JSON
//      * and comparing the two instances.
//      *
//      * @param clazz the {@link Class} to use to get the {@link TypeAdapter}.
//      */
//     public static <T> void verifyTypeAdapterCorrectness(@NotNull Class<T> clazz) {
//         final PodamFactory factory = new PodamFactoryImpl();
//         factory.setClassStrategy(new HungarianNotationClassInfoStrategy());
// 
//         final T object = factory.manufacturePojo(clazz);
//         final TypeAdapter<T> typeAdapter = getTypeAdapter(clazz);
//         
//         T newObject = null;
//         if (typeAdapter != null) {
//             final String json = typeAdapter.toJson(object);
//             try {
//                 newObject = typeAdapter.fromJson(json);
//             } catch (IOException ignored) {}
//         }
// 
//         assertEquals(object, newObject);
//     }
// 
// }
// 
// Path: integration-test-java/src/main/java/com/vimeo/sample_java_model/BaseExternalModel.java
// @UseStag
// public class BaseExternalModel {
// 
//     @SerializedName("type")
//     private String mType;
// 
//     @SerializedName("base_value")
//     private int mBaseValue;
// 
//     public String getType() {
//         return mType;
//     }
// 
//     public void setType(String type) {
//         this.mType = type;
//     }
// 
//     public int getBaseValue() {
//         return mBaseValue;
//     }
// 
//     public void setBaseValue(int baseValue) {
//         this.mBaseValue = baseValue;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) { return true; }
//         if (o == null || getClass() != o.getClass()) { return false; }
// 
//         BaseExternalModel that = (BaseExternalModel) o;
// 
//         if (mBaseValue != that.mBaseValue) { return false; }
//         return mType != null ? mType.equals(that.mType) : that.mType == null;
//     }
// 
//     @Override
//     public int hashCode() {
//         int result = mType != null ? mType.hashCode() : 0;
//         result = 31 * result + mBaseValue;
//         return result;
//     }
// }


// Path: integration-test-java-cross-module/src/test/java/com/vimeo/sample/model/ExternalModelDerivedExampleTest.java
import verification.Utils;
import com.vimeo.sample_java_model.BaseExternalModel;
import org.junit.Test;

package com.vimeo.sample.model;



/**
 * Created by anthonycr on 2/7/17.
 */
public class ExternalModelDerivedExampleTest {

    @Test
    public void verifyTypeAdapterWasGenerated_ExternalModelDerivedExample() throws Exception {