1d0cb59970def5b7bbad64be64abec240522ae885Aaron Daypackage com.xtremelabs.robolectric.tester.android.content; 2d0cb59970def5b7bbad64be64abec240522ae885Aaron Day 3d0cb59970def5b7bbad64be64abec240522ae885Aaron Dayimport org.junit.Before; 4d0cb59970def5b7bbad64be64abec240522ae885Aaron Dayimport org.junit.Test; 5d0cb59970def5b7bbad64be64abec240522ae885Aaron Dayimport org.junit.runner.RunWith; 6c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day 7c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Dayimport static org.hamcrest.CoreMatchers.equalTo; 8d0cb59970def5b7bbad64be64abec240522ae885Aaron Dayimport static org.junit.Assert.*; 9d0cb59970def5b7bbad64be64abec240522ae885Aaron Day 10d0cb59970def5b7bbad64be64abec240522ae885Aaron Dayimport java.util.HashMap; 11d0cb59970def5b7bbad64be64abec240522ae885Aaron Dayimport java.util.Map; 12d0cb59970def5b7bbad64be64abec240522ae885Aaron Day 13d0cb59970def5b7bbad64be64abec240522ae885Aaron Dayimport android.content.SharedPreferences; 14d0cb59970def5b7bbad64be64abec240522ae885Aaron Day 15d0cb59970def5b7bbad64be64abec240522ae885Aaron Dayimport com.xtremelabs.robolectric.WithTestDefaultsRunner; 16d0cb59970def5b7bbad64be64abec240522ae885Aaron Day 17d0cb59970def5b7bbad64be64abec240522ae885Aaron Day/** 18d0cb59970def5b7bbad64be64abec240522ae885Aaron Day * TestSharedPreferencesTest 19d0cb59970def5b7bbad64be64abec240522ae885Aaron Day */ 20d0cb59970def5b7bbad64be64abec240522ae885Aaron Day@RunWith(WithTestDefaultsRunner.class) 21d0cb59970def5b7bbad64be64abec240522ae885Aaron Daypublic class TestSharedPreferencesTest { 22c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day protected final static String FILENAME = "filename"; 23c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day private HashMap<String, Map<String, Object>> content; 24c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day private SharedPreferences.Editor editor; 25c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day private TestSharedPreferences sharedPreferences; 26d0cb59970def5b7bbad64be64abec240522ae885Aaron Day 27d0cb59970def5b7bbad64be64abec240522ae885Aaron Day @Before 28c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day public void setUp() { 29d0cb59970def5b7bbad64be64abec240522ae885Aaron Day content = new HashMap<String, Map<String, Object>>(); 30d0cb59970def5b7bbad64be64abec240522ae885Aaron Day 31c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day sharedPreferences = new TestSharedPreferences(content, FILENAME, 3); 32c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day editor = sharedPreferences.edit(); 33c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day editor.putBoolean("boolean", true); 34c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day editor.putFloat("float", 1.1f); 35c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day editor.putInt("int", 2); 36c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day editor.putLong("long", 3l); 37c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day editor.putString("string", "foobar"); 38d0cb59970def5b7bbad64be64abec240522ae885Aaron Day } 39d0cb59970def5b7bbad64be64abec240522ae885Aaron Day 40d0cb59970def5b7bbad64be64abec240522ae885Aaron Day @Test 41c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day public void commit_shouldStoreValues() throws Exception { 42c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day editor.commit(); 43d0cb59970def5b7bbad64be64abec240522ae885Aaron Day 44c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day TestSharedPreferences anotherSharedPreferences = new TestSharedPreferences(content, FILENAME, 3); 45c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day assertTrue(anotherSharedPreferences.getBoolean("boolean", false)); 46c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day assertThat(anotherSharedPreferences.getFloat("float", 666f), equalTo(1.1f)); 47c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day assertThat(anotherSharedPreferences.getInt("int", 666), equalTo(2)); 48c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day assertThat(anotherSharedPreferences.getLong("long", 666l), equalTo(3l)); 49c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day assertThat(anotherSharedPreferences.getString("string", "wacka wa"), equalTo("foobar")); 50c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day } 51d0cb59970def5b7bbad64be64abec240522ae885Aaron Day 52c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day @Test 53c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day public void getAll_shouldReturnAllValues() throws Exception { 54c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day editor.commit(); 55c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day Map<String, ?> all = sharedPreferences.getAll(); 56c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day assertThat(all.size(), equalTo(5)); 57c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day assertThat((Integer) all.get("int"), equalTo(2)); 58d0cb59970def5b7bbad64be64abec240522ae885Aaron Day } 59d0cb59970def5b7bbad64be64abec240522ae885Aaron Day 60d0cb59970def5b7bbad64be64abec240522ae885Aaron Day @Test 61c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day public void commit_shouldRemoveValuesThenSetValues() throws Exception { 62c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day content.put(FILENAME, new HashMap<String, Object>()); 63c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day content.get(FILENAME).put("deleteMe", "foo"); 64d0cb59970def5b7bbad64be64abec240522ae885Aaron Day 65c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day editor.remove("deleteMe"); 66c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day 67c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day editor.putString("dontDeleteMe", "baz"); 68c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day editor.remove("dontDeleteMe"); 69d0cb59970def5b7bbad64be64abec240522ae885Aaron Day 70d0cb59970def5b7bbad64be64abec240522ae885Aaron Day editor.commit(); 71d0cb59970def5b7bbad64be64abec240522ae885Aaron Day 72c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day TestSharedPreferences anotherSharedPreferences = new TestSharedPreferences(content, FILENAME, 3); 73c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day assertTrue(anotherSharedPreferences.getBoolean("boolean", false)); 74c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day assertThat(anotherSharedPreferences.getFloat("float", 666f), equalTo(1.1f)); 75c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day assertThat(anotherSharedPreferences.getInt("int", 666), equalTo(2)); 76c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day assertThat(anotherSharedPreferences.getLong("long", 666l), equalTo(3l)); 77c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day assertThat(anotherSharedPreferences.getString("string", "wacka wa"), equalTo("foobar")); 78c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day 79c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day assertThat(anotherSharedPreferences.getString("deleteMe", "awol"), equalTo("awol")); 80c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day assertThat(anotherSharedPreferences.getString("dontDeleteMe", "oops"), equalTo("baz")); 81d0cb59970def5b7bbad64be64abec240522ae885Aaron Day } 82d0cb59970def5b7bbad64be64abec240522ae885Aaron Day 83d0cb59970def5b7bbad64be64abec240522ae885Aaron Day @Test 84c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day public void commit_shouldClearThenSetValues() throws Exception { 85c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day content.put(FILENAME, new HashMap<String, Object>()); 86c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day content.get(FILENAME).put("deleteMe", "foo"); 87d0cb59970def5b7bbad64be64abec240522ae885Aaron Day 88c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day editor.clear(); 89c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day editor.putString("dontDeleteMe", "baz"); 90d0cb59970def5b7bbad64be64abec240522ae885Aaron Day 91d0cb59970def5b7bbad64be64abec240522ae885Aaron Day editor.commit(); 92d0cb59970def5b7bbad64be64abec240522ae885Aaron Day 93c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day TestSharedPreferences anotherSharedPreferences = new TestSharedPreferences(content, FILENAME, 3); 94c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day assertTrue(anotherSharedPreferences.getBoolean("boolean", false)); 95c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day assertThat(anotherSharedPreferences.getFloat("float", 666f), equalTo(1.1f)); 96c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day assertThat(anotherSharedPreferences.getInt("int", 666), equalTo(2)); 97c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day assertThat(anotherSharedPreferences.getLong("long", 666l), equalTo(3l)); 98c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day assertThat(anotherSharedPreferences.getString("string", "wacka wa"), equalTo("foobar")); 99d0cb59970def5b7bbad64be64abec240522ae885Aaron Day 100c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day assertThat(anotherSharedPreferences.getString("deleteMe", "awol"), equalTo("awol")); 101c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day assertThat(anotherSharedPreferences.getString("dontDeleteMe", "oops"), equalTo("baz")); 102c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day } 103c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day 104d0cb59970def5b7bbad64be64abec240522ae885Aaron Day @Test 105c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day public void apply_shouldStoreValues() throws Exception { 106c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day editor.apply(); 107d0cb59970def5b7bbad64be64abec240522ae885Aaron Day 108c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day TestSharedPreferences anotherSharedPreferences = new TestSharedPreferences(content, FILENAME, 3); 109c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day assertThat(anotherSharedPreferences.getString("string", "wacka wa"), equalTo("foobar")); 110c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day } 111d0cb59970def5b7bbad64be64abec240522ae885Aaron Day 112c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day @Test 113c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day public void shouldReturnDefaultValues() throws Exception { 114c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day TestSharedPreferences anotherSharedPreferences = new TestSharedPreferences(content, "bazBang", 3); 115c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day 116c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day assertFalse(anotherSharedPreferences.getBoolean("boolean", false)); 117c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day assertThat(anotherSharedPreferences.getFloat("float", 666f), equalTo(666f)); 118c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day assertThat(anotherSharedPreferences.getInt("int", 666), equalTo(666)); 119c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day assertThat(anotherSharedPreferences.getLong("long", 666l), equalTo(666l)); 120c9c606f4f4654d256acb516a30e8f78ab6f0cb0fAaron Day assertThat(anotherSharedPreferences.getString("string", "wacka wa"), equalTo("wacka wa")); 121d0cb59970def5b7bbad64be64abec240522ae885Aaron Day } 12257fc28077e1c704ced682e23c19987b1514f5aa3Dave 12357fc28077e1c704ced682e23c19987b1514f5aa3Dave @Test 12457fc28077e1c704ced682e23c19987b1514f5aa3Dave public void shouldStoreRegisteredListeners() { 12557fc28077e1c704ced682e23c19987b1514f5aa3Dave TestSharedPreferences anotherSharedPreferences = new TestSharedPreferences(content, "bazBang", 3); 12657fc28077e1c704ced682e23c19987b1514f5aa3Dave anotherSharedPreferences.registerOnSharedPreferenceChangeListener(testListener); 12757fc28077e1c704ced682e23c19987b1514f5aa3Dave assertTrue(anotherSharedPreferences.hasListener(testListener)); 12857fc28077e1c704ced682e23c19987b1514f5aa3Dave } 12957fc28077e1c704ced682e23c19987b1514f5aa3Dave 13057fc28077e1c704ced682e23c19987b1514f5aa3Dave @Test 13157fc28077e1c704ced682e23c19987b1514f5aa3Dave public void shouldRemoveRegisteredListenersOnUnresgister() { 13257fc28077e1c704ced682e23c19987b1514f5aa3Dave TestSharedPreferences anotherSharedPreferences = new TestSharedPreferences(content, "bazBang", 3); 13357fc28077e1c704ced682e23c19987b1514f5aa3Dave anotherSharedPreferences.registerOnSharedPreferenceChangeListener(testListener); 13457fc28077e1c704ced682e23c19987b1514f5aa3Dave 13557fc28077e1c704ced682e23c19987b1514f5aa3Dave anotherSharedPreferences.unregisterOnSharedPreferenceChangeListener(testListener); 13657fc28077e1c704ced682e23c19987b1514f5aa3Dave assertFalse(anotherSharedPreferences.hasListener(testListener)); 13757fc28077e1c704ced682e23c19987b1514f5aa3Dave } 13857fc28077e1c704ced682e23c19987b1514f5aa3Dave 13957fc28077e1c704ced682e23c19987b1514f5aa3Dave private SharedPreferences.OnSharedPreferenceChangeListener testListener = new SharedPreferences.OnSharedPreferenceChangeListener() { 14057fc28077e1c704ced682e23c19987b1514f5aa3Dave @Override 14157fc28077e1c704ced682e23c19987b1514f5aa3Dave public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { 14257fc28077e1c704ced682e23c19987b1514f5aa3Dave } 14357fc28077e1c704ced682e23c19987b1514f5aa3Dave }; 144d0cb59970def5b7bbad64be64abec240522ae885Aaron Day} 145