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