提交 96fd2499 编写于 作者: S Sam Judd

Don't cancel new runners from old jobs.

Fixes #91
上级 5bd4f957
...@@ -105,9 +105,10 @@ public class EngineJobTest { ...@@ -105,9 +105,10 @@ public class EngineJobTest {
@Test @Test
public void testListenerNotifiedOfCancelOnCancel() { public void testListenerNotifiedOfCancelOnCancel() {
harness.getJob().cancel(); EngineJob job = harness.getJob();
job.cancel();
verify(harness.listener).onEngineJobCancelled(eq(harness.key)); verify(harness.listener).onEngineJobCancelled(eq(job), eq(harness.key));
} }
@Test @Test
...@@ -164,7 +165,7 @@ public class EngineJobTest { ...@@ -164,7 +165,7 @@ public class EngineJobTest {
job.onResourceReady(harness.resource); job.onResourceReady(harness.resource);
job.cancel(); job.cancel();
verify(harness.listener, never()).onEngineJobCancelled(eq(harness.key)); verify(harness.listener, never()).onEngineJobCancelled(eq(job), eq(harness.key));
} }
@Test @Test
...@@ -173,7 +174,7 @@ public class EngineJobTest { ...@@ -173,7 +174,7 @@ public class EngineJobTest {
job.cancel(); job.cancel();
job.cancel(); job.cancel();
verify(harness.listener, times(1)).onEngineJobCancelled(eq(harness.key)); verify(harness.listener, times(1)).onEngineJobCancelled(eq(job), eq(harness.key));
} }
@Test @Test
......
...@@ -290,7 +290,7 @@ public class EngineTest { ...@@ -290,7 +290,7 @@ public class EngineTest {
public void testRunnerIsRemovedFromRunnersOnEngineNotifiedJobCancel() { public void testRunnerIsRemovedFromRunnersOnEngineNotifiedJobCancel() {
harness.doLoad(); harness.doLoad();
harness.engine.onEngineJobCancelled(harness.cacheKey); harness.engine.onEngineJobCancelled(harness.job, harness.cacheKey);
assertFalse(harness.runners.containsKey(harness.cacheKey)); assertFalse(harness.runners.containsKey(harness.cacheKey));
} }
...@@ -299,11 +299,29 @@ public class EngineTest { ...@@ -299,11 +299,29 @@ public class EngineTest {
public void testRunnerIsCancelledOnEngineNotifiedJobCanceled() { public void testRunnerIsCancelledOnEngineNotifiedJobCanceled() {
harness.doLoad(); harness.doLoad();
harness.engine.onEngineJobCancelled(harness.cacheKey); harness.engine.onEngineJobCancelled(harness.job, harness.cacheKey);
verify(harness.runner).cancel(); verify(harness.runner).cancel();
} }
@Test
public void testRunnerIsNotRemovedFromRunnersIfOldJobIsCancelled() {
harness.doLoad();
harness.engine.onEngineJobCancelled(mock(EngineJob.class), harness.cacheKey);
assertEquals(harness.runner, harness.runners.get(harness.cacheKey));
}
@Test
public void testRunnerIsNotCancelledIfOldJobIsCancelled() {
harness.doLoad();
harness.engine.onEngineJobCancelled(mock(EngineJob.class), harness.cacheKey);
verify(harness.runner, never()).cancel();
}
@Test @Test
public void testResourceIsAddedToCacheOnReleased() { public void testResourceIsAddedToCacheOnReleased() {
harness.engine.onResourceReleased(harness.cacheKey, harness.resource); harness.engine.onResourceReleased(harness.cacheKey, harness.resource);
......
...@@ -208,9 +208,12 @@ public class Engine implements EngineJobListener, MemoryCache.ResourceRemovedLis ...@@ -208,9 +208,12 @@ public class Engine implements EngineJobListener, MemoryCache.ResourceRemovedLis
} }
@Override @Override
public void onEngineJobCancelled(Key key) { public void onEngineJobCancelled(EngineJob engineJob, Key key) {
ResourceRunner runner = runners.remove(key); ResourceRunner runner = runners.get(key);
runner.cancel(); if (runner.getJob() == engineJob) {
runners.remove(key);
runner.cancel();
}
} }
@Override @Override
......
...@@ -13,7 +13,7 @@ import java.util.List; ...@@ -13,7 +13,7 @@ import java.util.List;
* A class that manages a load by adding and removing callbacks for for the load and notifying callbacks when the * A class that manages a load by adding and removing callbacks for for the load and notifying callbacks when the
* load completes. * load completes.
*/ */
public class EngineJob implements ResourceCallback { class EngineJob implements ResourceCallback {
private static final String TAG = "EngineJob"; private static final String TAG = "EngineJob";
private boolean isCacheable; private boolean isCacheable;
private final EngineJobListener listener; private final EngineJobListener listener;
...@@ -61,7 +61,7 @@ public class EngineJob implements ResourceCallback { ...@@ -61,7 +61,7 @@ public class EngineJob implements ResourceCallback {
return; return;
} }
isCancelled = true; isCancelled = true;
listener.onEngineJobCancelled(key); listener.onEngineJobCancelled(this, key);
} }
// Exposed for testing. // Exposed for testing.
......
...@@ -6,5 +6,5 @@ interface EngineJobListener { ...@@ -6,5 +6,5 @@ interface EngineJobListener {
public void onEngineJobComplete(Key key, Resource resource); public void onEngineJobComplete(Key key, Resource resource);
public void onEngineJobCancelled(Key key); public void onEngineJobCancelled(EngineJob engineJob, Key key);
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册