提交 767087d4 编写于 作者: S Sam Judd

Avoid I/O in DecodeJobTest

上级 2293cb27
......@@ -19,6 +19,7 @@ import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Arrays;
......@@ -44,7 +45,7 @@ public class DecodeJobTest {
private Harness harness;
@Before
public void setUp() {
public void setUp() throws FileNotFoundException {
harness = new Harness();
}
......@@ -594,15 +595,17 @@ public class DecodeJobTest {
ResourceEncoder<Object> resultEncoder = mock(ResourceEncoder.class);
ResourceDecoder<Object, Object> sourceDecoder = mock(ResourceDecoder.class);
Encoder<Object> sourceEncoder = mock(Encoder.class);
DecodeJob.FileOpener fileOpener = mock(DecodeJob.FileOpener.class);
DiskCacheStrategy diskCacheStrategy;
public Harness() {
public Harness() throws FileNotFoundException {
this(DiskCacheStrategy.RESULT);
}
public Harness(DiskCacheStrategy diskCacheStrategy) {
public Harness(DiskCacheStrategy diskCacheStrategy) throws FileNotFoundException {
this.diskCacheStrategy = diskCacheStrategy;
when(fileOpener.open(any(File.class))).thenReturn(mock(OutputStream.class));
when(key.getOriginalKey()).thenReturn(originalKey);
when(transcoder.transcode(eq(resource))).thenReturn(resource);
when(transformation.transform(eq(resource), eq(width), eq(height))).thenReturn(resource);
......@@ -614,7 +617,7 @@ public class DecodeJobTest {
public DecodeJob<Object, Object, Object> getJob() {
return new DecodeJob<Object, Object, Object>(key, width, height, dataFetcher, loadProvider, transformation,
transcoder, diskCache, diskCacheStrategy, priority);
transcoder, diskCache, diskCacheStrategy, priority, fileOpener);
}
}
......
......@@ -28,6 +28,7 @@ import java.io.OutputStream;
*/
class DecodeJob<A, T, Z> {
private static final String TAG = "DecodeJob";
private static final FileOpener DEFAULT_FILE_OPENER = new FileOpener();
private final EngineKey resultKey;
private final int width;
......@@ -39,11 +40,21 @@ class DecodeJob<A, T, Z> {
private final DiskCacheStrategy diskCacheStrategy;
private final DiskCache diskCache;
private final Priority priority;
private final FileOpener fileOpener;
private volatile boolean isCancelled;
public DecodeJob(EngineKey resultKey, int width, int height, DataFetcher<A> fetcher,
DataLoadProvider<A, T> loadProvider, Transformation<T> transformation, ResourceTranscoder<T, Z> transcoder,
DiskCache diskCache, DiskCacheStrategy diskCacheStrategy, Priority priority) {
this(resultKey, width, height, fetcher, loadProvider, transformation, transcoder, diskCache, diskCacheStrategy,
priority, DEFAULT_FILE_OPENER);
}
// Visible for testing.
DecodeJob(EngineKey resultKey, int width, int height, DataFetcher<A> fetcher,
DataLoadProvider<A, T> loadProvider, Transformation<T> transformation, ResourceTranscoder<T, Z> transcoder,
DiskCache diskCache, DiskCacheStrategy diskCacheStrategy, Priority priority, FileOpener fileOpener) {
this.resultKey = resultKey;
this.width = width;
this.height = height;
......@@ -54,6 +65,7 @@ class DecodeJob<A, T, Z> {
this.diskCacheStrategy = diskCacheStrategy;
this.diskCache = diskCache;
this.priority = priority;
this.fileOpener = fileOpener;
}
/**
......@@ -233,12 +245,16 @@ class DecodeJob<A, T, Z> {
return transcoder.transcode(transformed);
}
static class SourceWriter<T> implements DiskCache.Writer {
private void logWithTimeAndKey(String message, long startTime) {
Log.v(TAG, message + " in " + LogTime.getElapsedMillis(startTime) + resultKey);
}
class SourceWriter<DataType> implements DiskCache.Writer {
private final Encoder<T> encoder;
private final T data;
private final Encoder<DataType> encoder;
private final DataType data;
public SourceWriter(Encoder<T> encoder, T data) {
public SourceWriter(Encoder<DataType> encoder, DataType data) {
this.encoder = encoder;
this.data = data;
}
......@@ -248,7 +264,7 @@ class DecodeJob<A, T, Z> {
boolean success = false;
OutputStream os = null;
try {
os = new BufferedOutputStream(new FileOutputStream(file));
os = fileOpener.open(file);
success = encoder.encode(data, os);
} catch (FileNotFoundException e) {
if (Log.isLoggable(TAG, Log.DEBUG)) {
......@@ -267,7 +283,9 @@ class DecodeJob<A, T, Z> {
}
}
private void logWithTimeAndKey(String message, long startTime) {
Log.v(TAG, message + " in " + LogTime.getElapsedMillis(startTime) + resultKey);
static class FileOpener {
public OutputStream open(File file) throws FileNotFoundException {
return new BufferedOutputStream(new FileOutputStream(file));
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册