@NonNull @Override public Request transformRequest(@NonNull Request request) { return new Request.Builder(0).build(); } };
/** * Crops an image inside of the bounds specified by {@link #resize(int, int)} rather than * distorting the aspect ratio. This cropping technique scales the image so that it fills the * requested bounds and then crops the extra. */ @NonNull public Builder centerCrop() { return centerCrop(Gravity.CENTER); }
@Test public void centerInsideResultMatchesTargetSizeWhileDesiredHeightIs0() { Request request = new Request.Builder(URI_1).resize(1080, 0).centerInside().build(); Bitmap source = Bitmap.createBitmap(640, 640, ARGB_8888); Bitmap result = transformResult(request, source, 0); assertThat(result.getWidth()).isEqualTo(1080); assertThat(result.getHeight()).isEqualTo(1080); }
throw new IllegalStateException("Fit cannot be used with fetch."); if (data.hasImage()) { if (!data.hasPriority()) { data.priority(Priority.LOW);
@Test public void crashingOnTransformationThrows() { Transformation badTransformation = new Transformation() { @Override public RequestHandler.Result transform(RequestHandler.Result source) { throw new NullPointerException("hello"); } @Override public String key() { return "test"; } }; List<Transformation> transformations = Collections.singletonList(badTransformation); Bitmap original = Bitmap.createBitmap(10, 10, ARGB_8888); RequestHandler.Result result = new RequestHandler.Result(original, MEMORY, 0); Request data = new Request.Builder(URI_1).build(); try { BitmapHunter.applyTransformations(picasso, data, transformations, result); fail("Expected exception to be thrown."); } catch (RuntimeException e) { assertThat(e).hasMessageThat().isEqualTo("Transformation " + badTransformation.key() + " crashed with exception."); } }
@Test public void matchingRequestsHaveSameKey() { Request request = new Request.Builder(URI_1).build(); Request request2 = new Request.Builder(URI_1).build(); assertThat(request.key).isEqualTo(request2.key); Transformation t1 = new TestTransformation("foo", null); Transformation t2 = new TestTransformation("foo", null); Request requestTransform1 = new Request.Builder(URI_1).transform(t1).build(); Request requestTransform2 = new Request.Builder(URI_1).transform(t2).build(); assertThat(requestTransform1.key).isEqualTo(requestTransform2.key); Transformation t3 = new TestTransformation("foo", null); Transformation t4 = new TestTransformation("bar", null); Request requestTransform3 = new Request.Builder(URI_1).transform(t3).transform(t4).build(); Request requestTransform4 = new Request.Builder(URI_1).transform(t3).transform(t4).build(); assertThat(requestTransform3.key).isEqualTo(requestTransform4.key); Transformation t5 = new TestTransformation("foo", null); Transformation t6 = new TestTransformation("bar", null); Request requestTransform5 = new Request.Builder(URI_1).transform(t5).transform(t6).build(); Request requestTransform6 = new Request.Builder(URI_1).transform(t6).transform(t5).build(); assertThat(requestTransform5.key).isNotEqualTo(requestTransform6.key); }
@Test public void throwWhenTransformRequestReturnsNull() { RequestTransformer brokenTransformer = new RequestTransformer() { @Override public Request transformRequest(Request request) { return null; } }; Picasso picasso = new Picasso(context, dispatcher, UNUSED_CALL_FACTORY, null, cache, listener, Collections.singletonList(brokenTransformer), NO_HANDLERS, stats, ARGB_8888, false, false); Request request = new Request.Builder(URI_1).build(); try { picasso.transformRequest(request); fail("Returning null from transformRequest() should throw"); } catch (IllegalStateException expected) { assertThat(expected).hasMessageThat() .isEqualTo("Request transformer " + brokenTransformer.getClass().getCanonicalName() + " returned null for " + request); } }
@Test public void resumeActionImmediatelyCompletesCachedRequest() { cache.set(URI_KEY_1, bitmap); Request request = new Request.Builder(URI_1, 0, ARGB_8888).build(); Action action = new Action(mockPicasso(), request) { @Override void complete(RequestHandler.Result result) { assertThat(result.getBitmap()).isEqualTo(bitmap); assertThat(result.getLoadedFrom()).isEqualTo(MEMORY); } @Override void error(Exception e) { fail("Reading from memory cache should not throw an exception"); } @NonNull @Override Object getTarget() { return this; } }; picasso.resumeAction(action); }
@Test public void resumeActionTriggersSubmitOnPausedAction() { Request request = new Request.Builder(URI_1, 0, ARGB_8888).build(); Action action = new Action(mockPicasso(), request) { @Override void complete(RequestHandler.Result result) { fail("Test execution should not call this method"); } @Override void error(Exception e) { fail("Test execution should not call this method"); } @NonNull @Override Object getTarget() { return this; } }; picasso.resumeAction(action); verify(dispatcher).dispatchSubmit(action); }
@Test public void decodesVideoThumbnailWithVideoMimeType() { final Bitmap bitmap = makeBitmap(); Request request = new Request.Builder(MEDIA_STORE_CONTENT_1_URL, 0, ARGB_8888) .stableKey(MEDIA_STORE_CONTENT_KEY_1).resize(100, 100).build(); Action action = mockAction(request); MediaStoreRequestHandler requestHandler = create("video/"); requestHandler.load(null, action.request, new RequestHandler.Callback() { @Override public void onSuccess(Result result) { assertBitmapsEqual(result.getBitmap(), bitmap); } @Override public void onError(@NonNull Throwable t) { fail(t.getMessage()); } }); }
@Test public void decodesImageThumbnailWithImageMimeType() { final Bitmap bitmap = makeBitmap(20, 20); Request request = new Request.Builder(MEDIA_STORE_CONTENT_1_URL, 0, ARGB_8888) .stableKey(MEDIA_STORE_CONTENT_KEY_1).resize(100, 100).build(); Action action = mockAction(request); MediaStoreRequestHandler requestHandler = create("image/png"); requestHandler.load(null, action.request, new RequestHandler.Callback() { @Override public void onSuccess(Result result) { assertBitmapsEqual(result.getBitmap(), bitmap); } @Override public void onError(@NonNull Throwable t) { fail(t.getMessage()); } }); }
static Request mockRequest(Uri uri) { return new Request.Builder(uri).build(); }
@Test public void centerCropTallTooSmall() { Bitmap source = Bitmap.createBitmap(10, 20, ARGB_8888); Request data = new Request.Builder(URI_1).resize(40, 40).centerCrop().build(); Bitmap result = transformResult(data, source, 0); ShadowBitmap shadowBitmap = shadowOf(result); assertThat(shadowBitmap.getCreatedFromBitmap()).isSameAs(source); assertThat(shadowBitmap.getCreatedFromX()).isEqualTo(0); assertThat(shadowBitmap.getCreatedFromY()).isEqualTo(5); assertThat(shadowBitmap.getCreatedFromWidth()).isEqualTo(10); assertThat(shadowBitmap.getCreatedFromHeight()).isEqualTo(10); Matrix matrix = shadowBitmap.getCreatedFromMatrix(); ShadowMatrix shadowMatrix = shadowOf(matrix); assertThat(shadowMatrix.getPreOperations()).containsExactly("scale 4.0 4.0"); }
@Test public void centerCropWithGravityHorizontalLeft() { Bitmap source = Bitmap.createBitmap(20, 10, ARGB_8888); Request data = new Request.Builder(URI_1).resize(40, 40).centerCrop(Gravity.LEFT).build(); Bitmap result = transformResult(data, source, 0); ShadowBitmap shadowBitmap = shadowOf(result); assertThat(shadowBitmap.getCreatedFromBitmap()).isSameAs(source); assertThat(shadowBitmap.getCreatedFromX()).isEqualTo(0); assertThat(shadowBitmap.getCreatedFromY()).isEqualTo(0); assertThat(shadowBitmap.getCreatedFromWidth()).isEqualTo(10); assertThat(shadowBitmap.getCreatedFromHeight()).isEqualTo(10); Matrix matrix = shadowBitmap.getCreatedFromMatrix(); ShadowMatrix shadowMatrix = shadowOf(matrix); assertThat(shadowMatrix.getPreOperations()).containsExactly("scale 4.0 4.0"); }
@Test public void centerCropWithGravityVerticalBottom() { Bitmap source = Bitmap.createBitmap(10, 20, ARGB_8888); Request data = new Request.Builder(URI_1).resize(40, 40).centerCrop(Gravity.BOTTOM).build(); Bitmap result = transformResult(data, source, 0); ShadowBitmap shadowBitmap = shadowOf(result); assertThat(shadowBitmap.getCreatedFromBitmap()).isSameAs(source); assertThat(shadowBitmap.getCreatedFromX()).isEqualTo(0); assertThat(shadowBitmap.getCreatedFromY()).isEqualTo(10); assertThat(shadowBitmap.getCreatedFromWidth()).isEqualTo(10); assertThat(shadowBitmap.getCreatedFromHeight()).isEqualTo(10); Matrix matrix = shadowBitmap.getCreatedFromMatrix(); ShadowMatrix shadowMatrix = shadowOf(matrix); assertThat(shadowMatrix.getPreOperations()).containsExactly("scale 4.0 4.0"); }
@Test public void centerCropWithGravityVerticalTop() { Bitmap source = Bitmap.createBitmap(10, 20, ARGB_8888); Request data = new Request.Builder(URI_1).resize(40, 40).centerCrop(Gravity.TOP).build(); Bitmap result = transformResult(data, source, 0); ShadowBitmap shadowBitmap = shadowOf(result); assertThat(shadowBitmap.getCreatedFromBitmap()).isSameAs(source); assertThat(shadowBitmap.getCreatedFromX()).isEqualTo(0); assertThat(shadowBitmap.getCreatedFromY()).isEqualTo(0); assertThat(shadowBitmap.getCreatedFromWidth()).isEqualTo(10); assertThat(shadowBitmap.getCreatedFromHeight()).isEqualTo(10); Matrix matrix = shadowBitmap.getCreatedFromMatrix(); ShadowMatrix shadowMatrix = shadowOf(matrix); assertThat(shadowMatrix.getPreOperations()).containsExactly("scale 4.0 4.0"); }
@Test public void centerCropTallTooLarge() { Bitmap source = Bitmap.createBitmap(100, 200, ARGB_8888); Request data = new Request.Builder(URI_1).resize(50, 50).centerCrop().build(); Bitmap result = transformResult(data, source, 0); ShadowBitmap shadowBitmap = shadowOf(result); assertThat(shadowBitmap.getCreatedFromBitmap()).isSameAs(source); assertThat(shadowBitmap.getCreatedFromX()).isEqualTo(0); assertThat(shadowBitmap.getCreatedFromY()).isEqualTo(50); assertThat(shadowBitmap.getCreatedFromWidth()).isEqualTo(100); assertThat(shadowBitmap.getCreatedFromHeight()).isEqualTo(100); Matrix matrix = shadowBitmap.getCreatedFromMatrix(); ShadowMatrix shadowMatrix = shadowOf(matrix); assertThat(shadowMatrix.getPreOperations()).containsExactly("scale 0.5 0.5"); }
@Test public void centerCropWideTooLarge() { Bitmap source = Bitmap.createBitmap(200, 100, ARGB_8888); Request data = new Request.Builder(URI_1).resize(50, 50).centerCrop().build(); Bitmap result = transformResult(data, source, 0); ShadowBitmap shadowBitmap = shadowOf(result); assertThat(shadowBitmap.getCreatedFromBitmap()).isSameAs(source); assertThat(shadowBitmap.getCreatedFromX()).isEqualTo(50); assertThat(shadowBitmap.getCreatedFromY()).isEqualTo(0); assertThat(shadowBitmap.getCreatedFromWidth()).isEqualTo(100); assertThat(shadowBitmap.getCreatedFromHeight()).isEqualTo(100); Matrix matrix = shadowBitmap.getCreatedFromMatrix(); ShadowMatrix shadowMatrix = shadowOf(matrix); assertThat(shadowMatrix.getPreOperations()).containsExactly("scale 0.5 0.5"); }
@Test public void centerCropWideTooSmall() { Bitmap source = Bitmap.createBitmap(20, 10, ARGB_8888); Request data = new Request.Builder(URI_1).resize(40, 40).centerCrop().build(); Bitmap result = transformResult(data, source, 0); ShadowBitmap shadowBitmap = shadowOf(result); assertThat(shadowBitmap.getCreatedFromBitmap()).isSameAs(source); assertThat(shadowBitmap.getCreatedFromX()).isEqualTo(5); assertThat(shadowBitmap.getCreatedFromY()).isEqualTo(0); assertThat(shadowBitmap.getCreatedFromWidth()).isEqualTo(10); assertThat(shadowBitmap.getCreatedFromHeight()).isEqualTo(10); Matrix matrix = shadowBitmap.getCreatedFromMatrix(); ShadowMatrix shadowMatrix = shadowOf(matrix); assertThat(shadowMatrix.getPreOperations()).containsExactly("scale 4.0 4.0"); }