package com.ushahidi.platform.mobile.app.data; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.ushahidi.platform.mobile.app.BuildConfig; import com.ushahidi.platform.mobile.app.DefaultConfig; import com.ushahidi.platform.mobile.app.data.api.AllowedPrivilegesDeserializer; import com.ushahidi.platform.mobile.app.data.api.Date; import com.ushahidi.platform.mobile.app.data.api.DateDeserializer; import com.ushahidi.platform.mobile.app.data.api.PostCompletedStagesDeserializer; import com.ushahidi.platform.mobile.app.data.api.PostPublishToDeserializer; import com.ushahidi.platform.mobile.app.data.api.PostValueDeserializer; import com.ushahidi.platform.mobile.app.data.entity.AllowedPrivilegesEntity; import com.ushahidi.platform.mobile.app.data.entity.PostCompletedStagesEntity; import com.ushahidi.platform.mobile.app.data.entity.PostPublishedToEntity; import com.ushahidi.platform.mobile.app.data.entity.PostValueEntity; import org.junit.Before; import org.junit.runner.RunWith; import org.robolectric.RobolectricGradleTestRunner; import org.robolectric.annotation.Config; import java.lang.reflect.Field; /** * @author Ushahidi Team <team@ushahidi.com> */ @RunWith(RobolectricGradleTestRunner.class) @Config(sdk = DefaultConfig.EMULATE_SDK, constants = BuildConfig.class) public abstract class BaseTestCase { public Gson gson; @Before public void setUp() throws Exception { GsonBuilder builder = new GsonBuilder(); builder.setDateFormat("yyyy-MM-dd'T'HH:mm:ssX"); builder.registerTypeAdapter(Date.class, new DateDeserializer()); builder.registerTypeAdapter(PostValueEntity.class, new PostValueDeserializer()); builder.registerTypeAdapter(AllowedPrivilegesEntity.class, new AllowedPrivilegesDeserializer()); builder.registerTypeAdapter(PostCompletedStagesEntity.class, new PostCompletedStagesDeserializer()); builder.registerTypeAdapter(PostPublishedToEntity.class, new PostPublishToDeserializer()); gson = builder.create(); } /** * Resets a Singleton class. Uses Reflection to find a private field called sInstance then * nullifies the field. * * @param clazz The class to reset. */ protected void clearSingleton(Class clazz) { Field instance; try { instance = clazz.getDeclaredField("sInstance"); instance.setAccessible(true); instance.set(null, null); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } }