1e8134988f069881d21ebeed895968b63095a0153Jake Whartonpackage org.robolectric.shadows;
2e8134988f069881d21ebeed895968b63095a0153Jake Wharton
3851f2a9519be23c73a9e2929128179b405e2e7a6Christian Williamsimport static org.robolectric.shadow.api.Shadow.newInstanceOf;
4b7c803ed063c0d2ca0c29b5a8f9954289c804ac2Christian Williams
5851f2a9519be23c73a9e2929128179b405e2e7a6Christian Williamsimport android.net.http.HttpResponseCache;
6e8134988f069881d21ebeed895968b63095a0153Jake Whartonimport java.io.File;
7e8134988f069881d21ebeed895968b63095a0153Jake Whartonimport java.net.CacheResponse;
8e8134988f069881d21ebeed895968b63095a0153Jake Whartonimport java.net.URI;
9e8134988f069881d21ebeed895968b63095a0153Jake Whartonimport java.net.URLConnection;
10e8134988f069881d21ebeed895968b63095a0153Jake Whartonimport java.util.List;
11e8134988f069881d21ebeed895968b63095a0153Jake Whartonimport java.util.Map;
12851f2a9519be23c73a9e2929128179b405e2e7a6Christian Williamsimport org.robolectric.Shadows;
13851f2a9519be23c73a9e2929128179b405e2e7a6Christian Williamsimport org.robolectric.annotation.Implementation;
14851f2a9519be23c73a9e2929128179b405e2e7a6Christian Williamsimport org.robolectric.annotation.Implements;
15e8134988f069881d21ebeed895968b63095a0153Jake Wharton
16e8134988f069881d21ebeed895968b63095a0153Jake Wharton@SuppressWarnings({"UnusedDeclaration"})
17e8134988f069881d21ebeed895968b63095a0153Jake Wharton@Implements(value = HttpResponseCache.class, callThroughByDefault = false)
18e8134988f069881d21ebeed895968b63095a0153Jake Whartonpublic class ShadowHttpResponseCache {
1929a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  private static final Object LOCK = new Object();
2029a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams
2129a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  static ShadowHttpResponseCache installed = null;
2229a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams
2329a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  private HttpResponseCache originalObject;
2429a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  private File directory;
2529a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  private long maxSize;
2629a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  private int requestCount = 0;
2729a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  private int hitCount = 0;
2829a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  private int networkCount = 0;
2929a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams
3029a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  @Implementation
3129a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  public static HttpResponseCache install(File directory, long maxSize) {
3229a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams    HttpResponseCache cache = newInstanceOf(HttpResponseCache.class);
33006481c035ec4736b0b7a88e5dde9efc12591cd2Erich Douglass and Ryan Spore    ShadowHttpResponseCache shadowCache = Shadows.shadowOf(cache);
3429a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams    shadowCache.originalObject = cache;
3529a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams    shadowCache.directory = directory;
3629a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams    shadowCache.maxSize = maxSize;
3729a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams    synchronized (LOCK) {
3829a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams      installed = shadowCache;
3929a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams      return cache;
40e8134988f069881d21ebeed895968b63095a0153Jake Wharton    }
4129a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  }
42e8134988f069881d21ebeed895968b63095a0153Jake Wharton
4329a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  @Implementation
4429a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  public static HttpResponseCache getInstalled() {
4529a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams    synchronized (LOCK) {
4629a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams      return (installed != null) ? installed.originalObject : null;
47e8134988f069881d21ebeed895968b63095a0153Jake Wharton    }
4829a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  }
4929a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams
5029a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  @Implementation
5129a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  public long maxSize() {
5229a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams    return maxSize;
5329a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  }
5429a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams
5529a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  @Implementation
5629a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  public long size() {
5729a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams    return 0;
5829a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  }
5929a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams
6029a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  @Implementation
6129a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  public void close() {
6229a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams    synchronized (LOCK) {
6329a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams      installed = null;
64e8134988f069881d21ebeed895968b63095a0153Jake Wharton    }
6529a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  }
6629a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams
6729a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  @Implementation
6829a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  public void delete() {
6929a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams    close();
7029a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  }
7129a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams
7229a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  @Implementation
7329a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  public int getHitCount() {
7429a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams    return hitCount;
7529a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  }
7629a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams
7729a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  @Implementation
7829a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  public int getNetworkCount() {
7929a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams    return networkCount;
8029a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  }
8129a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams
8229a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  @Implementation
8329a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  public int getRequestCount() {
8429a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams    return requestCount;
8529a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  }
8629a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams
8729a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  @Implementation
8829a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  public CacheResponse get(URI uri, String requestMethod, Map<String, List<String>> requestHeaders) {
8929a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams    requestCount += 1;
9029a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams    networkCount += 1; // Always pretend we had a cache miss and had to fall back to the network.
9129a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams    return null;
9229a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  }
9329a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams
9429a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  @Implementation
9529a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  public CacheResponse put(URI uri, URLConnection urlConnection) {
9629a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams    // Do not cache any data. All requests will be a miss.
9729a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams    return null;
9829a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  }
99e8134988f069881d21ebeed895968b63095a0153Jake Wharton}
100