package com.bumptech.glide.resize.load; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertEquals; import com.bumptech.glide.load.engine.bitmap_recycle.ArrayPool; import com.bumptech.glide.load.engine.bitmap_recycle.LruArrayPool; import com.bumptech.glide.load.resource.bitmap.DefaultImageHeaderParser; import com.bumptech.glide.testutil.TestResourceUtil; import java.io.IOException; import java.io.InputStream; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; @RunWith(RobolectricTestRunner.class) @Config(manifest = Config.NONE, sdk = 18) public class ExifTest { private ArrayPool byteArrayPool; private InputStream open(String imageName) throws IOException { return TestResourceUtil.openResource(getClass(), "exif-orientation-examples/" + imageName); } private void assertOrientation(String filePrefix, int expectedOrientation) { InputStream is = null; try { is = open(filePrefix + "_" + expectedOrientation + ".jpg"); assertEquals(new DefaultImageHeaderParser().getOrientation(is, byteArrayPool), expectedOrientation); } catch (IOException e) { throw new RuntimeException(e); } finally { if (is != null) { try { is.close(); } catch (IOException e) { // Do nothing. } } } } @Before public void setUp() { byteArrayPool = new LruArrayPool(); } @Test public void testIssue387() throws IOException { InputStream is = TestResourceUtil.openResource(getClass(), "issue387_rotated_jpeg.jpg"); assertThat(new DefaultImageHeaderParser().getOrientation(is, byteArrayPool)).isEqualTo(6); } @Test public void testLandscape() throws IOException { for (int i = 1; i <= 8; i++) { assertOrientation("Landscape", i); } } @Test public void testPortrait() throws IOException { for (int i = 1; i <= 8; i++) { assertOrientation("Portrait", i); } } @Test public void testHandlesInexactSizesInByteArrayPools() { for (int i = 1; i <= 8; i++) { byteArrayPool.put(new byte[ArrayPool.STANDARD_BUFFER_SIZE_BYTES], byte[].class); assertOrientation("Portrait", i); } for (int i = 1; i <= 8; i++) { byteArrayPool.put(new byte[ArrayPool.STANDARD_BUFFER_SIZE_BYTES], byte[].class); assertOrientation("Landscape", i); } } }