package com.octo.android.robospice.persistence.file; import java.io.File; import java.util.List; import java.util.Map; import android.test.AndroidTestCase; import android.test.suitebuilder.annotation.MediumTest; @MediumTest public abstract class AbstractInFileObjectPersisterTest extends AndroidTestCase { private static final int TEST_DATE_IN_CACHE = 5000; private static final long TEST_EXPIRATION_DURATION = 1000; private static final long TEST_EXPIRATION_DURATION_LONG = 3000; protected InFileObjectPersister<Object> inFileObjectPersister; protected void setUp(InFileObjectPersister<Object> inFileObjectPersister) throws Exception { super.setUp(); this.inFileObjectPersister = inFileObjectPersister; } @Override protected void tearDown() throws Exception { inFileObjectPersister.removeAllDataFromCache(); super.tearDown(); } public void testGetCachePrefix() { String actual = inFileObjectPersister.getCachePrefix(); assertEquals(inFileObjectPersister.getClass().getSimpleName() + "_" + inFileObjectPersister.getHandledClass().getSimpleName() + "_", actual); } public void testRemoveDataFromCache(Object data, Object cacheKey) throws Exception { // given // when inFileObjectPersister.saveDataToCacheAndReturnData(data, cacheKey); // then File cacheFile = inFileObjectPersister.getCacheFile(cacheKey); assertTrue(cacheFile.exists()); // when inFileObjectPersister.removeDataFromCache(cacheKey); // then assertFalse(cacheFile.exists()); } public void testRemoveAllDataFromCache(Map<Object, Object> mapDataToCacheKey) throws Exception { // given // when for (Map.Entry<Object, Object> entry : mapDataToCacheKey.entrySet()) { inFileObjectPersister.saveDataToCacheAndReturnData(entry.getKey(), entry.getValue()); } // then for (Map.Entry<Object, Object> entry : mapDataToCacheKey.entrySet()) { File cacheFile = inFileObjectPersister.getCacheFile(entry.getValue()); assertTrue(cacheFile.exists()); } // when inFileObjectPersister.removeAllDataFromCache(); // then for (Map.Entry<Object, Object> entry : mapDataToCacheKey.entrySet()) { File cacheFile = inFileObjectPersister.getCacheFile(entry.getValue()); assertFalse(cacheFile.exists()); } } public void testGetAllCacheKeys(Map<Object, Object> mapDataToCacheKey) throws Exception { // given for (Map.Entry<Object, Object> entry : mapDataToCacheKey.entrySet()) { inFileObjectPersister.saveDataToCacheAndReturnData(entry.getKey(), entry.getValue()); } // when List<Object> allCacheKeys = inFileObjectPersister.getAllCacheKeys(); // then assertEquals(mapDataToCacheKey.values().size(), allCacheKeys.size()); allCacheKeys.removeAll(mapDataToCacheKey.values()); assertTrue(allCacheKeys.isEmpty()); } public void testIsDataInCache_not_expired(Object data, Object cacheKey) throws Exception { inFileObjectPersister.saveDataToCacheAndReturnData(data, cacheKey); assertTrue(inFileObjectPersister.isDataInCache(cacheKey, Long.MAX_VALUE)); } public void testIsDataInCache_expired(Object data, Object cacheKey) throws Exception { inFileObjectPersister.saveDataToCacheAndReturnData(data, cacheKey); Thread.sleep(TEST_EXPIRATION_DURATION); assertFalse(inFileObjectPersister.isDataInCache(cacheKey, TEST_EXPIRATION_DURATION)); } public void testIsDataInCache_with_removal(Object data, Object cacheKey) throws Exception { // given // when inFileObjectPersister.saveDataToCacheAndReturnData(data, cacheKey); // then assertTrue(inFileObjectPersister.isDataInCache(cacheKey, TEST_EXPIRATION_DURATION_LONG)); // when inFileObjectPersister.removeDataFromCache(cacheKey); // then assertFalse(inFileObjectPersister.isDataInCache(cacheKey, Long.MAX_VALUE)); } public void testGetDateOfDataInCache_when_there_is_some_data_in_cache(Object data, Object cacheKey) throws Exception { // given inFileObjectPersister.saveDataToCacheAndReturnData(data, cacheKey); // when inFileObjectPersister.getCacheFile(cacheKey).setLastModified(TEST_DATE_IN_CACHE); // then assertEquals(TEST_DATE_IN_CACHE, inFileObjectPersister.getCreationDateInCache(cacheKey)); } public void testGetDateOfDataInCache_when_there_is_no_data_in_cache(Object data, Object cacheKey) throws Exception { // given inFileObjectPersister.removeDataFromCache(cacheKey); // when // then try { inFileObjectPersister.getCreationDateInCache(cacheKey); fail("Should have thrown an exception"); } catch (Exception ex) { // nothing assertTrue(true); } } }