package org.robolectric.internal.dependency; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.net.URL; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; import org.robolectric.internal.dependency.CachedDependencyResolver.Cache; import static org.junit.Assert.*; public class CachedDependencyResolverFileCacheTest { private final String ID = "id"; @Rule public TemporaryFolder temporaryFolder = new TemporaryFolder(); @Test public void shouldLoadNullWhenCacheIsEmpty() throws Exception { Cache cache = new CachedDependencyResolver.FileCache(temporaryFolder.getRoot(), 1000); String value = cache.load(ID, String.class); assertNull(value); } @Test public void shouldLoadObjectWhenCacheExists() throws Exception { Cache cache = new CachedDependencyResolver.FileCache(temporaryFolder.getRoot(), 1000); String expectedValue = "some string"; writeToCacheFile(expectedValue); String value = cache.load(ID, String.class); assertEquals(expectedValue, value); } @Test public void shouldLoadNullWhenObjectInCacheHaveBadType() throws Exception { Cache cache = new CachedDependencyResolver.FileCache(temporaryFolder.getRoot(), 1000); writeToCacheFile(123L); assertNull(cache.load(ID, String.class)); } @Test public void shouldWriteObjectToFile() throws Exception { Cache cache = new CachedDependencyResolver.FileCache(temporaryFolder.getRoot(), 1000); Long expectedValue = 421L; assertTrue(cache.write(ID, expectedValue)); Object actual = readFromCacheFile(); assertEquals(expectedValue, actual); } @Test public void shouldWriteUrlArrayToFile() throws Exception { Cache cache = new CachedDependencyResolver.FileCache(temporaryFolder.getRoot(), 1000); URL[] urls = { new URL("http://localhost") }; assertTrue(cache.write(ID, urls)); Object actual = readFromCacheFile(); assertArrayEquals(urls, (URL[]) actual); } private Object readFromCacheFile() throws ClassNotFoundException, IOException { File dir = temporaryFolder.getRoot(); File dest = new File(dir, ID); ObjectInputStream in = new ObjectInputStream(new FileInputStream(dest)); try { return in.readObject(); } finally { in.close(); } } private void writeToCacheFile(Object expectedValue) throws IOException { File dir = temporaryFolder.getRoot(); File dest = new File(dir, ID); ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(dest)); try { out.writeObject(expectedValue); } finally { out.close(); } } }