180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson/* Licensed to the Apache Software Foundation (ASF) under one or more 280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson * contributor license agreements. See the NOTICE file distributed with 380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson * this work for additional information regarding copyright ownership. 480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson * The ASF licenses this file to You under the Apache License, Version 2.0 580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson * (the "License"); you may not use this file except in compliance with 680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson * the License. You may obtain a copy of the License at 780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson * 880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson * http://www.apache.org/licenses/LICENSE-2.0 980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson * 1080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson * Unless required by applicable law or agreed to in writing, software 1180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson * distributed under the License is distributed on an "AS IS" BASIS, 1280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson * See the License for the specific language governing permissions and 1480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson * limitations under the License. 1580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson */ 1680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson 1780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilsonpackage libcore.java.util.prefs; 1880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson 1980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilsonimport java.util.prefs.AbstractPreferences; 2080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilsonimport java.util.prefs.PreferenceChangeEvent; 2180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilsonimport java.util.prefs.PreferenceChangeListener; 2280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilsonimport java.util.prefs.Preferences; 2380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilsonimport junit.framework.TestCase; 2480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson 2580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilsonpublic final class OldPreferenceChangeEventTest extends TestCase { 2680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson 2780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson public void testGetKey() { 2880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson AbstractPreferences parent = (AbstractPreferences) Preferences 2980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson .userNodeForPackage(Preferences.class); 3080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson 3180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson AbstractPreferences pref = (AbstractPreferences) parent.node("mock"); 3280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson 3380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson MockPreferenceChangeListener pl = new MockPreferenceChangeListener() { 3480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson public void preferenceChange(PreferenceChangeEvent pce) { 3580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson if (pce != null && pce.getKey().equals("key_int")) { 3680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson result = true; 3780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson } 3880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson super.preferenceChange(pce); 3980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson } 4080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson }; 4180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson pref.addPreferenceChangeListener(pl); 4280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson try { 4380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson pref.putInt("key_int", Integer.MAX_VALUE); 4480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson assertEquals(1, pl.getChanged()); 4580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson assertTrue(pl.getResult()); 4680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson pl.reset(); 4780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson } finally { 4880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson pref.removePreferenceChangeListener(pl); 4980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson } 5080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson } 5180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson 5280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson public void testGetNewValue() { 5380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson AbstractPreferences parent = (AbstractPreferences) Preferences 5480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson .userNodeForPackage(Preferences.class); 5580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson 5680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson AbstractPreferences pref = (AbstractPreferences) parent.node("mock"); 5780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson 5880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson MockPreferenceChangeListener pl = new MockPreferenceChangeListener() { 5980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson public void preferenceChange(PreferenceChangeEvent pce) { 6080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson if (pce != null && pce.getNewValue().equals(Integer.toString(Integer.MAX_VALUE))) { 6180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson result = true; 6280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson } 6380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson super.preferenceChange(pce); 6480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson } 6580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson }; 6680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson pref.addPreferenceChangeListener(pl); 6780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson try { 6880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson pref.putInt("key_int", Integer.MAX_VALUE); 6980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson assertEquals(1, pl.getChanged()); 7080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson assertTrue(pl.getResult()); 7180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson pl.reset(); 7280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson 7380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson pref.putInt("key_int", Integer.MAX_VALUE); 7480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson assertEquals(1, pl.getChanged()); 7580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson assertTrue(pl.getResult()); 7680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson pl.reset(); 7780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson } finally { 7880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson pref.removePreferenceChangeListener(pl); 7980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson } 8080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson } 8180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson 8280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson public void testGetNode() { 8380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson AbstractPreferences parent = (AbstractPreferences) Preferences 8480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson .userNodeForPackage(Preferences.class); 8580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson 8680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson AbstractPreferences pref = (AbstractPreferences) parent.node("mock"); 8780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson 8880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson MockPreferenceChangeListener pl = new MockPreferenceChangeListener() { 8980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson public void preferenceChange(PreferenceChangeEvent pce) { 9080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson if (pce != null && "mock".equals(pce.getNode().name())) { 9180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson result = true; 9280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson } 9380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson super.preferenceChange(pce); 9480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson } 9580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson }; 9680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson pref.addPreferenceChangeListener(pl); 9780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson try { 9880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson pref.putInt("key_int", Integer.MAX_VALUE); 9980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson assertEquals(1, pl.getChanged()); 10080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson assertTrue(pl.getResult()); 10180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson pl.reset(); 10280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson } finally { 10380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson pref.removePreferenceChangeListener(pl); 10480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson } 10580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson } 10680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson 10780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson private static class MockPreferenceChangeListener implements PreferenceChangeListener { 10880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson private int changed = 0; 10980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson private boolean addDispatched = false; 11080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson protected boolean result = false; 11180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson 11280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson public synchronized void waitForEvent() { 11380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson try { 11480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson wait(500); 11538db242d16a5a31fd86c519b817ae94c5fc89417Elliott Hughes } catch (InterruptedException expected) { 11680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson } 11780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson } 11880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson 11980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson public synchronized void preferenceChange(PreferenceChangeEvent pce) { 12080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson changed++; 12180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson addDispatched = true; 12280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson notifyAll(); 12380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson } 12480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson 12580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson public synchronized boolean getResult() { 12680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson if (!addDispatched) { 12780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson try { 12880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson // TODO: don't know why must add limitation 12980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson this.wait(100); 13080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson } catch (InterruptedException e) { 13180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson e.printStackTrace(); 13280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson } 13380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson } 13480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson addDispatched = false; 13580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson return result; 13680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson } 13780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson 13880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson public synchronized int getChanged() { 13980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson if (!addDispatched) { 14080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson try { 14180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson // TODO: don't know why must add limitation 14280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson this.wait(1000); 14380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson } catch (InterruptedException e) { 14480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson e.printStackTrace(); 14580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson } 14680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson } 14780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson addDispatched = false; 14880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson return changed; 14980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson } 15080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson 15180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson public void reset() { 15280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson changed = 0; 15380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson result = false; 15480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson } 15580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson } 15680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson} 157