package org.robolectric.shadows;
import android.app.PendingIntent;
import android.telephony.SmsManager;
import com.google.android.collect.Lists;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.TestRunners;
import org.robolectric.annotation.Config;
import static android.os.Build.VERSION_CODES.JELLY_BEAN_MR2;
import static org.assertj.core.api.Assertions.assertThat;
import static org.robolectric.Shadows.shadowOf;
@RunWith(TestRunners.MultiApiSelfTest.class)
@Config(minSdk = JELLY_BEAN_MR2)
public class ShadowSmsManagerTest {
private SmsManager smsManager = SmsManager.getDefault();
private final String scAddress = "serviceCenterAddress";
private final String destAddress = "destinationAddress";
@Test
public void sendTextMessage_shouldStoreLastSentTextParameters() {
smsManager.sendTextMessage(destAddress, scAddress, "Body Text", null, null);
ShadowSmsManager.TextSmsParams params = shadowOf(smsManager).getLastSentTextMessageParams();
assertThat(params.getDestinationAddress()).isEqualTo(destAddress);
assertThat(params.getScAddress()).isEqualTo(scAddress);
assertThat(params.getText()).isEqualTo("Body Text");
assertThat(params.getSentIntent()).isNull();
assertThat(params.getDeliveryIntent()).isNull();
}
@Test(expected = IllegalArgumentException.class)
public void sendTextMessage_shouldThrowExceptionWithEmptyDestination() {
smsManager.sendTextMessage("", scAddress, "testSmsBodyText", null, null);
}
@Test(expected = IllegalArgumentException.class)
public void sentTextMessage_shouldThrowExceptionWithEmptyText() {
smsManager.sendTextMessage(destAddress, scAddress, "", null, null);
}
@Test
public void sendMultipartMessage_shouldStoreLastSendMultimediaParameters() {
smsManager.sendMultipartTextMessage(destAddress, scAddress, Lists.newArrayList("Foo", "Bar", "Baz"), null, null);
ShadowSmsManager.TextMultipartParams params = shadowOf(smsManager).getLastSentMultipartTextMessageParams();
assertThat(params.getDestinationAddress()).isEqualTo(destAddress);
assertThat(params.getScAddress()).isEqualTo(scAddress);
assertThat(params.getParts()).containsExactly("Foo", "Bar", "Baz");
assertThat(params.getSentIntents()).isNull();
assertThat(params.getDeliveryIntents()).isNull();
}
@Test(expected = IllegalArgumentException.class)
public void sendMultipartTextMessage_shouldThrowExceptionWithEmptyDestination() {
smsManager.sendMultipartTextMessage("", scAddress, Lists.newArrayList("Foo"), null, null);
}
@Test(expected = IllegalArgumentException.class)
public void sentMultipartTextMessage_shouldThrowExceptionWithEmptyText() {
smsManager.sendMultipartTextMessage(destAddress, scAddress, null, null, null);
}
@Test
public void sendDataMessage_shouldStoreLastParameters() {
final short destPort = 24;
final byte[] data = new byte[]{0, 1, 2, 3, 4};
final PendingIntent sentIntent = PendingIntent.getActivity(RuntimeEnvironment.application, 10, null, 0);
final PendingIntent deliveryIntent = PendingIntent.getActivity(RuntimeEnvironment.application, 10, null, 0);
smsManager.sendDataMessage(destAddress, scAddress, destPort, data, sentIntent, deliveryIntent);
final ShadowSmsManager.DataMessageParams params = shadowOf(smsManager).getLastSentDataMessageParams();
assertThat(params.getDestinationAddress()).isEqualTo(destAddress);
assertThat(params.getScAddress()).isEqualTo(scAddress);
assertThat(params.getDestinationPort()).isEqualTo(destPort);
assertThat(params.getData()).isEqualTo(data);
assertThat(params.getSentIntent()).isSameAs(sentIntent);
assertThat(params.getDeliveryIntent()).isSameAs(deliveryIntent);
}
@Test(expected = IllegalArgumentException.class)
public void sendDataMessage_shouldThrowExceptionWithEmptyDestination() {
smsManager.sendDataMessage("", null, (short) 0, null, null, null);
}
@Test
public void clearLastSentDataMessageParams_shouldClearParameters() {
smsManager.sendDataMessage(destAddress, scAddress, (short) 0, null, null, null);
assertThat(shadowOf(smsManager).getLastSentDataMessageParams()).isNotNull();
shadowOf(smsManager).clearLastSentDataMessageParams();
assertThat(shadowOf(smsManager).getLastSentDataMessageParams()).isNull();
}
@Test
public void clearLastSentTextMessageParams_shouldClearParameters() {
smsManager.sendTextMessage(destAddress, scAddress, "testSmsBodyText", null, null);
assertThat(shadowOf(smsManager).getLastSentTextMessageParams()).isNotNull();
shadowOf(smsManager).clearLastSentTextMessageParams();
assertThat(shadowOf(smsManager).getLastSentTextMessageParams()).isNull();
}
@Test
public void clearLastSentMultipartTextMessageParams_shouldClearParameters() {
smsManager.sendMultipartTextMessage(destAddress, scAddress, Lists.newArrayList("Foo", "Bar", "Baz"), null, null);
assertThat(shadowOf(smsManager).getLastSentMultipartTextMessageParams()).isNotNull();
shadowOf(smsManager).clearLastSentMultipartTextMessageParams();
assertThat(shadowOf(smsManager).getLastSentMultipartTextMessageParams()).isNull();
}
}