1 package com.atlassian.core.util.thumbnail;
2
3 import com.atlassian.core.util.ReusableBufferedInputStream;
4 import com.google.common.base.Predicate;
5 import org.junit.Before;
6 import org.junit.Test;
7 import org.mockito.Mock;
8 import org.mockito.MockitoAnnotations;
9
10 import java.awt.image.BufferedImage;
11 import java.io.InputStream;
12
13 import static org.junit.Assert.assertEquals;
14 import static org.mockito.Matchers.any;
15 import static org.mockito.Matchers.anyInt;
16 import static org.mockito.Matchers.eq;
17 import static org.mockito.Mockito.never;
18 import static org.mockito.Mockito.times;
19 import static org.mockito.Mockito.verify;
20 import static org.mockito.Mockito.when;
21
22 public class ThumbnailRendererTest {
23
24 @Mock private Predicate<Dimensions> rasterPredicate;
25 @Mock private ImageScaler rasterScaler;
26 @Mock private ImageScaler streamScaler;
27 @Mock private DimensionsHelper dimensionsHelper;
28 @Mock private InputStream inputStream;
29 @Mock private BufferedImage image;
30
31 private ThumbnailRenderer thumbnailRenderer;
32
33 @Before
34 public void setUp() throws Exception {
35 MockitoAnnotations.initMocks(this);
36 thumbnailRenderer = new ThumbnailRenderer(rasterScaler, streamScaler, dimensionsHelper, rasterPredicate);
37 }
38
39 @Test
40 public void testRenderInMemory() throws Exception {
41 final Dimensions dimensions = new Dimensions(123, 456);
42
43 when(dimensionsHelper.dimensionsForImage(any(ReusableBufferedInputStream.class))).thenReturn(dimensions);
44 when(rasterPredicate.apply(dimensions)).thenReturn(true);
45 when(rasterScaler.scaleImage(eq(100), eq(100), any(ReusableBufferedInputStream.class))).thenReturn(image);
46
47 final BufferedImage scaledImage = thumbnailRenderer.createThumbnailImage(inputStream, 100, 100);
48
49 assertEquals(scaledImage, image);
50 verify(rasterScaler, times(1)).scaleImage(eq(100), eq(100), any(ReusableBufferedInputStream.class));
51 verify(streamScaler, never()).scaleImage(anyInt(), anyInt(), any(ReusableBufferedInputStream.class));
52 }
53
54 @Test
55 public void testRenderInStream() throws Exception {
56 final Dimensions dimensions = new Dimensions(123, 456);
57
58 when(dimensionsHelper.dimensionsForImage(inputStream)).thenReturn(dimensions);
59 when(rasterPredicate.apply(dimensions)).thenReturn(false);
60 when(streamScaler.scaleImage(eq(100), eq(100), any(ReusableBufferedInputStream.class))).thenReturn(image);
61
62 final BufferedImage scaledImage = thumbnailRenderer.createThumbnailImage(inputStream, 100, 100);
63
64 assertEquals(scaledImage, image);
65 verify(streamScaler, times(1)).scaleImage(eq(100), eq(100), any(ReusableBufferedInputStream.class));
66 verify(rasterScaler, never()).scaleImage(anyInt(), anyInt(), any(ReusableBufferedInputStream.class));
67 }
68 }