TestSharedPreferences.java revision 2cdde11355e7c249e83a8b7aaabae5977bbc3e49
12cdde11355e7c249e83a8b7aaabae5977bbc3e49Phil Goodwinpackage com.xtremelabs.robolectric.tester.android.content; 24610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard 34610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richardimport android.content.SharedPreferences; 44610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard 57969d7eda6d9477ee8dde60ba19e51715ce7d2dcMichael Portuesiimport java.util.HashSet; 64610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richardimport java.util.Hashtable; 74610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richardimport java.util.Map; 87969d7eda6d9477ee8dde60ba19e51715ce7d2dcMichael Portuesiimport java.util.Set; 94610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard 104610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richardpublic class TestSharedPreferences implements SharedPreferences { 114610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard 125ae1c7fd48d3a37bab8af74fec0f70f0a0935f49Christian Williams & Phil Goodwin public Map<String, Hashtable<String, Object>> content; 134610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard private String filename; 144610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard public int mode; 154610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard 165ae1c7fd48d3a37bab8af74fec0f70f0a0935f49Christian Williams & Phil Goodwin public TestSharedPreferences(Map<String, Hashtable<String, Object>> content, String name, int mode) { 175ae1c7fd48d3a37bab8af74fec0f70f0a0935f49Christian Williams & Phil Goodwin this.content = content; 184610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard this.filename = name; 194610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard this.mode = mode; 204610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard if (!content.containsKey(name)) { 214610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard content.put(name, new Hashtable<String, Object>()); 224610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard } 234610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard } 244610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard 254610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard @Override 264610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard public Map<String, ?> getAll() { 27cb3e68e10f4fcb059e68849694fc4d61e4b110d3Ian Fisher & Tyler Schultz return null; 284610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard } 294610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard 304610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard @Override 314610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard public String getString(String key, String defValue) { 324610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard return (String) getValue(key, defValue); 334610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard } 344610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard 354610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard private Object getValue(String key, Object defValue) { 36382df616dd52730a354a4c8e6fa466465bcd4488Ian Fisher & Ryan Richard Hashtable<String, Object> fileHash = content.get(filename); 37382df616dd52730a354a4c8e6fa466465bcd4488Ian Fisher & Ryan Richard if (fileHash != null) { 38382df616dd52730a354a4c8e6fa466465bcd4488Ian Fisher & Ryan Richard Object value = fileHash.get(key); 39382df616dd52730a354a4c8e6fa466465bcd4488Ian Fisher & Ryan Richard if (value != null) { 40382df616dd52730a354a4c8e6fa466465bcd4488Ian Fisher & Ryan Richard return value; 41382df616dd52730a354a4c8e6fa466465bcd4488Ian Fisher & Ryan Richard } 424610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard } 43382df616dd52730a354a4c8e6fa466465bcd4488Ian Fisher & Ryan Richard return defValue; 444610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard } 454610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard 464610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard @Override 474610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard public int getInt(String key, int defValue) { 484610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard return (Integer) getValue(key, defValue); 494610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard } 504610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard 514610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard @Override 524610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard public long getLong(String key, long defValue) { 534610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard return (Long) getValue(key, defValue); 544610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard } 554610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard 564610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard @Override 574610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard public float getFloat(String key, float defValue) { 584610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard return (Float) getValue(key, defValue); 594610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard } 604610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard 614610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard @Override 624610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard public boolean getBoolean(String key, boolean defValue) { 634610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard return (Boolean) getValue(key, defValue); 644610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard } 654610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard 664610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard @Override 674610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard public boolean contains(String key) { 680893fb5169505a145b7c0b7312dd7f64222843b1Christian Williams return content.get(filename).containsKey(key); 694610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard } 704610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard 714610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard @Override 724610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard public Editor edit() { 73ff7b3572235b9dee6ac969e70287e2f7343e2edcPhil Goodwin & Tyler Schultz return new TestSharedPreferencesEditor(); 744610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard } 754610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard 764610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard @Override 774610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard public void registerOnSharedPreferenceChangeListener(OnSharedPreferenceChangeListener listener) { 784610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard } 794610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard 804610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard @Override 814610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard public void unregisterOnSharedPreferenceChangeListener(OnSharedPreferenceChangeListener listener) { 824610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard } 834610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard 84ff7b3572235b9dee6ac969e70287e2f7343e2edcPhil Goodwin & Tyler Schultz private class TestSharedPreferencesEditor implements Editor { 854610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard 8640c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams Hashtable<String, Object> editsThatNeedCommit = new Hashtable<String, Object>(); 8740c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams Set<String> editsThatNeedRemove = new HashSet<String>(); 884610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard private boolean shouldClearOnCommit = false; 894610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard 904610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard @Override 914610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard public Editor putString(String key, String value) { 924610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard editsThatNeedCommit.put(key, value); 9340c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams editsThatNeedRemove.remove(key); 944610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard return this; 954610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard } 964610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard 974610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard @Override 984610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard public Editor putInt(String key, int value) { 994610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard editsThatNeedCommit.put(key, value); 10040c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams editsThatNeedRemove.remove(key); 1014610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard return this; 1024610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard } 1034610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard 1044610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard @Override 1054610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard public Editor putLong(String key, long value) { 1064610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard editsThatNeedCommit.put(key, value); 10740c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams editsThatNeedRemove.remove(key); 1084610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard return this; 1094610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard } 1104610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard 1114610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard @Override 1124610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard public Editor putFloat(String key, float value) { 1134610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard editsThatNeedCommit.put(key, value); 11440c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams editsThatNeedRemove.remove(key); 1154610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard return this; 1164610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard } 1174610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard 1184610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard @Override 1194610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard public Editor putBoolean(String key, boolean value) { 1204610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard editsThatNeedCommit.put(key, value); 12140c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams editsThatNeedRemove.remove(key); 1224610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard return this; 1234610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard } 1244610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard 1254610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard @Override 1264610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard public Editor remove(String key) { 12740c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams editsThatNeedRemove.add(key); 1287969d7eda6d9477ee8dde60ba19e51715ce7d2dcMichael Portuesi return this; 1294610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard } 1304610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard 1314610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard @Override 1324610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard public Editor clear() { 1334610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard shouldClearOnCommit = true; 1344610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard return this; 1354610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard } 1364610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard 1374610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard @Override 1384610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard public boolean commit() { 139cb3e68e10f4fcb059e68849694fc4d61e4b110d3Ian Fisher & Tyler Schultz Map<String, Object> previousContent = content.get(filename); 140cb3e68e10f4fcb059e68849694fc4d61e4b110d3Ian Fisher & Tyler Schultz if (shouldClearOnCommit) { 141cb3e68e10f4fcb059e68849694fc4d61e4b110d3Ian Fisher & Tyler Schultz previousContent.clear(); 142cb3e68e10f4fcb059e68849694fc4d61e4b110d3Ian Fisher & Tyler Schultz } else { 143cb3e68e10f4fcb059e68849694fc4d61e4b110d3Ian Fisher & Tyler Schultz for (String key : editsThatNeedCommit.keySet()) { 144cb3e68e10f4fcb059e68849694fc4d61e4b110d3Ian Fisher & Tyler Schultz previousContent.put(key, editsThatNeedCommit.get(key)); 1454610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard } 1467969d7eda6d9477ee8dde60ba19e51715ce7d2dcMichael Portuesi for (String key : editsThatNeedRemove) { 14740c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams previousContent.remove(key); 1487969d7eda6d9477ee8dde60ba19e51715ce7d2dcMichael Portuesi } 1494610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard } 150cb3e68e10f4fcb059e68849694fc4d61e4b110d3Ian Fisher & Tyler Schultz return true; 1514610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard } 1521bd81c8df1eab3bc9a15cfe6f8c8a702f02d77f9Phil Goodwin & Tyler Schultz 1531bd81c8df1eab3bc9a15cfe6f8c8a702f02d77f9Phil Goodwin & Tyler Schultz @Override public void apply() { 154ff7b3572235b9dee6ac969e70287e2f7343e2edcPhil Goodwin & Tyler Schultz commit(); 1551bd81c8df1eab3bc9a15cfe6f8c8a702f02d77f9Phil Goodwin & Tyler Schultz } 1564610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard } 1574610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard} 158