View Javadoc

1   package com.atlassian.core.util.thumbnail;
2   
3   import com.atlassian.core.util.ReusableBufferedInputStream;
4   import com.google.common.base.Optional;
5   import org.junit.Before;
6   import org.junit.Test;
7   import org.mockito.Mock;
8   import org.mockito.MockitoAnnotations;
9   
10  import javax.imageio.ImageReadParam;
11  import javax.imageio.ImageReader;
12  import javax.imageio.stream.ImageInputStream;
13  import java.awt.image.BufferedImage;
14  import java.io.IOException;
15  import java.io.InputStream;
16  
17  import static org.junit.Assert.assertEquals;
18  import static org.mockito.Mockito.mock;
19  import static org.mockito.Mockito.verify;
20  import static org.mockito.Mockito.when;
21  
22  public class StreamImageScaleTest {
23  
24      @Mock private DimensionsHelper dimensionsHelper;
25      @Mock private ReusableBufferedInputStream inputStream;
26  
27      @Before
28      public void setUp() throws Exception {
29          MockitoAnnotations.initMocks(this);
30      }
31  
32      @Test
33      public void testStreamImageHappyPath() throws Exception {
34          final ImageReader imageReader = mock(ImageReader.class);
35          final ImageReadParam readParam = mock(ImageReadParam.class);
36          final BufferedImage scaledImage = mock(BufferedImage.class);
37          final BufferedImage croppedImage = mock(BufferedImage.class);
38  
39          final StreamImageScale imageScale = create(imageReader);
40          when(imageReader.getWidth(0)).thenReturn(200);
41          when(imageReader.getHeight(0)).thenReturn(400);
42          when(dimensionsHelper.determineScaledDimensions(100, 100, 200, 400)).thenReturn(new Dimensions(50, 100));
43          when(imageReader.getDefaultReadParam()).thenReturn(readParam);
44          when(imageReader.read(0, readParam)).thenReturn(scaledImage);
45          when(scaledImage.getWidth()).thenReturn(49);
46          when(scaledImage.getHeight()).thenReturn(99);
47          when(scaledImage.getSubimage(0, 0, 49, 99)).thenReturn(croppedImage);
48  
49          final BufferedImage bufferedImage = imageScale.scaleImage(100, 100, inputStream);
50  
51          assertEquals(croppedImage, bufferedImage);
52          verify(readParam).setSourceSubsampling(4, 4, 0, 0);
53  
54          verify(imageReader).dispose();
55      }
56  
57      @Test(expected = IOException.class)
58      public void testInvalidImageThrowsIOException() throws Exception {
59          final StreamImageScale streamImageScale = create(null);
60          streamImageScale.scaleImage(100, 100, inputStream);
61      }
62  
63      private StreamImageScale create(final ImageReader imageReader)
64      {
65          return new StreamImageScale(dimensionsHelper)
66          {
67              @Override
68              ImageInputStream getImageInputStream(InputStream inputStream) throws IOException {
69                  return null;
70              }
71  
72              @Override
73              Optional<ImageReader> getImageReader(ImageInputStream inputStream) throws IOException {
74                  return Optional.fromNullable(imageReader);
75              }
76          };
77      }
78  
79  }