package com.github.droidfu.cachefu;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import android.os.Parcel;
import android.util.Log;
import com.github.droidfu.TestBase;
@RunWith(PowerMockRunner.class)
@PrepareForTest({ Log.class })
public class CachedListTest extends TestBase {
class TestObject extends CachedModel {
private String testString;
public TestObject() {
super();
}
public TestObject(String id) {
super(id);
}
public String getTestString() {
return testString;
}
public void setTestString(String testString) {
this.testString = testString;
}
@Override
public boolean reloadFromCachedModel(ModelCache modelCache, CachedModel cachedModel) {
TestObject cachedTestObject = (TestObject) cachedModel;
testString = cachedTestObject.testString;
return false;
}
@Override
public void readFromParcel(Parcel source) throws IOException {
super.readFromParcel(source);
testString = source.readString();
}
@Override
public void writeToParcel(Parcel dest, int flags) {
super.writeToParcel(dest, flags);
dest.writeString(testString);
}
@Override
public String createKey(String id) {
return "test_object_" + id;
}
}
@Test
public void testSaveStoresInCache() {
ModelCache modelCache = new ModelCache(1, 1, 1);
String id = "123";
CachedList<TestObject> preList = new CachedList<TestObject>(TestObject.class, id);
TestObject preObject;
preObject = new TestObject();
preObject.setTestString("this is a test");
preList.add(preObject);
preObject = new TestObject();
preObject.setTestString("this is also a test");
preList.add(preObject);
assertTrue(preList.save(modelCache));
@SuppressWarnings("unchecked")
CachedList<TestObject> postList = (CachedList<TestObject>) modelCache.get(preList.getKey());
assertEquals("this is a test", postList.getList().get(0).getTestString());
assertEquals("this is also a test", postList.getList().get(1).getTestString());
}
@Test
public void testReloadUpdatesObjectWithCachedData() {
ModelCache modelCache = new ModelCache(1, 1, 1);
String id = "123";
CachedList<CachedModel> originalList = new CachedList<CachedModel>(TestObject.class, id);
TestObject originalListObject;
originalListObject = new TestObject();
originalListObject.setTestString("original text");
originalList.add(originalListObject);
originalListObject = new TestObject();
originalListObject.setTestString("original other text");
originalList.add(originalListObject);
originalList.save(modelCache);
CachedList<CachedModel> overridingList = new CachedList<CachedModel>(TestObject.class, id);
TestObject overridingListObject = new TestObject();
overridingListObject.setTestString("new text");
overridingList.add(overridingListObject);
overridingList.save(modelCache);
assertTrue(originalList.reload(modelCache));
assertEquals(1, originalList.getList().size());
assertEquals("new text", ((TestObject) originalList.getList().get(0)).getTestString());
}
@Test
public void testReloadUpdatesListObjects() {
ModelCache modelCache = new ModelCache(2, 1, 1);
String id = "123";
CachedList<CachedModel> originalList = new CachedList<CachedModel>(TestObject.class, id);
TestObject originalListObject;
originalListObject = new TestObject();
originalListObject.setTestString("original text");
originalList.add(originalListObject);
originalListObject = new TestObject(id);
originalListObject.setTestString("original other text");
originalListObject.save(modelCache);
originalList.add(originalListObject);
originalList.save(modelCache);
TestObject overridingListObject = new TestObject(id);
overridingListObject.setTestString("new text");
overridingListObject.save(modelCache);
assertTrue(originalList.reload(modelCache));
assertEquals(2, originalList.getList().size());
assertEquals("original text", ((TestObject) originalList.getList().get(0)).getTestString());
assertEquals("new text", ((TestObject) originalList.getList().get(1)).getTestString());
}
}