package com.mopub.mobileads; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; import com.mopub.common.test.support.SdkTestRunner; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.Robolectric; import static com.mopub.common.DataKeys.BROADCAST_IDENTIFIER_KEY; import static org.fest.assertions.api.Assertions.assertThat; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.stub; @RunWith(SdkTestRunner.class) public class BaseInterstitialActivityTest { private BaseInterstitialActivity subject; private long broadcastIdentifier; // Make a concrete version of the abstract class for testing purposes. private static class TestInterstitialActivity extends BaseInterstitialActivity { View view; @Override public View getAdView() { if (view == null) { view = new View(this); } return view; } } @Before public void setup() { broadcastIdentifier = 2222; } @Test public void onCreate_shouldCreateView() throws Exception { subject = Robolectric.buildActivity(TestInterstitialActivity.class).create().get(); View adView = getContentView(subject).getChildAt(0); assertThat(adView).isNotNull(); } @Test public void onDestroy_shouldCleanUpContentView() throws Exception { subject = Robolectric.buildActivity( TestInterstitialActivity.class).create().destroy().get(); assertThat(getContentView(subject).getChildCount()).isEqualTo(0); } @Test public void getBroadcastIdentifier_shouldReturnBroadcastIdFromIntent() throws Exception { Context context = Robolectric.buildActivity(Activity.class).create().get(); Intent intent = new Intent(context, TestInterstitialActivity.class); intent.putExtra(BROADCAST_IDENTIFIER_KEY, broadcastIdentifier); subject = Robolectric.buildActivity(TestInterstitialActivity.class) .withIntent(intent) .create().get(); assertThat(subject.getBroadcastIdentifier()).isEqualTo(2222L); } @Test public void getBroadcastIdentifier_withMissingBroadCastId_shouldReturnNull() throws Exception { Context context = Robolectric.buildActivity(Activity.class).create().get(); Intent intent = new Intent(context, TestInterstitialActivity.class); // This intent is missing a broadcastidentifier extra. subject = Robolectric.buildActivity(TestInterstitialActivity.class) .withIntent(intent) .create().get(); assertThat(subject.getBroadcastIdentifier()).isNull(); } protected FrameLayout getContentView(BaseInterstitialActivity subject) { return (FrameLayout) ((ViewGroup) subject.findViewById(android.R.id.content)).getChildAt(0); } protected void resetMockedView(View view) { reset(view); stub(view.getLayoutParams()).toReturn( new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT)); } }