15afb76fee52a40e7b7738d755045d519ab623a78Jonathan Gerrishpackage org.robolectric.shadows; 2d0cb59970def5b7bbad64be64abec240522ae885Aaron Day 3851f2a9519be23c73a9e2929128179b405e2e7a6Christian Williamsimport static org.assertj.core.api.Assertions.assertThat; 4851f2a9519be23c73a9e2929128179b405e2e7a6Christian Williamsimport static org.junit.Assert.assertFalse; 5851f2a9519be23c73a9e2929128179b405e2e7a6Christian Williamsimport static org.junit.Assert.assertTrue; 6851f2a9519be23c73a9e2929128179b405e2e7a6Christian Williamsimport static org.mockito.Mockito.mock; 7851f2a9519be23c73a9e2929128179b405e2e7a6Christian Williamsimport static org.mockito.Mockito.verifyZeroInteractions; 8851f2a9519be23c73a9e2929128179b405e2e7a6Christian Williams 95afb76fee52a40e7b7738d755045d519ab623a78Jonathan Gerrishimport android.content.Context; 10499c2e9e487e04df893c95cf9b4ba57376652fdcChristian Williamsimport android.content.SharedPreferences; 11851f2a9519be23c73a9e2929128179b405e2e7a6Christian Williamsimport java.util.ArrayList; 12851f2a9519be23c73a9e2929128179b405e2e7a6Christian Williamsimport java.util.HashSet; 13851f2a9519be23c73a9e2929128179b405e2e7a6Christian Williamsimport java.util.List; 14851f2a9519be23c73a9e2929128179b405e2e7a6Christian Williamsimport java.util.Set; 15d0cb59970def5b7bbad64be64abec240522ae885Aaron Dayimport org.junit.Before; 16d0cb59970def5b7bbad64be64abec240522ae885Aaron Dayimport org.junit.Test; 17d0cb59970def5b7bbad64be64abec240522ae885Aaron Dayimport org.junit.runner.RunWith; 18ceb8863e0cd0706c72351f063bc7af3c7d76d120Jonathan Gerrishimport org.robolectric.RobolectricTestRunner; 19084d588b645d53c1110ff24b82433b5a331cc6d3James Lemieuximport org.robolectric.RuntimeEnvironment; 20d0cb59970def5b7bbad64be64abec240522ae885Aaron Day 21ceb8863e0cd0706c72351f063bc7af3c7d76d120Jonathan Gerrish@RunWith(RobolectricTestRunner.class) 225afb76fee52a40e7b7738d755045d519ab623a78Jonathan Gerrishpublic class ShadowSharedPreferencesTest { 235afb76fee52a40e7b7738d755045d519ab623a78Jonathan Gerrish private final static String FILENAME = "filename"; 2429a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams private SharedPreferences.Editor editor; 255afb76fee52a40e7b7738d755045d519ab623a78Jonathan Gerrish private SharedPreferences sharedPreferences; 2629a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams 275afb76fee52a40e7b7738d755045d519ab623a78Jonathan Gerrish private final Set<String> stringSet = new HashSet<>(); 2829a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams 295afb76fee52a40e7b7738d755045d519ab623a78Jonathan Gerrish private Context context; 3029a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams 3129a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams @Before 3229a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams public void setUp() { 335afb76fee52a40e7b7738d755045d519ab623a78Jonathan Gerrish context = RuntimeEnvironment.application; 3429a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams 35084d588b645d53c1110ff24b82433b5a331cc6d3James Lemieux sharedPreferences = context.getSharedPreferences(FILENAME, Context.MODE_PRIVATE); 3679eb969db1908f751e56aa407399556b76719257Jonathan Gerrish // Ensure no shared preferences have leaked from previous tests. 3779eb969db1908f751e56aa407399556b76719257Jonathan Gerrish assertThat(sharedPreferences.getAll()).hasSize(0); 3879eb969db1908f751e56aa407399556b76719257Jonathan Gerrish 39cb9b3e632b9bbef591ac1069c18aa8a932e8b825Jonathan Gerrish editor = sharedPreferences.edit(); 4029a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams editor.putBoolean("boolean", true); 4129a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams editor.putFloat("float", 1.1f); 4229a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams editor.putInt("int", 2); 43879371277af60d57148eefb24fd046a6a30e4683christianw editor.putLong("long", 3L); 4429a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams editor.putString("string", "foobar"); 455afb76fee52a40e7b7738d755045d519ab623a78Jonathan Gerrish 465afb76fee52a40e7b7738d755045d519ab623a78Jonathan Gerrish stringSet.add( "string1" ); 475afb76fee52a40e7b7738d755045d519ab623a78Jonathan Gerrish stringSet.add( "string2" ); 485afb76fee52a40e7b7738d755045d519ab623a78Jonathan Gerrish stringSet.add( "string3" ); 497ac33f6af5b82b0df8e3ebcca90459990f343920Chris Amavisca and Mladen Bajic editor.putStringSet("stringSet", stringSet); 5029a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams } 5129a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams 5229a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams @Test 5329a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams public void commit_shouldStoreValues() throws Exception { 5429a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams editor.commit(); 5529a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams 56084d588b645d53c1110ff24b82433b5a331cc6d3James Lemieux SharedPreferences anotherSharedPreferences = context.getSharedPreferences(FILENAME, Context.MODE_PRIVATE); 5729a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams assertTrue(anotherSharedPreferences.getBoolean("boolean", false)); 5829a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams assertThat(anotherSharedPreferences.getFloat("float", 666f)).isEqualTo(1.1f); 5929a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams assertThat(anotherSharedPreferences.getInt("int", 666)).isEqualTo(2); 60879371277af60d57148eefb24fd046a6a30e4683christianw assertThat(anotherSharedPreferences.getLong("long", 666L)).isEqualTo(3L); 6129a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams assertThat(anotherSharedPreferences.getString("string", "wacka wa")).isEqualTo("foobar"); 6229a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams assertThat(anotherSharedPreferences.getStringSet("stringSet", null)).isEqualTo(stringSet); 6329a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams } 6429a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams 6529a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams @Test 6662a74f3a9132f400f5c5bcef01f214da658199a2Christopher Amavisca and Ryan Spore public void commit_shouldClearEditsThatNeedRemoveAndEditsThatNeedCommit() throws Exception { 6762a74f3a9132f400f5c5bcef01f214da658199a2Christopher Amavisca and Ryan Spore editor.commit(); 6862a74f3a9132f400f5c5bcef01f214da658199a2Christopher Amavisca and Ryan Spore editor.remove("string").commit(); 6962a74f3a9132f400f5c5bcef01f214da658199a2Christopher Amavisca and Ryan Spore 7062a74f3a9132f400f5c5bcef01f214da658199a2Christopher Amavisca and Ryan Spore assertThat(sharedPreferences.getString("string", "no value for key")).isEqualTo("no value for key"); 7162a74f3a9132f400f5c5bcef01f214da658199a2Christopher Amavisca and Ryan Spore 72084d588b645d53c1110ff24b82433b5a331cc6d3James Lemieux SharedPreferences anotherSharedPreferences = context.getSharedPreferences(FILENAME, Context.MODE_PRIVATE); 7362a74f3a9132f400f5c5bcef01f214da658199a2Christopher Amavisca and Ryan Spore anotherSharedPreferences.edit().putString("string", "value for key").commit(); 7462a74f3a9132f400f5c5bcef01f214da658199a2Christopher Amavisca and Ryan Spore 7562a74f3a9132f400f5c5bcef01f214da658199a2Christopher Amavisca and Ryan Spore editor.commit(); 7662a74f3a9132f400f5c5bcef01f214da658199a2Christopher Amavisca and Ryan Spore assertThat(sharedPreferences.getString("string", "no value for key")).isEqualTo("value for key"); 7762a74f3a9132f400f5c5bcef01f214da658199a2Christopher Amavisca and Ryan Spore } 7862a74f3a9132f400f5c5bcef01f214da658199a2Christopher Amavisca and Ryan Spore 7962a74f3a9132f400f5c5bcef01f214da658199a2Christopher Amavisca and Ryan Spore @Test 8029a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams public void getAll_shouldReturnAllValues() throws Exception { 8129a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams editor.commit(); 8279eb969db1908f751e56aa407399556b76719257Jonathan Gerrish assertThat(sharedPreferences.getAll()).hasSize(6); 8379eb969db1908f751e56aa407399556b76719257Jonathan Gerrish assertThat(sharedPreferences.getAll().get("int")).isEqualTo(2); 8429a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams } 8529a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams 8629a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams @Test 8729a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams public void commit_shouldRemoveValuesThenSetValues() throws Exception { 885afb76fee52a40e7b7738d755045d519ab623a78Jonathan Gerrish editor.putString("deleteMe", "foo").commit(); 8929a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams 90f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams editor.remove("deleteMe"); 9129a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams 92f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams editor.putString("dontDeleteMe", "baz"); 9329a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams editor.remove("dontDeleteMe"); 9429a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams 9529a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams editor.commit(); 9629a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams 97084d588b645d53c1110ff24b82433b5a331cc6d3James Lemieux SharedPreferences anotherSharedPreferences = context.getSharedPreferences(FILENAME, Context.MODE_PRIVATE); 985afb76fee52a40e7b7738d755045d519ab623a78Jonathan Gerrish assertThat(anotherSharedPreferences.getBoolean("boolean", false)).isTrue(); 9929a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams assertThat(anotherSharedPreferences.getFloat("float", 666f)).isEqualTo(1.1f); 10029a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams assertThat(anotherSharedPreferences.getInt("int", 666)).isEqualTo(2); 101879371277af60d57148eefb24fd046a6a30e4683christianw assertThat(anotherSharedPreferences.getLong("long", 666L)).isEqualTo(3L); 10229a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams assertThat(anotherSharedPreferences.getString("string", "wacka wa")).isEqualTo("foobar"); 10329a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams 10429a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams assertThat(anotherSharedPreferences.getString("deleteMe", "awol")).isEqualTo("awol"); 1055afb76fee52a40e7b7738d755045d519ab623a78Jonathan Gerrish assertThat(anotherSharedPreferences.getString("dontDeleteMe", "oops")).isEqualTo("oops"); 10629a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams } 10729a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams 10829a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams @Test 10929a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams public void commit_shouldClearThenSetValues() throws Exception { 1105afb76fee52a40e7b7738d755045d519ab623a78Jonathan Gerrish editor.putString("deleteMe", "foo"); 11129a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams 112f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams editor.clear(); 113f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams editor.putString("dontDeleteMe", "baz"); 11429a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams 11529a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams editor.commit(); 11629a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams 117084d588b645d53c1110ff24b82433b5a331cc6d3James Lemieux SharedPreferences anotherSharedPreferences = context.getSharedPreferences(FILENAME, Context.MODE_PRIVATE); 11829a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams assertTrue(anotherSharedPreferences.getBoolean("boolean", false)); 11929a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams assertThat(anotherSharedPreferences.getFloat("float", 666f)).isEqualTo(1.1f); 12029a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams assertThat(anotherSharedPreferences.getInt("int", 666)).isEqualTo(2); 121879371277af60d57148eefb24fd046a6a30e4683christianw assertThat(anotherSharedPreferences.getLong("long", 666L)).isEqualTo(3L); 12229a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams assertThat(anotherSharedPreferences.getString("string", "wacka wa")).isEqualTo("foobar"); 12329a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams 1245afb76fee52a40e7b7738d755045d519ab623a78Jonathan Gerrish // Android always calls clear before put on any open editor, so here "foo" is preserved rather than cleared. 1255afb76fee52a40e7b7738d755045d519ab623a78Jonathan Gerrish assertThat(anotherSharedPreferences.getString("deleteMe", "awol")).isEqualTo("foo"); 12629a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams assertThat(anotherSharedPreferences.getString("dontDeleteMe", "oops")).isEqualTo("baz"); 12729a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams } 12829a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams 12929a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams @Test 1307ac33f6af5b82b0df8e3ebcca90459990f343920Chris Amavisca and Mladen Bajic public void putString_shouldRemovePairIfValueIsNull() throws Exception { 1315afb76fee52a40e7b7738d755045d519ab623a78Jonathan Gerrish editor.putString("deleteMe", "foo"); 1327ac33f6af5b82b0df8e3ebcca90459990f343920Chris Amavisca and Mladen Bajic 1337ac33f6af5b82b0df8e3ebcca90459990f343920Chris Amavisca and Mladen Bajic editor.putString("deleteMe", null); 1347ac33f6af5b82b0df8e3ebcca90459990f343920Chris Amavisca and Mladen Bajic editor.commit(); 1357ac33f6af5b82b0df8e3ebcca90459990f343920Chris Amavisca and Mladen Bajic 1367ac33f6af5b82b0df8e3ebcca90459990f343920Chris Amavisca and Mladen Bajic assertThat(sharedPreferences.getString("deleteMe", null)).isNull(); 1377ac33f6af5b82b0df8e3ebcca90459990f343920Chris Amavisca and Mladen Bajic } 1387ac33f6af5b82b0df8e3ebcca90459990f343920Chris Amavisca and Mladen Bajic 1397ac33f6af5b82b0df8e3ebcca90459990f343920Chris Amavisca and Mladen Bajic @Test 1407ac33f6af5b82b0df8e3ebcca90459990f343920Chris Amavisca and Mladen Bajic public void putStringSet_shouldRemovePairIfValueIsNull() throws Exception { 1415afb76fee52a40e7b7738d755045d519ab623a78Jonathan Gerrish editor.putStringSet("deleteMe", new HashSet<String>()); 1427ac33f6af5b82b0df8e3ebcca90459990f343920Chris Amavisca and Mladen Bajic 1437ac33f6af5b82b0df8e3ebcca90459990f343920Chris Amavisca and Mladen Bajic editor.putStringSet("deleteMe", null); 1447ac33f6af5b82b0df8e3ebcca90459990f343920Chris Amavisca and Mladen Bajic editor.commit(); 1457ac33f6af5b82b0df8e3ebcca90459990f343920Chris Amavisca and Mladen Bajic 1467ac33f6af5b82b0df8e3ebcca90459990f343920Chris Amavisca and Mladen Bajic assertThat(sharedPreferences.getStringSet("deleteMe", null)).isNull(); 1477ac33f6af5b82b0df8e3ebcca90459990f343920Chris Amavisca and Mladen Bajic } 1487ac33f6af5b82b0df8e3ebcca90459990f343920Chris Amavisca and Mladen Bajic 1497ac33f6af5b82b0df8e3ebcca90459990f343920Chris Amavisca and Mladen Bajic @Test 15029a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams public void apply_shouldStoreValues() throws Exception { 15129a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams editor.apply(); 15229a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams 153084d588b645d53c1110ff24b82433b5a331cc6d3James Lemieux SharedPreferences anotherSharedPreferences = context.getSharedPreferences(FILENAME, Context.MODE_PRIVATE); 15429a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams assertThat(anotherSharedPreferences.getString("string", "wacka wa")).isEqualTo("foobar"); 15529a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams } 15629a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams 15729a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams @Test 15829a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams public void shouldReturnDefaultValues() throws Exception { 159084d588b645d53c1110ff24b82433b5a331cc6d3James Lemieux SharedPreferences anotherSharedPreferences = context.getSharedPreferences("bazBang", Context.MODE_PRIVATE); 16029a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams 16129a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams assertFalse(anotherSharedPreferences.getBoolean("boolean", false)); 16229a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams assertThat(anotherSharedPreferences.getFloat("float", 666f)).isEqualTo(666f); 16329a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams assertThat(anotherSharedPreferences.getInt("int", 666)).isEqualTo(666); 164879371277af60d57148eefb24fd046a6a30e4683christianw assertThat(anotherSharedPreferences.getLong("long", 666L)).isEqualTo(666L); 16529a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams assertThat(anotherSharedPreferences.getString("string", "wacka wa")).isEqualTo("wacka wa"); 16629a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams } 16729a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams 16829a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams @Test 16929a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams public void shouldRemoveRegisteredListenersOnUnresgister() { 170084d588b645d53c1110ff24b82433b5a331cc6d3James Lemieux SharedPreferences anotherSharedPreferences = context.getSharedPreferences("bazBang", Context.MODE_PRIVATE); 1715afb76fee52a40e7b7738d755045d519ab623a78Jonathan Gerrish 1725afb76fee52a40e7b7738d755045d519ab623a78Jonathan Gerrish SharedPreferences.OnSharedPreferenceChangeListener mockListener = mock(SharedPreferences.OnSharedPreferenceChangeListener.class); 1735afb76fee52a40e7b7738d755045d519ab623a78Jonathan Gerrish anotherSharedPreferences.registerOnSharedPreferenceChangeListener(mockListener); 17429a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams 1755afb76fee52a40e7b7738d755045d519ab623a78Jonathan Gerrish anotherSharedPreferences.unregisterOnSharedPreferenceChangeListener(mockListener); 1765afb76fee52a40e7b7738d755045d519ab623a78Jonathan Gerrish 1775afb76fee52a40e7b7738d755045d519ab623a78Jonathan Gerrish anotherSharedPreferences.edit().putString("key", "value"); 1785afb76fee52a40e7b7738d755045d519ab623a78Jonathan Gerrish verifyZeroInteractions(mockListener); 17929a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams } 18029a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams 18152d7ee7fbe259ac0d20d853302fcd0b5e34b9b26David Kirchner @Test 18252d7ee7fbe259ac0d20d853302fcd0b5e34b9b26David Kirchner public void shouldTriggerRegisteredListeners() { 183084d588b645d53c1110ff24b82433b5a331cc6d3James Lemieux SharedPreferences anotherSharedPreferences = context.getSharedPreferences("bazBang", Context.MODE_PRIVATE); 18452d7ee7fbe259ac0d20d853302fcd0b5e34b9b26David Kirchner 18552d7ee7fbe259ac0d20d853302fcd0b5e34b9b26David Kirchner final String testKey = "foo"; 18652d7ee7fbe259ac0d20d853302fcd0b5e34b9b26David Kirchner 18738b2f8843fcf4c1144df788aa26375c1195b3e6cChristian Williams final List<String> transcript = new ArrayList<>(); 18852d7ee7fbe259ac0d20d853302fcd0b5e34b9b26David Kirchner 18952d7ee7fbe259ac0d20d853302fcd0b5e34b9b26David Kirchner SharedPreferences.OnSharedPreferenceChangeListener listener = new SharedPreferences.OnSharedPreferenceChangeListener() { 19052d7ee7fbe259ac0d20d853302fcd0b5e34b9b26David Kirchner @Override 19152d7ee7fbe259ac0d20d853302fcd0b5e34b9b26David Kirchner public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { 19252d7ee7fbe259ac0d20d853302fcd0b5e34b9b26David Kirchner transcript.add(key + " called"); 19352d7ee7fbe259ac0d20d853302fcd0b5e34b9b26David Kirchner } 19452d7ee7fbe259ac0d20d853302fcd0b5e34b9b26David Kirchner }; 19552d7ee7fbe259ac0d20d853302fcd0b5e34b9b26David Kirchner anotherSharedPreferences.registerOnSharedPreferenceChangeListener(listener); 19652d7ee7fbe259ac0d20d853302fcd0b5e34b9b26David Kirchner anotherSharedPreferences.edit().putString(testKey, "bar").commit(); 19752d7ee7fbe259ac0d20d853302fcd0b5e34b9b26David Kirchner 19838b2f8843fcf4c1144df788aa26375c1195b3e6cChristian Williams assertThat(transcript).containsExactly(testKey+ " called"); 19952d7ee7fbe259ac0d20d853302fcd0b5e34b9b26David Kirchner } 200d0cb59970def5b7bbad64be64abec240522ae885Aaron Day} 201