package com.bumptech.glide.request.target;
import static org.junit.Assert.assertEquals;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import android.app.Notification;
import android.app.NotificationManager;
import android.content.Context;
import android.graphics.Bitmap;
import android.widget.RemoteViews;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import org.robolectric.annotation.Implementation;
import org.robolectric.annotation.Implements;
import org.robolectric.shadow.api.Shadow;
import org.robolectric.shadows.ShadowNotificationManager;
@RunWith(RobolectricTestRunner.class)
@Config(manifest = Config.NONE, sdk = 18, shadows = NotificationTargetTest
.UpdateShadowNotificationManager.class)
public class NotificationTargetTest {
private UpdateShadowNotificationManager shadowManager;
private RemoteViews remoteViews;
private int viewId;
private Notification notification;
private int notificationId;
private String notificationTag;
private NotificationTarget target;
@Before
public void setUp() {
NotificationManager notificationManager = (NotificationManager) RuntimeEnvironment.application
.getSystemService(Context.NOTIFICATION_SERVICE);
shadowManager = (UpdateShadowNotificationManager) Shadow.extract(notificationManager);
remoteViews = mock(RemoteViews.class);
viewId = 123;
notification = mock(Notification.class);
notificationId = 456;
notificationTag = "tag";
target =
new NotificationTarget(RuntimeEnvironment.application, 100 /*width*/, 100 /*height*/,
viewId, remoteViews, notification, notificationId, notificationTag);
}
@Test
public void testSetsBitmapOnRemoteViewsWithGivenImageIdOnResourceReady() {
Bitmap bitmap = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
target.onResourceReady(bitmap, null /*glideAnimation*/);
verify(remoteViews).setImageViewBitmap(eq(viewId), eq(bitmap));
}
@Test
public void updatesNotificationManagerWithNotificationIdAndNotificationOnResourceReady() {
target.onResourceReady(Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888), null
/*glideAnimation*/);
assertEquals(notificationId, shadowManager.updatedNotificationId);
assertEquals(notificationTag, shadowManager.updatedNotificationTag);
assertEquals(notification, shadowManager.updatedNotification);
}
@Test(expected = NullPointerException.class)
public void testThrowsIfContextIsNull() {
new NotificationTarget(null /*context*/, 100 /*width*/, 100 /*height*/,
123 /*viewId*/, mock(RemoteViews.class), mock(Notification.class), 456 /*notificationId*/,
"tag" /*notificationTag*/);
}
@Test(expected = NullPointerException.class)
public void testThrowsIfNotificationIsNull() {
new NotificationTarget(RuntimeEnvironment.application, 100 /*width*/, 100 /*height*/,
123 /*viewId*/, mock(RemoteViews.class), null /*notification*/, 456 /*notificationId*/,
"tag" /*notificationTag*/);
}
@Test(expected = NullPointerException.class)
public void testThrowsIfRemoteViewsIsNull() {
new NotificationTarget(RuntimeEnvironment.application, 100 /*width*/, 100 /*height*/,
123 /*viewId*/, null /*remoteViews*/, mock(Notification.class), 456 /*notificationId*/,
"tag" /*notificationTag*/);
}
@Implements(NotificationManager.class)
public static class UpdateShadowNotificationManager extends ShadowNotificationManager {
int updatedNotificationId;
String updatedNotificationTag;
Notification updatedNotification;
@Implementation
public void notify(String notificationTag, int notificationId, Notification notification) {
updatedNotificationTag = notificationTag;
updatedNotificationId = notificationId;
updatedNotification = notification;
}
}
}