package org.robolectric.shadows;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.TestRunners;
import static org.assertj.core.api.Assertions.assertThat;
import static org.robolectric.Shadows.shadowOf;
@RunWith(TestRunners.MultiApiSelfTest.class)
public class ShadowPendingIntentTest {
@Test
public void getBroadcast_shouldCreateIntentForBroadcast() throws Exception {
Intent intent = new Intent();
PendingIntent pendingIntent = PendingIntent.getBroadcast(RuntimeEnvironment.application, 99, intent, 100);
ShadowPendingIntent shadow = shadowOf(pendingIntent);
assertThat(shadow.isActivityIntent()).isFalse();
assertThat(shadow.isBroadcastIntent()).isTrue();
assertThat(shadow.isServiceIntent()).isFalse();
assertThat(intent).isEqualTo(shadow.getSavedIntent());
assertThat((Context) RuntimeEnvironment.application).isEqualTo(shadow.getSavedContext());
assertThat(shadow.getRequestCode()).isEqualTo(99);
assertThat(shadow.getFlags()).isEqualTo(100);
}
@Test
public void getActivity_shouldCreateIntentForBroadcast() throws Exception {
Intent intent = new Intent();
PendingIntent pendingIntent = PendingIntent.getActivity(RuntimeEnvironment.application, 99, intent, 100);
ShadowPendingIntent shadow = shadowOf(pendingIntent);
assertThat(shadow.isActivityIntent()).isTrue();
assertThat(shadow.isBroadcastIntent()).isFalse();
assertThat(shadow.isServiceIntent()).isFalse();
assertThat(intent).isEqualTo(shadow.getSavedIntent());
assertThat((Context) RuntimeEnvironment.application).isEqualTo(shadow.getSavedContext());
assertThat(shadow.getRequestCode()).isEqualTo(99);
assertThat(shadow.getFlags()).isEqualTo(100);
}
@Test
public void getActivities_shouldCreateIntentForBroadcast() throws Exception {
Intent[] intents = new Intent[] {new Intent(Intent.ACTION_VIEW), new Intent(Intent.ACTION_PICK)};
PendingIntent pendingIntent = PendingIntent.getActivities(RuntimeEnvironment.application, 99, intents, 100);
ShadowPendingIntent shadow = shadowOf(pendingIntent);
assertThat(shadow.getSavedIntents()).isEqualTo(intents);
pendingIntent.send();
ShadowApplication application = shadowOf(RuntimeEnvironment.application);
assertThat(application.getNextStartedActivity()).isEqualTo(intents[0]);
assertThat(application.getNextStartedActivity()).isEqualTo(intents[1]);
}
@Test
public void getActivities_withBundle_shouldCreateIntentForBroadcast() throws Exception {
Intent[] intents = new Intent[] {new Intent(Intent.ACTION_VIEW), new Intent(Intent.ACTION_PICK)};
PendingIntent pendingIntent = PendingIntent.getActivities(RuntimeEnvironment.application, 99, intents, 100, new Bundle());
ShadowPendingIntent shadow = shadowOf(pendingIntent);
assertThat(shadow.getSavedIntents()).isEqualTo(intents);
pendingIntent.send();
ShadowApplication application = shadowOf(RuntimeEnvironment.application);
assertThat(application.getNextStartedActivity()).isEqualTo(intents[0]);
assertThat(application.getNextStartedActivity()).isEqualTo(intents[1]);
}
@Test
public void getService_shouldCreateIntentForBroadcast() throws Exception {
Intent intent = new Intent();
PendingIntent pendingIntent = PendingIntent.getService(RuntimeEnvironment.application, 99, intent, 100);
ShadowPendingIntent shadow = shadowOf(pendingIntent);
assertThat(shadow.isActivityIntent()).isFalse();
assertThat(shadow.isBroadcastIntent()).isFalse();
assertThat(shadow.isServiceIntent()).isTrue();
assertThat(intent).isEqualTo(shadow.getSavedIntent());
assertThat((Context) RuntimeEnvironment.application).isEqualTo(shadow.getSavedContext());
assertThat(shadow.getRequestCode()).isEqualTo(99);
assertThat(shadow.getFlags()).isEqualTo(100);
}
@Test
public void send_shouldFillInIntentData() throws Exception {
Intent intent = new Intent();
Activity context = new Activity();
PendingIntent forActivity = PendingIntent.getActivity(context, 99, intent, 100);
Activity otherContext = new Activity();
Intent fillIntent = new Intent();
fillIntent.putExtra("TEST", 23);
forActivity.send(otherContext, 0, fillIntent);
Intent i = shadowOf(otherContext).getNextStartedActivity();
assertThat(i).isNotNull();
assertThat(i).isSameAs(intent);
assertThat(i.getIntExtra("TEST", -1)).isEqualTo(23);
}
@Test
public void getActivity_withFlagNoCreate_shouldReturnNullIfNoPendingIntentExists() {
Intent intent = new Intent();
PendingIntent pendingIntent = PendingIntent.getActivity(RuntimeEnvironment.application, 99, intent,
PendingIntent.FLAG_NO_CREATE);
assertThat(pendingIntent).isNull();
}
@Test
public void getActivity_withFlagNoCreate_shouldReturnExistingIntent() {
Intent intent = new Intent();
PendingIntent.getActivity(RuntimeEnvironment.application, 99, intent, 100);
Intent identical = new Intent();
PendingIntent saved = PendingIntent.getActivity(RuntimeEnvironment.application, 99, identical,
PendingIntent.FLAG_NO_CREATE);
assertThat(saved).isNotNull();
assertThat(intent).isEqualTo(shadowOf(saved).getSavedIntent());
}
@Test
public void getActivities_withFlagNoCreate_shouldReturnNullIfNoPendingIntentExists() {
Intent[] intents = new Intent[] { new Intent(Intent.ACTION_VIEW), new Intent(Intent.ACTION_PICK) };
PendingIntent pendingIntent = PendingIntent.getActivities(RuntimeEnvironment.application, 99, intents,
PendingIntent.FLAG_NO_CREATE);
assertThat(pendingIntent).isNull();
}
@Test
public void getActivities_withFlagNoCreate_shouldReturnExistingIntent() {
Intent[] intents = new Intent[] { new Intent(Intent.ACTION_VIEW), new Intent(Intent.ACTION_PICK) };
PendingIntent.getActivities(RuntimeEnvironment.application, 99, intents, 100);
Intent[] identicalIntents = new Intent[] { new Intent(Intent.ACTION_VIEW), new Intent(Intent.ACTION_PICK) };
PendingIntent saved = PendingIntent.getActivities(RuntimeEnvironment.application, 99, identicalIntents,
PendingIntent.FLAG_NO_CREATE);
assertThat(saved).isNotNull();
assertThat(intents).isEqualTo(shadowOf(saved).getSavedIntents());
}
@Test
public void getBroadcast_withFlagNoCreate_shouldReturnNullIfNoPendingIntentExists() {
Intent intent = new Intent();
PendingIntent pendingIntent = PendingIntent.getBroadcast(RuntimeEnvironment.application, 99, intent,
PendingIntent.FLAG_NO_CREATE);
assertThat(pendingIntent).isNull();
}
@Test
public void getBroadcast_withFlagNoCreate_shouldReturnExistingIntent() {
Intent intent = new Intent();
PendingIntent.getBroadcast(RuntimeEnvironment.application, 99, intent, 100);
Intent identical = new Intent();
PendingIntent saved = PendingIntent.getBroadcast(RuntimeEnvironment.application, 99, identical,
PendingIntent.FLAG_NO_CREATE);
assertThat(saved).isNotNull();
assertThat(intent).isEqualTo(shadowOf(saved).getSavedIntent());
}
@Test
public void getService_withFlagNoCreate_shouldReturnNullIfNoPendingIntentExists() {
Intent intent = new Intent();
PendingIntent pendingIntent = PendingIntent.getService(RuntimeEnvironment.application, 99, intent,
PendingIntent.FLAG_NO_CREATE);
assertThat(pendingIntent).isNull();
}
@Test
public void getService_withFlagNoCreate_shouldReturnExistingIntent() {
Intent intent = new Intent();
PendingIntent.getService(RuntimeEnvironment.application, 99, intent, 100);
Intent identical = new Intent();
PendingIntent saved = PendingIntent.getService(RuntimeEnvironment.application, 99, identical,
PendingIntent.FLAG_NO_CREATE);
assertThat(saved).isNotNull();
assertThat(intent).isEqualTo(shadowOf(saved).getSavedIntent());
}
@Test
public void testEquals() {
Context ctx = RuntimeEnvironment.application;
PendingIntent pendingIntent1 = PendingIntent.getActivity(ctx, 99, new Intent("activity"), 100);
assertThat(pendingIntent1)
.isEqualTo(PendingIntent.getActivity(ctx, 99, new Intent("activity"), 100));
assertThat(pendingIntent1)
.isNotEqualTo(PendingIntent.getActivity(ctx, 99, new Intent("activity2"), 100));
assertThat(pendingIntent1)
.isNotEqualTo(PendingIntent.getActivity(ctx, 999, new Intent("activity"), 100));
}
}