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