提交 0b3e84bb 编写于 作者: S Sam Judd

Convert SingleRequestTest Harness to a SingleRequestBuilder.

上级 bbb25aff
...@@ -2,7 +2,7 @@ package com.bumptech.glide.request; ...@@ -2,7 +2,7 @@ package com.bumptech.glide.request;
import static com.bumptech.glide.tests.Util.isADataSource; import static com.bumptech.glide.tests.Util.isADataSource;
import static com.bumptech.glide.tests.Util.mockResource; import static com.bumptech.glide.tests.Util.mockResource;
import static org.junit.Assert.assertEquals; import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
import static org.mockito.Matchers.any; import static org.mockito.Matchers.any;
...@@ -50,112 +50,62 @@ import org.robolectric.annotation.Config; ...@@ -50,112 +50,62 @@ import org.robolectric.annotation.Config;
@Config(manifest = Config.NONE, sdk = 18) @Config(manifest = Config.NONE, sdk = 18)
@SuppressWarnings("rawtypes") @SuppressWarnings("rawtypes")
public class SingleRequestTest { public class SingleRequestTest {
private RequestHarness harness = new RequestHarness();
/**
* {@link Number} and {@link List} are arbitrarily chosen types to test some type safety as well.
* Both are in the middle of the hierarchy having multiple descendants and ancestors.
*/
private static class RequestHarness {
Engine engine = mock(Engine.class);
Number model = 123456;
@SuppressWarnings("unchecked")
Target<List> target = mock(Target.class);
Resource<List> resource = mockResource();
RequestCoordinator requestCoordinator = mock(RequestCoordinator.class);
Drawable placeholderDrawable = null;
Drawable errorDrawable = null;
Drawable fallbackDrawable = null;
@SuppressWarnings("unchecked")
RequestListener<List> requestListener = mock(RequestListener.class);
@SuppressWarnings("unchecked")
TransitionFactory<List> factory = mock(TransitionFactory.class);
int overrideWidth = -1;
int overrideHeight = -1;
List<?> result = new ArrayList<>();
GlideContext glideContext = mock(GlideContext.class);
Key signature = mock(Key.class);
Priority priority = Priority.HIGH;
boolean useUnlimitedSourceGeneratorsPool = false;
Class<List> transcodeClass = List.class;
Map<Class<?>, Transformation<?>> transformations = new HashMap<>();
public RequestHarness() {
when(requestCoordinator.canSetImage(any(Request.class))).thenReturn(true);
when(requestCoordinator.canNotifyStatusChanged(any(Request.class))).thenReturn(true);
when(resource.get()).thenReturn(result);
}
public SingleRequest<List> getRequest() { private SingleRequestBuilder builder;
RequestOptions requestOptions = new RequestOptions()
.error(errorDrawable)
.placeholder(placeholderDrawable)
.fallback(fallbackDrawable)
.override(overrideWidth, overrideHeight)
.priority(priority)
.signature(signature)
.useUnlimitedSourceGeneratorsPool(useUnlimitedSourceGeneratorsPool);
return SingleRequest
.obtain(glideContext, glideContext, model, transcodeClass, requestOptions, overrideWidth,
overrideHeight, priority, target, requestListener, requestCoordinator, engine,
factory);
}
}
@Before @Before
public void setUp() { public void setUp() {
harness = new RequestHarness(); builder = new SingleRequestBuilder();
} }
@Test @Test
public void testIsNotCompleteBeforeReceivingResource() { public void testIsNotCompleteBeforeReceivingResource() {
SingleRequest<List> request = harness.getRequest(); SingleRequest<List> request = builder.build();
assertFalse(request.isComplete()); assertFalse(request.isComplete());
} }
@Test @Test
public void testCanHandleNullResources() { public void testCanHandleNullResources() {
SingleRequest<List> request = harness.getRequest(); SingleRequest<List> request = builder.build();
request.onResourceReady(null, DataSource.LOCAL); request.onResourceReady(null, DataSource.LOCAL);
assertTrue(request.isFailed()); assertTrue(request.isFailed());
verify(harness.requestListener).onLoadFailed(isAGlideException(), isA(Number.class), verify(builder.requestListener).onLoadFailed(isAGlideException(), isA(Number.class),
eq(harness.target), anyBoolean()); eq(builder.target), anyBoolean());
} }
@Test @Test
public void testCanHandleEmptyResources() { public void testCanHandleEmptyResources() {
SingleRequest<List> request = harness.getRequest(); SingleRequest<List> request = builder.build();
when(harness.resource.get()).thenReturn(null); when(builder.resource.get()).thenReturn(null);
request.onResourceReady(harness.resource, DataSource.REMOTE); request.onResourceReady(builder.resource, DataSource.REMOTE);
assertTrue(request.isFailed()); assertTrue(request.isFailed());
verify(harness.engine).release(eq(harness.resource)); verify(builder.engine).release(eq(builder.resource));
verify(harness.requestListener).onLoadFailed(isAGlideException(), any(Number.class), verify(builder.requestListener).onLoadFailed(isAGlideException(), any(Number.class),
eq(harness.target), anyBoolean()); eq(builder.target), anyBoolean());
} }
@Test @Test
public void testCanHandleNonConformingResources() { public void testCanHandleNonConformingResources() {
SingleRequest<List> request = harness.getRequest(); SingleRequest<List> request = builder.build();
when(((Resource) (harness.resource)).get()) when(((Resource) (builder.resource)).get())
.thenReturn("Invalid mocked String, this should be a List"); .thenReturn("Invalid mocked String, this should be a List");
request.onResourceReady(harness.resource, DataSource.DATA_DISK_CACHE); request.onResourceReady(builder.resource, DataSource.DATA_DISK_CACHE);
assertTrue(request.isFailed()); assertTrue(request.isFailed());
verify(harness.engine).release(eq(harness.resource)); verify(builder.engine).release(eq(builder.resource));
verify(harness.requestListener).onLoadFailed(isAGlideException(), any(Number.class), verify(builder.requestListener).onLoadFailed(isAGlideException(), any(Number.class),
eq(harness.target), anyBoolean()); eq(builder.target), anyBoolean());
} }
@Test @Test
public void testIsNotFailedAfterClear() { public void testIsNotFailedAfterClear() {
SingleRequest<List> request = harness.getRequest(); SingleRequest<List> request = builder.build();
request.onResourceReady(null, DataSource.DATA_DISK_CACHE); request.onResourceReady(null, DataSource.DATA_DISK_CACHE);
request.clear(); request.clear();
...@@ -165,7 +115,7 @@ public class SingleRequestTest { ...@@ -165,7 +115,7 @@ public class SingleRequestTest {
@Test @Test
public void testIsPausedAfterPause() { public void testIsPausedAfterPause() {
SingleRequest<List> request = harness.getRequest(); SingleRequest<List> request = builder.build();
request.pause(); request.pause();
assertTrue(request.isPaused()); assertTrue(request.isPaused());
...@@ -173,7 +123,7 @@ public class SingleRequestTest { ...@@ -173,7 +123,7 @@ public class SingleRequestTest {
@Test @Test
public void testIsNotCancelledAfterPause() { public void testIsNotCancelledAfterPause() {
SingleRequest<List> request = harness.getRequest(); SingleRequest<List> request = builder.build();
request.pause(); request.pause();
assertFalse(request.isCancelled()); assertFalse(request.isCancelled());
...@@ -181,7 +131,7 @@ public class SingleRequestTest { ...@@ -181,7 +131,7 @@ public class SingleRequestTest {
@Test @Test
public void testIsNotPausedAfterBeginningWhilePaused() { public void testIsNotPausedAfterBeginningWhilePaused() {
SingleRequest<List> request = harness.getRequest(); SingleRequest<List> request = builder.build();
request.pause(); request.pause();
request.begin(); request.begin();
...@@ -191,7 +141,7 @@ public class SingleRequestTest { ...@@ -191,7 +141,7 @@ public class SingleRequestTest {
@Test @Test
public void testIsNotFailedAfterBegin() { public void testIsNotFailedAfterBegin() {
SingleRequest<List> request = harness.getRequest(); SingleRequest<List> request = builder.build();
request.onResourceReady(null, DataSource.DATA_DISK_CACHE); request.onResourceReady(null, DataSource.DATA_DISK_CACHE);
request.begin(); request.begin();
...@@ -201,17 +151,17 @@ public class SingleRequestTest { ...@@ -201,17 +151,17 @@ public class SingleRequestTest {
@Test @Test
public void testIsCompleteAfterReceivingResource() { public void testIsCompleteAfterReceivingResource() {
SingleRequest<List> request = harness.getRequest(); SingleRequest<List> request = builder.build();
request.onResourceReady(harness.resource, DataSource.LOCAL); request.onResourceReady(builder.resource, DataSource.LOCAL);
assertTrue(request.isComplete()); assertTrue(request.isComplete());
} }
@Test @Test
public void testIsNotCompleteAfterClear() { public void testIsNotCompleteAfterClear() {
SingleRequest<List> request = harness.getRequest(); SingleRequest<List> request = builder.build();
request.onResourceReady(harness.resource, DataSource.REMOTE); request.onResourceReady(builder.resource, DataSource.REMOTE);
request.clear(); request.clear();
assertFalse(request.isComplete()); assertFalse(request.isComplete());
...@@ -219,7 +169,7 @@ public class SingleRequestTest { ...@@ -219,7 +169,7 @@ public class SingleRequestTest {
@Test @Test
public void testIsCancelledAfterClear() { public void testIsCancelledAfterClear() {
SingleRequest<List> request = harness.getRequest(); SingleRequest<List> request = builder.build();
request.clear(); request.clear();
assertTrue(request.isCancelled()); assertTrue(request.isCancelled());
...@@ -227,11 +177,11 @@ public class SingleRequestTest { ...@@ -227,11 +177,11 @@ public class SingleRequestTest {
@Test @Test
public void testDoesNotNotifyTargetTwiceIfClearedTwiceInARow() { public void testDoesNotNotifyTargetTwiceIfClearedTwiceInARow() {
SingleRequest<List> request = harness.getRequest(); SingleRequest<List> request = builder.build();
request.clear(); request.clear();
request.clear(); request.clear();
verify(harness.target, times(1)).onLoadCleared(any(Drawable.class)); verify(builder.target, times(1)).onLoadCleared(any(Drawable.class));
} }
@Test @Test
...@@ -246,24 +196,25 @@ public class SingleRequestTest { ...@@ -246,24 +196,25 @@ public class SingleRequestTest {
} }
}).when(requestCoordinator).canSetImage(any(Request.class)); }).when(requestCoordinator).canSetImage(any(Request.class));
harness.requestCoordinator = requestCoordinator; SingleRequest<List> request = builder
SingleRequest<List> request = harness.getRequest(); .setRequestCoordinator(requestCoordinator)
.build();
request.onResourceReady(harness.resource, DataSource.DATA_DISK_CACHE); request.onResourceReady(builder.resource, DataSource.DATA_DISK_CACHE);
verify(requestCoordinator).canSetImage(eq(request)); verify(requestCoordinator).canSetImage(eq(request));
} }
@Test @Test
public void testIsNotFailedWithoutException() { public void testIsNotFailedWithoutException() {
SingleRequest<List> request = harness.getRequest(); SingleRequest<List> request = builder.build();
assertFalse(request.isFailed()); assertFalse(request.isFailed());
} }
@Test @Test
public void testIsFailedAfterException() { public void testIsFailedAfterException() {
SingleRequest<List> request = harness.getRequest(); SingleRequest<List> request = builder.build();
request.onLoadFailed(new GlideException("test")); request.onLoadFailed(new GlideException("test"));
assertTrue(request.isFailed()); assertTrue(request.isFailed());
...@@ -271,23 +222,23 @@ public class SingleRequestTest { ...@@ -271,23 +222,23 @@ public class SingleRequestTest {
@Test @Test
public void testIgnoresOnSizeReadyIfNotWaitingForSize() { public void testIgnoresOnSizeReadyIfNotWaitingForSize() {
SingleRequest<List> request = harness.getRequest(); SingleRequest<List> request = builder.build();
request.begin(); request.begin();
request.onSizeReady(100, 100); request.onSizeReady(100, 100);
request.onSizeReady(100, 100); request.onSizeReady(100, 100);
verify(harness.engine, times(1)) verify(builder.engine, times(1))
.load( .load(
eq(harness.glideContext), eq(builder.glideContext),
eq(harness.model), eq(builder.model),
eq(harness.signature), eq(builder.signature),
eq(100), eq(100),
eq(100), eq(100),
eq(Object.class), eq(Object.class),
eq(List.class), eq(List.class),
any(Priority.class), any(Priority.class),
any(DiskCacheStrategy.class), any(DiskCacheStrategy.class),
eq(harness.transformations), eq(builder.transformations),
anyBoolean(), anyBoolean(),
anyBoolean(), anyBoolean(),
any(Options.class), any(Options.class),
...@@ -300,7 +251,7 @@ public class SingleRequestTest { ...@@ -300,7 +251,7 @@ public class SingleRequestTest {
@Test @Test
public void testIsFailedAfterNoResultAndNullException() { public void testIsFailedAfterNoResultAndNullException() {
SingleRequest<List> request = harness.getRequest(); SingleRequest<List> request = builder.build();
request.onLoadFailed(new GlideException("test")); request.onLoadFailed(new GlideException("test"));
assertTrue(request.isFailed()); assertTrue(request.isFailed());
...@@ -310,29 +261,29 @@ public class SingleRequestTest { ...@@ -310,29 +261,29 @@ public class SingleRequestTest {
public void testEngineLoadCancelledOnCancel() { public void testEngineLoadCancelledOnCancel() {
Engine.LoadStatus loadStatus = mock(Engine.LoadStatus.class); Engine.LoadStatus loadStatus = mock(Engine.LoadStatus.class);
when(harness.engine when(builder.engine
.load( .load(
eq(harness.glideContext), eq(builder.glideContext),
eq(harness.model), eq(builder.model),
eq(harness.signature), eq(builder.signature),
anyInt(), anyInt(),
anyInt(), anyInt(),
eq(Object.class), eq(Object.class),
eq(List.class), eq(List.class),
any(Priority.class), any(Priority.class),
any(DiskCacheStrategy.class), any(DiskCacheStrategy.class),
eq(harness.transformations), eq(builder.transformations),
anyBoolean(), anyBoolean(),
anyBoolean(), anyBoolean(),
any(Options.class), any(Options.class),
anyBoolean(), anyBoolean(),
anyBoolean(), anyBoolean(),
anyBoolean(), anyBoolean(),
anyBoolean(), anyBoolean(),
any(ResourceCallback.class))) any(ResourceCallback.class)))
.thenReturn(loadStatus); .thenReturn(loadStatus);
SingleRequest<List> request = harness.getRequest(); SingleRequest<List> request = builder.build();
request.begin(); request.begin();
request.onSizeReady(100, 100); request.onSizeReady(100, 100);
...@@ -343,12 +294,12 @@ public class SingleRequestTest { ...@@ -343,12 +294,12 @@ public class SingleRequestTest {
@Test @Test
public void testResourceIsRecycledOnClear() { public void testResourceIsRecycledOnClear() {
SingleRequest<List> request = harness.getRequest(); SingleRequest<List> request = builder.build();
request.onResourceReady(harness.resource, DataSource.REMOTE); request.onResourceReady(builder.resource, DataSource.REMOTE);
request.clear(); request.clear();
verify(harness.engine).release(eq(harness.resource)); verify(builder.engine).release(eq(builder.resource));
} }
@Test @Test
...@@ -357,12 +308,13 @@ public class SingleRequestTest { ...@@ -357,12 +308,13 @@ public class SingleRequestTest {
MockTarget target = new MockTarget(); MockTarget target = new MockTarget();
harness.placeholderDrawable = expected; SingleRequest<List> request = builder
harness.target = target; .setPlaceholderDrawable(expected)
SingleRequest<List> request = harness.getRequest(); .setTarget(target)
.build();
request.begin(); request.begin();
assertEquals(expected, target.currentPlaceholder); assertThat(target.currentPlaceholder).isEqualTo(expected);
} }
@Test @Test
...@@ -371,13 +323,14 @@ public class SingleRequestTest { ...@@ -371,13 +323,14 @@ public class SingleRequestTest {
MockTarget target = new MockTarget(); MockTarget target = new MockTarget();
harness.errorDrawable = expected; SingleRequest<List> request = builder
harness.target = target; .setErrorDrawable(expected)
SingleRequest<List> request = harness.getRequest(); .setTarget(target)
.build();
request.onLoadFailed(new GlideException("test")); request.onLoadFailed(new GlideException("test"));
assertEquals(expected, target.currentPlaceholder); assertThat(target.currentPlaceholder).isEqualTo(expected);
} }
@Test @Test
...@@ -386,14 +339,15 @@ public class SingleRequestTest { ...@@ -386,14 +339,15 @@ public class SingleRequestTest {
MockTarget target = new MockTarget(); MockTarget target = new MockTarget();
harness.errorDrawable = placeholder; SingleRequest<List> request = builder
harness.target = target; .setErrorDrawable(placeholder)
harness.model = null; .setTarget(target)
SingleRequest<List> request = harness.getRequest(); .setModel(null)
.build();
request.begin(); request.begin();
assertEquals(placeholder, target.currentPlaceholder); assertThat(target.currentPlaceholder).isEqualTo(placeholder);
} }
@Test @Test
...@@ -403,15 +357,16 @@ public class SingleRequestTest { ...@@ -403,15 +357,16 @@ public class SingleRequestTest {
MockTarget target = new MockTarget(); MockTarget target = new MockTarget();
harness.placeholderDrawable = placeholder; SingleRequest<List> request = builder
harness.errorDrawable = errorPlaceholder; .setPlaceholderDrawable(placeholder)
harness.target = target; .setErrorDrawable(errorPlaceholder)
harness.model = null; .setTarget(target)
SingleRequest<List> request = harness.getRequest(); .setModel(null)
.build();
request.begin(); request.begin();
assertEquals(errorPlaceholder, target.currentPlaceholder); assertThat(target.currentPlaceholder).isEqualTo(errorPlaceholder);
} }
...@@ -422,41 +377,43 @@ public class SingleRequestTest { ...@@ -422,41 +377,43 @@ public class SingleRequestTest {
Drawable fallback = new ColorDrawable(Color.BLUE); Drawable fallback = new ColorDrawable(Color.BLUE);
MockTarget target = new MockTarget(); MockTarget target = new MockTarget();
harness.placeholderDrawable = placeholder; SingleRequest<List> request = builder
harness.errorDrawable = errorPlaceholder; .setPlaceholderDrawable(placeholder)
harness.fallbackDrawable = fallback; .setErrorDrawable(errorPlaceholder)
harness.target = target; .setFallbackDrawable(fallback)
harness.model = null; .setTarget(target)
SingleRequest<List> request = harness.getRequest(); .setModel(null)
.build();
request.begin(); request.begin();
assertEquals(fallback, target.currentPlaceholder);
assertThat(target.currentPlaceholder).isEqualTo(fallback);
} }
@Test @Test
public void testIsNotRunningBeforeRunCalled() { public void testIsNotRunningBeforeRunCalled() {
assertFalse(harness.getRequest().isRunning()); assertFalse(builder.build().isRunning());
} }
@Test @Test
public void testIsRunningAfterRunCalled() { public void testIsRunningAfterRunCalled() {
Request request = harness.getRequest(); Request request = builder.build();
request.begin(); request.begin();
assertTrue(request.isRunning()); assertTrue(request.isRunning());
} }
@Test @Test
public void testIsNotRunningAfterComplete() { public void testIsNotRunningAfterComplete() {
SingleRequest<List> request = harness.getRequest(); SingleRequest<List> request = builder.build();
request.begin(); request.begin();
request.onResourceReady(harness.resource, DataSource.REMOTE); request.onResourceReady(builder.resource, DataSource.REMOTE);
assertFalse(request.isRunning()); assertFalse(request.isRunning());
} }
@Test @Test
public void testIsNotRunningAfterFailing() { public void testIsNotRunningAfterFailing() {
SingleRequest<List> request = harness.getRequest(); SingleRequest<List> request = builder.build();
request.begin(); request.begin();
request.onLoadFailed(new GlideException("test")); request.onLoadFailed(new GlideException("test"));
...@@ -465,7 +422,7 @@ public class SingleRequestTest { ...@@ -465,7 +422,7 @@ public class SingleRequestTest {
@Test @Test
public void testIsNotRunningAfterClear() { public void testIsNotRunningAfterClear() {
SingleRequest<List> request = harness.getRequest(); SingleRequest<List> request = builder.build();
request.begin(); request.begin();
request.clear(); request.clear();
...@@ -474,113 +431,115 @@ public class SingleRequestTest { ...@@ -474,113 +431,115 @@ public class SingleRequestTest {
@Test @Test
public void testCallsTargetOnResourceReadyIfNoRequestListener() { public void testCallsTargetOnResourceReadyIfNoRequestListener() {
harness.requestListener = null; SingleRequest<List> request = builder
SingleRequest<List> request = harness.getRequest(); .setRequestListener(null)
request.onResourceReady(harness.resource, DataSource.LOCAL); .build();
request.onResourceReady(builder.resource, DataSource.LOCAL);
verify(harness.target).onResourceReady(eq(harness.result), anyTransition()); verify(builder.target).onResourceReady(eq(builder.result), anyTransition());
} }
@Test @Test
public void testCallsTargetOnResourceReadyIfRequestListenerReturnsFalse() { public void testCallsTargetOnResourceReadyIfRequestListenerReturnsFalse() {
SingleRequest<List> request = harness.getRequest(); SingleRequest<List> request = builder.build();
when(harness.requestListener when(builder.requestListener
.onResourceReady(any(List.class), any(Number.class), eq(harness.target), isADataSource(), .onResourceReady(any(List.class), any(Number.class), eq(builder.target), isADataSource(),
anyBoolean())).thenReturn(false); anyBoolean())).thenReturn(false);
request.onResourceReady(harness.resource, DataSource.LOCAL); request.onResourceReady(builder.resource, DataSource.LOCAL);
verify(harness.target).onResourceReady(eq(harness.result), anyTransition()); verify(builder.target).onResourceReady(eq(builder.result), anyTransition());
} }
@Test @Test
public void testDoesNotCallTargetOnResourceReadyIfRequestListenerReturnsTrue() { public void testDoesNotCallTargetOnResourceReadyIfRequestListenerReturnsTrue() {
SingleRequest<List> request = harness.getRequest(); SingleRequest<List> request = builder.build();
when(harness.requestListener when(builder.requestListener
.onResourceReady(any(List.class), any(Number.class), eq(harness.target), isADataSource(), .onResourceReady(any(List.class), any(Number.class), eq(builder.target), isADataSource(),
anyBoolean())).thenReturn(true); anyBoolean())).thenReturn(true);
request.onResourceReady(harness.resource, DataSource.REMOTE); request.onResourceReady(builder.resource, DataSource.REMOTE);
verify(harness.target, never()).onResourceReady(any(List.class), anyTransition()); verify(builder.target, never()).onResourceReady(any(List.class), anyTransition());
} }
@Test @Test
public void testCallsTargetOnExceptionIfNoRequestListener() { public void testCallsTargetOnExceptionIfNoRequestListener() {
harness.requestListener = null; SingleRequest<List> request = builder
SingleRequest<List> request = harness.getRequest(); .setRequestListener(null)
.build();
request.onLoadFailed(new GlideException("test")); request.onLoadFailed(new GlideException("test"));
verify(harness.target).onLoadFailed(eq(harness.errorDrawable)); verify(builder.target).onLoadFailed(eq(builder.errorDrawable));
} }
@Test @Test
public void testCallsTargetOnExceptionIfRequestListenerReturnsFalse() { public void testCallsTargetOnExceptionIfRequestListenerReturnsFalse() {
SingleRequest<List> request = harness.getRequest(); SingleRequest<List> request = builder.build();
when(harness.requestListener.onLoadFailed(isAGlideException(), any(Number.class), when(builder.requestListener.onLoadFailed(isAGlideException(), any(Number.class),
eq(harness.target), anyBoolean())) eq(builder.target), anyBoolean()))
.thenReturn(false); .thenReturn(false);
request.onLoadFailed(new GlideException("test")); request.onLoadFailed(new GlideException("test"));
verify(harness.target).onLoadFailed(eq(harness.errorDrawable)); verify(builder.target).onLoadFailed(eq(builder.errorDrawable));
} }
@Test @Test
public void testDoesNotCallTargetOnExceptionIfRequestListenerReturnsTrue() { public void testDoesNotCallTargetOnExceptionIfRequestListenerReturnsTrue() {
SingleRequest<List> request = harness.getRequest(); SingleRequest<List> request = builder.build();
when(harness.requestListener.onLoadFailed(isAGlideException(), any(Number.class), when(builder.requestListener.onLoadFailed(isAGlideException(), any(Number.class),
eq(harness.target), anyBoolean())) eq(builder.target), anyBoolean()))
.thenReturn(true); .thenReturn(true);
request.onLoadFailed(new GlideException("test")); request.onLoadFailed(new GlideException("test"));
verify(harness.target, never()).onLoadFailed(any(Drawable.class)); verify(builder.target, never()).onLoadFailed(any(Drawable.class));
} }
@Test @Test
public void testRequestListenerIsCalledWithResourceResult() { public void testRequestListenerIsCalledWithResourceResult() {
SingleRequest<List> request = harness.getRequest(); SingleRequest<List> request = builder.build();
request.onResourceReady(harness.resource, DataSource.DATA_DISK_CACHE); request.onResourceReady(builder.resource, DataSource.DATA_DISK_CACHE);
verify(harness.requestListener) verify(builder.requestListener)
.onResourceReady(eq(harness.result), any(Number.class), isAListTarget(), isADataSource(), .onResourceReady(eq(builder.result), any(Number.class), isAListTarget(), isADataSource(),
anyBoolean()); anyBoolean());
} }
@Test @Test
public void testRequestListenerIsCalledWithModel() { public void testRequestListenerIsCalledWithModel() {
SingleRequest<List> request = harness.getRequest(); SingleRequest<List> request = builder.build();
request.onResourceReady(harness.resource, DataSource.DATA_DISK_CACHE); request.onResourceReady(builder.resource, DataSource.DATA_DISK_CACHE);
verify(harness.requestListener) verify(builder.requestListener)
.onResourceReady(any(List.class), eq(harness.model), isAListTarget(), isADataSource(), .onResourceReady(any(List.class), eq(builder.model), isAListTarget(), isADataSource(),
anyBoolean()); anyBoolean());
} }
@Test @Test
public void testRequestListenerIsCalledWithTarget() { public void testRequestListenerIsCalledWithTarget() {
SingleRequest<List> request = harness.getRequest(); SingleRequest<List> request = builder.build();
request.onResourceReady(harness.resource, DataSource.DATA_DISK_CACHE); request.onResourceReady(builder.resource, DataSource.DATA_DISK_CACHE);
verify(harness.requestListener) verify(builder.requestListener)
.onResourceReady(any(List.class), any(Number.class), eq(harness.target), isADataSource(), .onResourceReady(any(List.class), any(Number.class), eq(builder.target), isADataSource(),
anyBoolean()); anyBoolean());
} }
@Test @Test
public void testRequestListenerIsCalledWithLoadedFromMemoryIfLoadCompletesSynchronously() { public void testRequestListenerIsCalledWithLoadedFromMemoryIfLoadCompletesSynchronously() {
final SingleRequest<List> request = harness.getRequest(); final SingleRequest<List> request = builder.build();
when(harness.engine when(builder.engine
.load( .load(
eq(harness.glideContext), eq(builder.glideContext),
eq(harness.model), eq(builder.model),
eq(harness.signature), eq(builder.signature),
anyInt(), anyInt(),
anyInt(), anyInt(),
eq(Object.class), eq(Object.class),
eq(List.class), eq(List.class),
any(Priority.class), any(Priority.class),
any(DiskCacheStrategy.class), any(DiskCacheStrategy.class),
eq(harness.transformations), eq(builder.transformations),
anyBoolean(), anyBoolean(),
anyBoolean(), anyBoolean(),
any(Options.class), any(Options.class),
...@@ -592,124 +551,129 @@ public class SingleRequestTest { ...@@ -592,124 +551,129 @@ public class SingleRequestTest {
.thenAnswer(new Answer<Object>() { .thenAnswer(new Answer<Object>() {
@Override @Override
public Object answer(InvocationOnMock invocation) throws Throwable { public Object answer(InvocationOnMock invocation) throws Throwable {
request.onResourceReady(harness.resource, DataSource.MEMORY_CACHE); request.onResourceReady(builder.resource, DataSource.MEMORY_CACHE);
return null; return null;
} }
}); });
request.begin(); request.begin();
request.onSizeReady(100, 100); request.onSizeReady(100, 100);
verify(harness.requestListener) verify(builder.requestListener)
.onResourceReady(eq(harness.result), any(Number.class), isAListTarget(), .onResourceReady(eq(builder.result), any(Number.class), isAListTarget(),
eq(DataSource.MEMORY_CACHE), anyBoolean()); eq(DataSource.MEMORY_CACHE), anyBoolean());
} }
@Test @Test
public void public void
testRequestListenerIsCalledWithNotLoadedFromMemoryCacheIfLoadCompletesAsynchronously() { testRequestListenerIsCalledWithNotLoadedFromMemoryCacheIfLoadCompletesAsynchronously() {
SingleRequest<List> request = harness.getRequest(); SingleRequest<List> request = builder.build();
request.onSizeReady(100, 100); request.onSizeReady(100, 100);
request.onResourceReady(harness.resource, DataSource.LOCAL); request.onResourceReady(builder.resource, DataSource.LOCAL);
verify(harness.requestListener) verify(builder.requestListener)
.onResourceReady(eq(harness.result), any(Number.class), isAListTarget(), .onResourceReady(eq(builder.result), any(Number.class), isAListTarget(),
eq(DataSource.LOCAL), anyBoolean()); eq(DataSource.LOCAL), anyBoolean());
} }
@Test @Test
public void testRequestListenerIsCalledWithIsFirstResourceIfNoRequestCoordinator() { public void testRequestListenerIsCalledWithIsFirstResourceIfNoRequestCoordinator() {
harness.requestCoordinator = null; SingleRequest<List> request = builder
SingleRequest<List> request = harness.getRequest(); .setRequestCoordinator(null)
request.onResourceReady(harness.resource, DataSource.DATA_DISK_CACHE); .build();
request.onResourceReady(builder.resource, DataSource.DATA_DISK_CACHE);
verify(harness.requestListener) verify(builder.requestListener)
.onResourceReady(eq(harness.result), any(Number.class), isAListTarget(), isADataSource(), .onResourceReady(eq(builder.result), any(Number.class), isAListTarget(), isADataSource(),
eq(true)); eq(true));
} }
@Test @Test
public void testRequestListenerIsCalledWithFirstImageIfRequestCoordinatorReturnsNoResourceSet() { public void testRequestListenerIsCalledWithFirstImageIfRequestCoordinatorReturnsNoResourceSet() {
SingleRequest<List> request = harness.getRequest(); SingleRequest<List> request = builder.build();
when(harness.requestCoordinator.isAnyResourceSet()).thenReturn(false); when(builder.requestCoordinator.isAnyResourceSet()).thenReturn(false);
request.onResourceReady(harness.resource, DataSource.DATA_DISK_CACHE); request.onResourceReady(builder.resource, DataSource.DATA_DISK_CACHE);
verify(harness.requestListener) verify(builder.requestListener)
.onResourceReady(eq(harness.result), any(Number.class), isAListTarget(), isADataSource(), .onResourceReady(eq(builder.result), any(Number.class), isAListTarget(), isADataSource(),
eq(true)); eq(true));
} }
@Test @Test
public void public void
testRequestListenerIsCalledWithNotIsFirstRequestIfRequestCoordinatorReturnsResourceSet() { testRequestListenerIsCalledWithNotIsFirstRequestIfRequestCoordinatorReturnsResourceSet() {
SingleRequest<List> request = harness.getRequest(); SingleRequest<List> request = builder.build();
when(harness.requestCoordinator.isAnyResourceSet()).thenReturn(true); when(builder.requestCoordinator.isAnyResourceSet()).thenReturn(true);
request.onResourceReady(harness.resource, DataSource.DATA_DISK_CACHE); request.onResourceReady(builder.resource, DataSource.DATA_DISK_CACHE);
verify(harness.requestListener) verify(builder.requestListener)
.onResourceReady(eq(harness.result), any(Number.class), isAListTarget(), .onResourceReady(eq(builder.result), any(Number.class), isAListTarget(),
isADataSource(), eq(false)); isADataSource(), eq(false));
} }
@Test @Test
public void testTargetIsCalledWithAnimationFromFactory() { public void testTargetIsCalledWithAnimationFromFactory() {
SingleRequest<List> request = harness.getRequest(); SingleRequest<List> request = builder.build();
Transition<List> transition = mockTransition(); Transition<List> transition = mockTransition();
when(harness.factory.build(any(DataSource.class), anyBoolean())).thenReturn(transition); when(builder.transitionFactory.build(any(DataSource.class), anyBoolean()))
request.onResourceReady(harness.resource, DataSource.DATA_DISK_CACHE); .thenReturn(transition);
request.onResourceReady(builder.resource, DataSource.DATA_DISK_CACHE);
verify(harness.target).onResourceReady(eq(harness.result), eq(transition)); verify(builder.target).onResourceReady(eq(builder.result), eq(transition));
} }
@Test @Test
public void testCallsGetSizeIfOverrideWidthIsLessThanZero() { public void testCallsGetSizeIfOverrideWidthIsLessThanZero() {
harness.overrideWidth = -1; SingleRequest<List> request = builder
harness.overrideHeight = 100; .setOverrideWidth(-1)
SingleRequest<List> request = harness.getRequest(); .setOverrideHeight(100)
.build();
request.begin(); request.begin();
verify(harness.target).getSize(any(SizeReadyCallback.class)); verify(builder.target).getSize(any(SizeReadyCallback.class));
} }
@Test @Test
public void testCallsGetSizeIfOverrideHeightIsLessThanZero() { public void testCallsGetSizeIfOverrideHeightIsLessThanZero() {
harness.overrideHeight = -1; SingleRequest<List> request = builder
harness.overrideWidth = 100; .setOverrideWidth(100)
SingleRequest<List> request = harness.getRequest(); .setOverrideHeight(-1)
.build();
request.begin(); request.begin();
verify(harness.target).getSize(any(SizeReadyCallback.class)); verify(builder.target).getSize(any(SizeReadyCallback.class));
} }
@Test @Test
public void testDoesNotCallGetSizeIfOverrideWidthAndHeightAreSet() { public void testDoesNotCallGetSizeIfOverrideWidthAndHeightAreSet() {
harness.overrideWidth = 100; SingleRequest<List> request = builder
harness.overrideHeight = 100; .setOverrideWidth(100)
SingleRequest<List> request = harness.getRequest(); .setOverrideHeight(100)
.build();
request.begin(); request.begin();
verify(harness.target, never()).getSize(any(SizeReadyCallback.class)); verify(builder.target, never()).getSize(any(SizeReadyCallback.class));
} }
@Test @Test
public void testCallsEngineWithOverrideWidthAndHeightIfSet() { public void testCallsEngineWithOverrideWidthAndHeightIfSet() {
harness.overrideWidth = 1; SingleRequest<List> request = builder
harness.overrideHeight = 2; .setOverrideWidth(1)
.setOverrideHeight(2)
SingleRequest<List> request = harness.getRequest(); .build();
request.begin(); request.begin();
verify(harness.engine) verify(builder.engine)
.load( .load(
eq(harness.glideContext), eq(builder.glideContext),
eq(harness.model), eq(builder.model),
eq(harness.signature), eq(builder.signature),
anyInt(), anyInt(),
anyInt(), anyInt(),
eq(Object.class), eq(Object.class),
eq(List.class), eq(List.class),
any(Priority.class), any(Priority.class),
any(DiskCacheStrategy.class), any(DiskCacheStrategy.class),
eq(harness.transformations), eq(builder.transformations),
anyBoolean(), anyBoolean(),
anyBoolean(), anyBoolean(),
any(Options.class), any(Options.class),
...@@ -722,31 +686,32 @@ public class SingleRequestTest { ...@@ -722,31 +686,32 @@ public class SingleRequestTest {
@Test @Test
public void testDoesNotSetErrorDrawableIfRequestCoordinatorDoesntAllowIt() { public void testDoesNotSetErrorDrawableIfRequestCoordinatorDoesntAllowIt() {
harness.errorDrawable = new ColorDrawable(Color.RED); SingleRequest<List> request = builder
SingleRequest<List> request = harness.getRequest(); .setErrorDrawable(new ColorDrawable(Color.RED))
when(harness.requestCoordinator.canNotifyStatusChanged(any(Request.class))).thenReturn(false); .build();
when(builder.requestCoordinator.canNotifyStatusChanged(any(Request.class))).thenReturn(false);
request.onLoadFailed(new GlideException("test")); request.onLoadFailed(new GlideException("test"));
verify(harness.target, never()).onLoadFailed(any(Drawable.class)); verify(builder.target, never()).onLoadFailed(any(Drawable.class));
} }
@Test @Test
public void testCanReRunCancelledRequests() { public void testCanReRunCancelledRequests() {
doAnswer(new CallSizeReady(100, 100)).when(harness.target) doAnswer(new CallSizeReady(100, 100)).when(builder.target)
.getSize(any(SizeReadyCallback.class)); .getSize(any(SizeReadyCallback.class));
when(harness.engine when(builder.engine
.load( .load(
eq(harness.glideContext), eq(builder.glideContext),
eq(harness.model), eq(builder.model),
eq(harness.signature), eq(builder.signature),
eq(100), eq(100),
eq(100), eq(100),
eq(Object.class), eq(Object.class),
eq(List.class), eq(List.class),
any(Priority.class), any(Priority.class),
any(DiskCacheStrategy.class), any(DiskCacheStrategy.class),
eq(harness.transformations), eq(builder.transformations),
anyBoolean(), anyBoolean(),
anyBoolean(), anyBoolean(),
any(Options.class), any(Options.class),
...@@ -755,42 +720,42 @@ public class SingleRequestTest { ...@@ -755,42 +720,42 @@ public class SingleRequestTest {
/*useAnimationPool=*/ anyBoolean(), /*useAnimationPool=*/ anyBoolean(),
anyBoolean(), anyBoolean(),
any(ResourceCallback.class))) any(ResourceCallback.class)))
.thenAnswer(new CallResourceCallback(harness.resource)); .thenAnswer(new CallResourceCallback(builder.resource));
SingleRequest<List> request = harness.getRequest(); SingleRequest<List> request = builder.build();
request.begin(); request.begin();
request.cancel(); request.cancel();
request.begin(); request.begin();
verify(harness.target, times(2)).onResourceReady(eq(harness.result), anyTransition()); verify(builder.target, times(2)).onResourceReady(eq(builder.result), anyTransition());
} }
@Test @Test
public void testResourceOnlyReceivesOneGetOnResourceReady() { public void testResourceOnlyReceivesOneGetOnResourceReady() {
SingleRequest<List> request = harness.getRequest(); SingleRequest<List> request = builder.build();
request.onResourceReady(harness.resource, DataSource.LOCAL); request.onResourceReady(builder.resource, DataSource.LOCAL);
verify(harness.resource, times(1)).get(); verify(builder.resource, times(1)).get();
} }
@Test @Test
public void testDoesNotStartALoadIfOnSizeReadyIsCalledAfterCancel() { public void testDoesNotStartALoadIfOnSizeReadyIsCalledAfterCancel() {
SingleRequest<List> request = harness.getRequest(); SingleRequest<List> request = builder.build();
request.cancel(); request.cancel();
request.onSizeReady(100, 100); request.onSizeReady(100, 100);
verify(harness.engine, never()) verify(builder.engine, never())
.load( .load(
eq(harness.glideContext), eq(builder.glideContext),
eq(harness.model), eq(builder.model),
eq(harness.signature), eq(builder.signature),
anyInt(), anyInt(),
anyInt(), anyInt(),
eq(Object.class), eq(Object.class),
eq(List.class), eq(List.class),
any(Priority.class), any(Priority.class),
any(DiskCacheStrategy.class), any(DiskCacheStrategy.class),
eq(harness.transformations), eq(builder.transformations),
anyBoolean(), anyBoolean(),
anyBoolean(), anyBoolean(),
any(Options.class), any(Options.class),
...@@ -804,26 +769,26 @@ public class SingleRequestTest { ...@@ -804,26 +769,26 @@ public class SingleRequestTest {
@Test @Test
public void testCallsSourceUnlimitedExecutorEngineIfOptionsIsSet() { public void testCallsSourceUnlimitedExecutorEngineIfOptionsIsSet() {
doAnswer(new CallSizeReady(100, 100)).when(harness.target) doAnswer(new CallSizeReady(100, 100)).when(builder.target)
.getSize(any(SizeReadyCallback.class)); .getSize(any(SizeReadyCallback.class));
harness.useUnlimitedSourceGeneratorsPool = true; SingleRequest<List> request = builder
.setUseUnlimitedSourceGeneratorsPool(true)
SingleRequest<List> request = harness.getRequest(); .build();
request.begin(); request.begin();
verify(harness.engine) verify(builder.engine)
.load( .load(
eq(harness.glideContext), eq(builder.glideContext),
eq(harness.model), eq(builder.model),
eq(harness.signature), eq(builder.signature),
anyInt(), anyInt(),
anyInt(), anyInt(),
eq(Object.class), eq(Object.class),
eq(List.class), eq(List.class),
any(Priority.class), any(Priority.class),
any(DiskCacheStrategy.class), any(DiskCacheStrategy.class),
eq(harness.transformations), eq(builder.transformations),
anyBoolean(), anyBoolean(),
anyBoolean(), anyBoolean(),
any(Options.class), any(Options.class),
...@@ -836,26 +801,26 @@ public class SingleRequestTest { ...@@ -836,26 +801,26 @@ public class SingleRequestTest {
@Test @Test
public void testCallsSourceExecutorEngineIfOptionsIsSet() { public void testCallsSourceExecutorEngineIfOptionsIsSet() {
doAnswer(new CallSizeReady(100, 100)).when(harness.target) doAnswer(new CallSizeReady(100, 100)).when(builder.target)
.getSize(any(SizeReadyCallback.class)); .getSize(any(SizeReadyCallback.class));
harness.useUnlimitedSourceGeneratorsPool = false; SingleRequest<List> request = builder
.setUseUnlimitedSourceGeneratorsPool(false)
SingleRequest<List> request = harness.getRequest(); .build();
request.begin(); request.begin();
verify(harness.engine) verify(builder.engine)
.load( .load(
eq(harness.glideContext), eq(builder.glideContext),
eq(harness.model), eq(builder.model),
eq(harness.signature), eq(builder.signature),
anyInt(), anyInt(),
anyInt(), anyInt(),
eq(Object.class), eq(Object.class),
eq(List.class), eq(List.class),
any(Priority.class), any(Priority.class),
any(DiskCacheStrategy.class), any(DiskCacheStrategy.class),
eq(harness.transformations), eq(builder.transformations),
anyBoolean(), anyBoolean(),
anyBoolean(), anyBoolean(),
any(Options.class), any(Options.class),
...@@ -868,53 +833,181 @@ public class SingleRequestTest { ...@@ -868,53 +833,181 @@ public class SingleRequestTest {
@Test @Test
public void testIsEquivalentTo() { public void testIsEquivalentTo() {
SingleRequest<List> originalRequest1 = harness.getRequest(); SingleRequest<List> originalRequest1 = builder.build();
SingleRequest<List> originalRequest2 = harness.getRequest(); SingleRequest<List> originalRequest2 = builder.build();
assertTrue(originalRequest1.isEquivalentTo(originalRequest2)); assertTrue(originalRequest1.isEquivalentTo(originalRequest2));
harness = new RequestHarness(); builder = new SingleRequestBuilder();
harness.overrideWidth = harness.overrideWidth * 2; builder.overrideWidth = builder.overrideWidth * 2;
SingleRequest<List> widthRequest = harness.getRequest(); SingleRequest<List> widthRequest = builder.build();
assertTrue(widthRequest.isEquivalentTo(widthRequest)); assertTrue(widthRequest.isEquivalentTo(widthRequest));
assertFalse(widthRequest.isEquivalentTo(originalRequest1)); assertFalse(widthRequest.isEquivalentTo(originalRequest1));
assertFalse(originalRequest1.isEquivalentTo(widthRequest)); assertFalse(originalRequest1.isEquivalentTo(widthRequest));
harness = new RequestHarness(); builder = new SingleRequestBuilder();
harness.overrideHeight = harness.overrideHeight * 2; builder.overrideHeight = builder.overrideHeight * 2;
SingleRequest<List> heightRequest = harness.getRequest(); SingleRequest<List> heightRequest = builder.build();
assertTrue(heightRequest.isEquivalentTo(heightRequest)); assertTrue(heightRequest.isEquivalentTo(heightRequest));
assertFalse(heightRequest.isEquivalentTo(originalRequest1)); assertFalse(heightRequest.isEquivalentTo(originalRequest1));
assertFalse(originalRequest1.isEquivalentTo(heightRequest)); assertFalse(originalRequest1.isEquivalentTo(heightRequest));
harness = new RequestHarness(); builder = new SingleRequestBuilder();
harness.model = 12345679; builder.model = 12345679;
SingleRequest<List> modelRequest = harness.getRequest(); SingleRequest<List> modelRequest = builder.build();
assertTrue(modelRequest.isEquivalentTo(modelRequest)); assertTrue(modelRequest.isEquivalentTo(modelRequest));
assertFalse(modelRequest.isEquivalentTo(originalRequest1)); assertFalse(modelRequest.isEquivalentTo(originalRequest1));
assertFalse(originalRequest1.isEquivalentTo(modelRequest)); assertFalse(originalRequest1.isEquivalentTo(modelRequest));
harness = new RequestHarness(); builder = new SingleRequestBuilder();
harness.model = null; builder.model = null;
SingleRequest<List> nullModelRequest = harness.getRequest(); SingleRequest<List> nullModelRequest = builder.build();
assertTrue(nullModelRequest.isEquivalentTo(nullModelRequest)); assertTrue(nullModelRequest.isEquivalentTo(nullModelRequest));
assertFalse(nullModelRequest.isEquivalentTo(originalRequest1)); assertFalse(nullModelRequest.isEquivalentTo(originalRequest1));
assertFalse(originalRequest1.isEquivalentTo(nullModelRequest)); assertFalse(originalRequest1.isEquivalentTo(nullModelRequest));
harness = new RequestHarness(); builder = new SingleRequestBuilder();
harness.errorDrawable = new ColorDrawable(Color.GRAY); builder.errorDrawable = new ColorDrawable(Color.GRAY);
SingleRequest<List> errorRequest = harness.getRequest(); SingleRequest<List> errorRequest = builder.build();
assertTrue(errorRequest.isEquivalentTo(errorRequest)); assertTrue(errorRequest.isEquivalentTo(errorRequest));
assertFalse(errorRequest.isEquivalentTo(originalRequest1)); assertFalse(errorRequest.isEquivalentTo(originalRequest1));
assertFalse(originalRequest1.isEquivalentTo(errorRequest)); assertFalse(originalRequest1.isEquivalentTo(errorRequest));
harness = new RequestHarness(); builder = new SingleRequestBuilder();
harness.priority = Priority.LOW; builder.priority = Priority.LOW;
SingleRequest<List> priorityRequest = harness.getRequest(); SingleRequest<List> priorityRequest = builder.build();
assertTrue(priorityRequest.isEquivalentTo(priorityRequest)); assertTrue(priorityRequest.isEquivalentTo(priorityRequest));
assertFalse(priorityRequest.isEquivalentTo(originalRequest1)); assertFalse(priorityRequest.isEquivalentTo(originalRequest1));
assertFalse(originalRequest1.isEquivalentTo(priorityRequest)); assertFalse(originalRequest1.isEquivalentTo(priorityRequest));
} }
static class SingleRequestBuilder {
private Engine engine = mock(Engine.class);
private Number model = 123456;
@SuppressWarnings("unchecked")
private Target<List> target = mock(Target.class);
private Resource<List> resource = mockResource();
private RequestCoordinator requestCoordinator = mock(RequestCoordinator.class);
private Drawable placeholderDrawable = null;
private Drawable errorDrawable = null;
private Drawable fallbackDrawable = null;
@SuppressWarnings("unchecked")
private RequestListener<List> requestListener = mock(RequestListener.class);
@SuppressWarnings("unchecked")
private TransitionFactory<List> transitionFactory = mock(TransitionFactory.class);
private int overrideWidth = -1;
private int overrideHeight = -1;
private List<?> result = new ArrayList<>();
private GlideContext glideContext = mock(GlideContext.class);
private Key signature = mock(Key.class);
private Priority priority = Priority.HIGH;
private boolean useUnlimitedSourceGeneratorsPool = false;
private Class<List> transcodeClass = List.class;
private Map<Class<?>, Transformation<?>> transformations = new HashMap<>();
SingleRequestBuilder() {
when(requestCoordinator.canSetImage(any(Request.class))).thenReturn(true);
when(requestCoordinator.canNotifyStatusChanged(any(Request.class))).thenReturn(true);
when(resource.get()).thenReturn(result);
}
SingleRequestBuilder setEngine(Engine engine) {
this.engine = engine;
return this;
}
SingleRequestBuilder setModel(Number model) {
this.model = model;
return this;
}
SingleRequestBuilder setTarget(Target<List> target) {
this.target = target;
return this;
}
SingleRequestBuilder setResource(Resource<List> resource) {
this.resource = resource;
return this;
}
SingleRequestBuilder setRequestCoordinator(RequestCoordinator requestCoordinator) {
this.requestCoordinator = requestCoordinator;
return this;
}
SingleRequestBuilder setPlaceholderDrawable(Drawable placeholderDrawable) {
this.placeholderDrawable = placeholderDrawable;
return this;
}
SingleRequestBuilder setErrorDrawable(Drawable errorDrawable) {
this.errorDrawable = errorDrawable;
return this;
}
SingleRequestBuilder setFallbackDrawable(Drawable fallbackDrawable) {
this.fallbackDrawable = fallbackDrawable;
return this;
}
SingleRequestBuilder setRequestListener(RequestListener<List> requestListener) {
this.requestListener = requestListener;
return this;
}
SingleRequestBuilder setOverrideWidth(int overrideWidth) {
this.overrideWidth = overrideWidth;
return this;
}
SingleRequestBuilder setOverrideHeight(int overrideHeight) {
this.overrideHeight = overrideHeight;
return this;
}
SingleRequestBuilder setResult(List<?> result) {
this.result = result;
return this;
}
SingleRequestBuilder setPriority(Priority priority) {
this.priority = priority;
return this;
}
SingleRequestBuilder setUseUnlimitedSourceGeneratorsPool(
boolean useUnlimitedSourceGeneratorsPool) {
this.useUnlimitedSourceGeneratorsPool = useUnlimitedSourceGeneratorsPool;
return this;
}
SingleRequest<List> build() {
RequestOptions requestOptions = new RequestOptions()
.error(errorDrawable)
.placeholder(placeholderDrawable)
.fallback(fallbackDrawable)
.override(overrideWidth, overrideHeight)
.priority(priority)
.signature(signature)
.useUnlimitedSourceGeneratorsPool(useUnlimitedSourceGeneratorsPool);
return SingleRequest.obtain(
/*context=*/glideContext,
/*glideContext=*/glideContext,
model,
transcodeClass,
requestOptions,
overrideWidth,
overrideHeight,
priority,
target,
requestListener,
requestCoordinator,
engine,
transitionFactory);
}
}
// TODO do we want to move these to Util? // TODO do we want to move these to Util?
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
private static <T> Transition<T> mockTransition() { private static <T> Transition<T> mockTransition() {
...@@ -939,15 +1032,16 @@ public class SingleRequestTest { ...@@ -939,15 +1032,16 @@ public class SingleRequestTest {
private Resource resource; private Resource resource;
public CallResourceCallback(Resource resource) { CallResourceCallback(Resource resource) {
this.resource = resource; this.resource = resource;
} }
@Override @Override
public Object answer(InvocationOnMock invocationOnMock) throws Throwable { public Object answer(InvocationOnMock invocationOnMock) throws Throwable {
ResourceCallback cb = ResourceCallback cb =
(ResourceCallback) invocationOnMock.getArguments()[invocationOnMock.getArguments().length (ResourceCallback) invocationOnMock.getArguments()[
- 1]; invocationOnMock.getArguments().length
- 1];
cb.onResourceReady(resource, DataSource.REMOTE); cb.onResourceReady(resource, DataSource.REMOTE);
return null; return null;
} }
...@@ -958,7 +1052,7 @@ public class SingleRequestTest { ...@@ -958,7 +1052,7 @@ public class SingleRequestTest {
private int width; private int width;
private int height; private int height;
public CallSizeReady(int width, int height) { CallSizeReady(int width, int height) {
this.width = width; this.width = width;
this.height = height; this.height = height;
} }
...@@ -972,6 +1066,7 @@ public class SingleRequestTest { ...@@ -972,6 +1066,7 @@ public class SingleRequestTest {
} }
private static class MockTarget implements Target<List> { private static class MockTarget implements Target<List> {
private Drawable currentPlaceholder; private Drawable currentPlaceholder;
@Override @Override
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册