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

Don't cancel new runners from old jobs.

Fixes #91
上级 5bd4f957
......@@ -105,9 +105,10 @@ public class EngineJobTest {
@Test
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
......@@ -164,7 +165,7 @@ public class EngineJobTest {
job.onResourceReady(harness.resource);
job.cancel();
verify(harness.listener, never()).onEngineJobCancelled(eq(harness.key));
verify(harness.listener, never()).onEngineJobCancelled(eq(job), eq(harness.key));
}
@Test
......@@ -173,7 +174,7 @@ public class EngineJobTest {
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
......
......@@ -290,7 +290,7 @@ public class EngineTest {
public void testRunnerIsRemovedFromRunnersOnEngineNotifiedJobCancel() {
harness.doLoad();
harness.engine.onEngineJobCancelled(harness.cacheKey);
harness.engine.onEngineJobCancelled(harness.job, harness.cacheKey);
assertFalse(harness.runners.containsKey(harness.cacheKey));
}
......@@ -299,11 +299,29 @@ public class EngineTest {
public void testRunnerIsCancelledOnEngineNotifiedJobCanceled() {
harness.doLoad();
harness.engine.onEngineJobCancelled(harness.cacheKey);
harness.engine.onEngineJobCancelled(harness.job, harness.cacheKey);
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
public void testResourceIsAddedToCacheOnReleased() {
harness.engine.onResourceReleased(harness.cacheKey, harness.resource);
......
......@@ -208,9 +208,12 @@ public class Engine implements EngineJobListener, MemoryCache.ResourceRemovedLis
}
@Override
public void onEngineJobCancelled(Key key) {
ResourceRunner runner = runners.remove(key);
runner.cancel();
public void onEngineJobCancelled(EngineJob engineJob, Key key) {
ResourceRunner runner = runners.get(key);
if (runner.getJob() == engineJob) {
runners.remove(key);
runner.cancel();
}
}
@Override
......
......@@ -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
* load completes.
*/
public class EngineJob implements ResourceCallback {
class EngineJob implements ResourceCallback {
private static final String TAG = "EngineJob";
private boolean isCacheable;
private final EngineJobListener listener;
......@@ -61,7 +61,7 @@ public class EngineJob implements ResourceCallback {
return;
}
isCancelled = true;
listener.onEngineJobCancelled(key);
listener.onEngineJobCancelled(this, key);
}
// Exposed for testing.
......
......@@ -6,5 +6,5 @@ interface EngineJobListener {
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.
先完成此消息的编辑!
想要评论请 注册