TestSharedPreferences.java revision 0893fb5169505a145b7c0b7312dd7f64222843b1
1fbb321961884c9e62b212f315c4687211a16c22fPhil Goodwin & Tyler Schultzpackage com.xtremelabs.robolectric.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
867969d7eda6d9477ee8dde60ba19e51715ce7d2dcMichael Portuesi    	Hashtable<String, Object> editsThatNeedCommit = new Hashtable<String, Object>();
877969d7eda6d9477ee8dde60ba19e51715ce7d2dcMichael Portuesi    	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);
937969d7eda6d9477ee8dde60ba19e51715ce7d2dcMichael Portuesi        	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);
1007969d7eda6d9477ee8dde60ba19e51715ce7d2dcMichael Portuesi        	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);
1077969d7eda6d9477ee8dde60ba19e51715ce7d2dcMichael Portuesi        	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);
1147969d7eda6d9477ee8dde60ba19e51715ce7d2dcMichael Portuesi        	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);
1217969d7eda6d9477ee8dde60ba19e51715ce7d2dcMichael Portuesi        	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) {
1277969d7eda6d9477ee8dde60ba19e51715ce7d2dcMichael Portuesi        	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) {
1477969d7eda6d9477ee8dde60ba19e51715ce7d2dcMichael Portuesi                	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