package org.robolectric.shadows;
import android.app.Notification;
import android.app.PendingIntent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.Icon;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.R;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.TestRunners;
import org.robolectric.annotation.Config;
import static android.os.Build.VERSION_CODES.JELLY_BEAN_MR1;
import static android.os.Build.VERSION_CODES.JELLY_BEAN_MR2;
import static android.os.Build.VERSION_CODES.M;
import static org.assertj.core.api.Assertions.assertThat;
import static org.robolectric.Shadows.shadowOf;
@RunWith(TestRunners.MultiApiSelfTest.class)
public class ShadowNotificationBuilderTest {
private final Notification.Builder builder = new Notification.Builder(RuntimeEnvironment.application);
@Test
public void build_setsContentTitleOnNotification() throws Exception {
Notification notification = builder.setContentTitle("Hello").build();
assertThat(shadowOf(notification).getContentTitle().toString()).isEqualTo("Hello");
}
@Test
public void build_whenSetOngoingNotSet_leavesSetOngoingAsFalse() {
Notification notification = builder.build();
assertThat(shadowOf(notification).isOngoing()).isFalse();
}
@Test
public void build_whenSetOngoing_setsOngoingToTrue() {
Notification notification = builder.setOngoing(true).build();
assertThat(shadowOf(notification).isOngoing()).isTrue();
}
@Test
@Config(minSdk = JELLY_BEAN_MR1)
public void build_whenShowWhenNotSet_setsShowWhenOnNotificationToTrue() {
Notification notification = builder.setWhen(100).setShowWhen(true).build();
assertThat(shadowOf(notification).isWhenShown()).isTrue();
}
@Test
@Config(minSdk = JELLY_BEAN_MR1)
public void build_setShowWhenOnNotification() {
Notification notification = builder.setShowWhen(false).build();
assertThat(shadowOf(notification).isWhenShown()).isFalse();
}
@Test
public void build_setsContentTextOnNotification() throws Exception {
Notification notification = builder.setContentText("Hello Text").build();
assertThat(shadowOf(notification).getContentText().toString()).isEqualTo("Hello Text");
}
@Test
public void build_setsTickerOnNotification() throws Exception {
Notification notification = builder.setTicker("My ticker").build();
assertThat(notification.tickerText).isEqualTo("My ticker");
}
@Test
public void build_setsContentInfoOnNotification() throws Exception {
builder.setContentInfo("11");
Notification notification = builder.build();
assertThat(shadowOf(notification).getContentInfo().toString()).isEqualTo("11");
}
@Test
@Config(minSdk = M)
public void build_setsIconOnNotification() throws Exception {
Notification notification = builder.setSmallIcon(R.drawable.an_image).build();
assertThat(notification.getSmallIcon().getResId()).isEqualTo(R.drawable.an_image);
}
@Test
public void build_setsWhenOnNotification() throws Exception {
Notification notification = builder.setWhen(11L).build();
assertThat(notification.when).isEqualTo(11L);
}
@Test
public void build_setsProgressOnNotification_true() throws Exception {
Notification notification = builder.setProgress(36, 57, true).build();
// If indeterminate then max and progress values are ignored.
assertThat(shadowOf(notification).isIndeterminate()).isTrue();
}
@Test
public void build_setsProgressOnNotification_false() throws Exception {
Notification notification = builder.setProgress(50, 10, false).build();
assertThat(shadowOf(notification).getMax()).isEqualTo(50);
assertThat(shadowOf(notification).getProgress()).isEqualTo(10);
assertThat(shadowOf(notification).isIndeterminate()).isFalse();
}
@Test
@Config(minSdk = JELLY_BEAN_MR1)
public void build_setsUsesChronometerOnNotification_true() throws Exception {
Notification notification = builder.setUsesChronometer(true).setWhen(10).setShowWhen(true).build();
assertThat(shadowOf(notification).usesChronometer()).isTrue();
}
@Test
@Config(minSdk = JELLY_BEAN_MR1)
public void build_setsUsesChronometerOnNotification_false() throws Exception {
Notification notification = builder.setUsesChronometer(false).setWhen(10).setShowWhen(true).build();
assertThat(shadowOf(notification).usesChronometer()).isFalse();
}
@Test
public void build_handlesNullContentTitle() {
Notification notification = builder.setContentTitle(null).build();
assertThat(shadowOf(notification).getContentTitle()).isNullOrEmpty();
}
@Test
public void build_handlesNullContentText() {
Notification notification = builder.setContentText(null).build();
assertThat(shadowOf(notification).getContentText()).isNullOrEmpty();
}
@Test
public void build_handlesNullTicker() {
Notification notification = builder.setTicker(null).build();
assertThat(notification.tickerText).isNull();
}
@Test
public void build_handlesNullContentInfo() {
Notification notification = builder.setContentInfo(null).build();
assertThat(shadowOf(notification).getContentInfo()).isNullOrEmpty();
}
@Test
@Config(minSdk = JELLY_BEAN_MR2)
public void build_addsActionToNotification() throws Exception {
PendingIntent action = PendingIntent.getBroadcast(RuntimeEnvironment.application, 0, null, 0);
Notification notification = builder.addAction(0, "Action", action).build();
assertThat(notification.actions[0].actionIntent).isEqualToComparingFieldByField(action);
}
@Test
public void withBigTextStyle() {
Notification notification = builder.setStyle(new Notification.BigTextStyle(builder)
.bigText("BigText")
.setBigContentTitle("Title")
.setSummaryText("Summary"))
.build();
assertThat(shadowOf(notification).getBigText()).isEqualTo("BigText");
assertThat(shadowOf(notification).getBigContentTitle()).isEqualTo("Title");
assertThat(shadowOf(notification).getBigContentText()).isEqualTo("Summary");
assertThat(shadowOf(notification).getBigPicture()).isNull();
}
@Test
@Config(minSdk = M)
public void withBigPictureStyle() {
Bitmap bigPicture = BitmapFactory.decodeResource(RuntimeEnvironment.application.getResources(), R.drawable.an_image);
Icon bigLargeIcon = Icon.createWithBitmap(bigPicture);
Notification notification = builder.setStyle(new Notification.BigPictureStyle(builder)
.bigPicture(bigPicture)
.bigLargeIcon(bigLargeIcon))
.build();
assertThat(shadowOf(notification).getBigPicture()).isEqualTo(bigPicture);
}
}