/* * Copyright (C) 2013 Square, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.squareup.picasso; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricGradleTestRunner; import static android.graphics.Bitmap.Config.RGB_565; import static com.squareup.picasso.RequestHandler.calculateInSampleSize; import static com.squareup.picasso.RequestHandler.createBitmapOptions; import static com.squareup.picasso.RequestHandler.requiresInSampleSize; import static com.squareup.picasso.TestUtils.URI_1; import static org.fest.assertions.api.Assertions.assertThat; @RunWith(RobolectricGradleTestRunner.class) public class RequestHandlerTest { @Test public void bitmapConfig() throws Exception { for (Bitmap.Config config : Bitmap.Config.values()) { Request data = new Request.Builder(URI_1).config(config).build(); Request copy = data.buildUpon().build(); assertThat(createBitmapOptions(data).inPreferredConfig).isSameAs(config); assertThat(createBitmapOptions(copy).inPreferredConfig).isSameAs(config); } } @Test public void requiresComputeInSampleSize() { assertThat(requiresInSampleSize(null)).isFalse(); final BitmapFactory.Options defaultOptions = new BitmapFactory.Options(); assertThat(requiresInSampleSize(defaultOptions)).isFalse(); final BitmapFactory.Options justBounds = new BitmapFactory.Options(); justBounds.inJustDecodeBounds = true; assertThat(requiresInSampleSize(justBounds)).isTrue(); } @Test public void calculateInSampleSizeNoResize() { final BitmapFactory.Options options = new BitmapFactory.Options(); Request data = new Request.Builder(URI_1).build(); calculateInSampleSize(100, 100, 150, 150, options, data); assertThat(options.inSampleSize).isEqualTo(1); } @Test public void calculateInSampleSizeResize() { final BitmapFactory.Options options = new BitmapFactory.Options(); Request data = new Request.Builder(URI_1).build(); calculateInSampleSize(100, 100, 200, 200, options, data); assertThat(options.inSampleSize).isEqualTo(2); } @Test public void calculateInSampleSizeResizeCenterInside() { final BitmapFactory.Options options = new BitmapFactory.Options(); Request data = new Request.Builder(URI_1).centerInside().resize(100, 100).build(); calculateInSampleSize(data.targetWidth, data.targetHeight, 400, 200, options, data); assertThat(options.inSampleSize).isEqualTo(4); } @Test public void calculateInSampleSizeKeepAspectRatioWithWidth() { final BitmapFactory.Options options = new BitmapFactory.Options(); Request data = new Request.Builder(URI_1).resize(400, 0).build(); calculateInSampleSize(data.targetWidth, data.targetHeight, 800, 200, options, data); assertThat(options.inSampleSize).isEqualTo(2); } @Test public void calculateInSampleSizeKeepAspectRatioWithHeight() { final BitmapFactory.Options options = new BitmapFactory.Options(); Request data = new Request.Builder(URI_1).resize(0, 100).build(); calculateInSampleSize(data.targetWidth, data.targetHeight, 800, 200, options, data); assertThat(options.inSampleSize).isEqualTo(2); } @Test public void nullBitmapOptionsIfNoResizingOrPurgeable() { // No resize must return no bitmap options final Request noResize = new Request.Builder(URI_1).build(); final BitmapFactory.Options noResizeOptions = createBitmapOptions(noResize); assertThat(noResizeOptions).isNull(); } @Test public void inJustDecodeBoundsIfResizing() { // Resize must return bitmap options with inJustDecodeBounds = true final Request requiresResize = new Request.Builder(URI_1).resize(20, 15).build(); final BitmapFactory.Options resizeOptions = createBitmapOptions(requiresResize); assertThat(resizeOptions).isNotNull(); assertThat(resizeOptions.inJustDecodeBounds).isTrue(); assertThat(resizeOptions.inPurgeable).isFalse(); assertThat(resizeOptions.inInputShareable).isFalse(); } @Test public void inPurgeableIfInPurgeable() { final Request request = new Request.Builder(URI_1).purgeable().build(); final BitmapFactory.Options options = createBitmapOptions(request); assertThat(options).isNotNull(); assertThat(options.inPurgeable).isTrue(); assertThat(options.inInputShareable).isTrue(); assertThat(options.inJustDecodeBounds).isFalse(); } @Test public void createWithConfigAndNotInJustDecodeBoundsOrInPurgeable() { // Given a config, must return bitmap options and false inJustDecodeBounds/inPurgeable final Request config = new Request.Builder(URI_1).config(RGB_565).build(); final BitmapFactory.Options configOptions = createBitmapOptions(config); assertThat(configOptions).isNotNull(); assertThat(configOptions.inJustDecodeBounds).isFalse(); assertThat(configOptions.inPurgeable).isFalse(); assertThat(configOptions.inInputShareable).isFalse(); } }