package com.mopub.mobileads;
import android.app.Activity;
import android.content.Intent;
import com.mopub.common.test.support.SdkTestRunner;
import com.mopub.common.util.Utils;
import com.mopub.mobileads.util.vast.VastVideoConfiguration;
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 com.mopub.mobileads.BaseVideoPlayerActivity.VIDEO_URL;
import static com.mopub.mobileads.BaseVideoPlayerActivity.startMraid;
import static com.mopub.mobileads.BaseVideoPlayerActivity.startVast;
import static org.fest.assertions.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.withSettings;
@RunWith(SdkTestRunner.class)
public class BaseVideoPlayerActivityTest {
private static final String MRAID_VIDEO_URL = "http://mraidVideo";
private long testBroadcastIdentifier;
private VastVideoConfiguration vastVideoConfiguration;
@Before
public void setup() throws Exception {
vastVideoConfiguration = mock(VastVideoConfiguration.class, withSettings().serializable());
testBroadcastIdentifier = 1234;
}
@Test
public void startMraid_shouldStartMraidVideoPlayerActivity() throws Exception {
startMraid(new Activity(), MRAID_VIDEO_URL);
assertMraidVideoPlayerActivityStarted(MraidVideoPlayerActivity.class, MRAID_VIDEO_URL);
}
@Test
public void startVast_shouldStartMraidVideoPlayerActivity() throws Exception {
startVast(new Activity(), vastVideoConfiguration, testBroadcastIdentifier);
assertVastVideoPlayerActivityStarted(MraidVideoPlayerActivity.class, vastVideoConfiguration, testBroadcastIdentifier);
}
static void assertVastVideoPlayerActivityStarted(final Class clazz,
final VastVideoConfiguration vastVideoConfiguration,
final long broadcastIdentifier) {
final Intent intent = Robolectric.getShadowApplication().getNextStartedActivity();
assertIntentAndBroadcastIdentifierAreCorrect(intent, clazz, broadcastIdentifier);
final VastVideoConfiguration expectedVastVideoConfiguration =
(VastVideoConfiguration) intent.getSerializableExtra(VastVideoViewController.VAST_VIDEO_CONFIGURATION);
assertThat(expectedVastVideoConfiguration).isEqualsToByComparingFields(vastVideoConfiguration);
}
public static void assertMraidVideoPlayerActivityStarted(final Class clazz, final String url) {
final Intent intent = Robolectric.getShadowApplication().getNextStartedActivity();
assertIntentAndBroadcastIdentifierAreCorrect(intent, clazz, null);
assertThat(intent.getStringExtra(VIDEO_URL)).isEqualTo(url);
}
static void assertIntentAndBroadcastIdentifierAreCorrect(final Intent intent,
final Class clazz,
final Long expectedBroadcastId) {
assertThat(intent.getComponent().getClassName()).isEqualTo(clazz.getCanonicalName());
assertThat(Utils.bitMaskContainsFlag(intent.getFlags(), Intent.FLAG_ACTIVITY_NEW_TASK)).isTrue();
if (expectedBroadcastId != null) {
final long actualBroadcastId = (Long) intent.getSerializableExtra(BROADCAST_IDENTIFIER_KEY);
assertThat(actualBroadcastId).isEqualTo(expectedBroadcastId);
}
}
}