package com.mopub.common.test.support;
import com.mopub.common.CacheService;
import com.mopub.common.ClientMetadata;
import com.mopub.common.MoPub;
import com.mopub.common.event.EventDispatcher;
import com.mopub.common.event.MoPubEvents;
import com.mopub.common.factories.MethodBuilderFactory;
import com.mopub.common.util.AsyncTasks;
import com.mopub.common.util.DateAndTime;
import com.mopub.common.util.test.support.ShadowAsyncTasks;
import com.mopub.common.util.test.support.TestDateAndTime;
import com.mopub.common.util.test.support.TestMethodBuilderFactory;
import com.mopub.mobileads.factories.AdViewControllerFactory;
import com.mopub.mobileads.factories.CustomEventBannerAdapterFactory;
import com.mopub.mobileads.factories.CustomEventBannerFactory;
import com.mopub.mobileads.factories.CustomEventInterstitialAdapterFactory;
import com.mopub.mobileads.factories.CustomEventInterstitialFactory;
import com.mopub.mobileads.factories.HtmlBannerWebViewFactory;
import com.mopub.mobileads.factories.HtmlInterstitialWebViewFactory;
import com.mopub.mobileads.factories.HttpClientFactory;
import com.mopub.mobileads.factories.MoPubViewFactory;
import com.mopub.mobileads.factories.MraidControllerFactory;
import com.mopub.mobileads.factories.VastManagerFactory;
import com.mopub.mobileads.factories.VastVideoDownloadTaskFactory;
import com.mopub.mobileads.test.support.TestAdViewControllerFactory;
import com.mopub.mobileads.test.support.TestCustomEventBannerAdapterFactory;
import com.mopub.mobileads.test.support.TestCustomEventBannerFactory;
import com.mopub.mobileads.test.support.TestCustomEventInterstitialAdapterFactory;
import com.mopub.mobileads.test.support.TestCustomEventInterstitialFactory;
import com.mopub.mobileads.test.support.TestHtmlBannerWebViewFactory;
import com.mopub.mobileads.test.support.TestHtmlInterstitialWebViewFactory;
import com.mopub.mobileads.test.support.TestHttpClientFactory;
import com.mopub.mobileads.test.support.TestMoPubViewFactory;
import com.mopub.mobileads.test.support.TestMraidControllerFactory;
import com.mopub.mobileads.test.support.TestVastManagerFactory;
import com.mopub.mobileads.test.support.TestVastVideoDownloadTaskFactory;
import com.mopub.nativeads.factories.CustomEventNativeFactory;
import com.mopub.nativeads.test.support.TestCustomEventNativeFactory;
import org.junit.runners.model.InitializationError;
import org.mockito.MockitoAnnotations;
import org.robolectric.DefaultTestLifecycle;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.TestLifecycle;
import org.robolectric.bytecode.ClassInfo;
import org.robolectric.bytecode.Setup;
import org.robolectric.util.RobolectricBackgroundExecutorService;
import static com.mopub.common.MoPub.LocationAwareness;
import static org.mockito.Mockito.mock;
public class SdkTestRunner extends RobolectricTestRunner {
public SdkTestRunner(Class<?> testClass) throws InitializationError {
super(testClass);
}
@Override
public Setup createSetup() {
return new Setup() {
@Override
public boolean shouldInstrument(ClassInfo classInfo) {
return classInfo.getName().equals(AsyncTasks.class.getName())
|| super.shouldInstrument(classInfo);
}
};
}
@Override
protected Class<? extends TestLifecycle> getTestLifecycleClass() {
return TestLifeCycleWithInjection.class;
}
public static class TestLifeCycleWithInjection extends DefaultTestLifecycle {
@Override
public void prepareTest(Object test) {
ClientMetadata.clearForTesting();
HttpClientFactory.setInstance(new TestHttpClientFactory());
DateAndTime.setInstance(new TestDateAndTime());
CustomEventBannerFactory.setInstance(new TestCustomEventBannerFactory());
CustomEventInterstitialFactory.setInstance(new TestCustomEventInterstitialFactory());
CustomEventBannerAdapterFactory.setInstance(new TestCustomEventBannerAdapterFactory());
MoPubViewFactory.setInstance(new TestMoPubViewFactory());
CustomEventInterstitialAdapterFactory.setInstance(new TestCustomEventInterstitialAdapterFactory());
HtmlBannerWebViewFactory.setInstance(new TestHtmlBannerWebViewFactory());
HtmlInterstitialWebViewFactory.setInstance(new TestHtmlInterstitialWebViewFactory());
AdViewControllerFactory.setInstance(new TestAdViewControllerFactory());
VastManagerFactory.setInstance(new TestVastManagerFactory());
VastVideoDownloadTaskFactory.setInstance(new TestVastVideoDownloadTaskFactory());
MethodBuilderFactory.setInstance(new TestMethodBuilderFactory());
CustomEventNativeFactory.setInstance(new TestCustomEventNativeFactory());
MraidControllerFactory.setInstance(new TestMraidControllerFactory());
ShadowAsyncTasks.reset();
MoPubEvents.setEventDispatcher(mock(EventDispatcher.class));
MoPub.setLocationAwareness(LocationAwareness.NORMAL);
MoPub.setLocationPrecision(6);
MockitoAnnotations.initMocks(test);
AsyncTasks.setExecutor(new RobolectricBackgroundExecutorService());
CacheService.clearAndNullCaches();
Robolectric.getFakeHttpLayer().clearPendingHttpResponses();
}
}
}