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