package org.limewire.setting; import java.io.File; import junit.framework.Test; import org.limewire.setting.evt.SettingEvent; import org.limewire.setting.evt.SettingListener; import org.limewire.setting.evt.SettingEvent.EventType; import org.limewire.util.BaseTestCase; public class SettingListenerTest extends BaseTestCase { public SettingListenerTest(String testName) { super(testName); } public static Test suite() { return buildTestSuite(SettingListenerTest.class); } public static void main(java.lang.String[] args) { junit.textui.TestRunner.run(suite()); } public void testValueChanged() throws Exception { final Object lock = new Object(); final EventType[] type = new EventType[1]; TestSettings.TEST.addSettingListener(new SettingListener() { public void settingChanged(SettingEvent evt) { synchronized (lock) { type[0] = evt.getEventType(); lock.notifyAll(); } } }); synchronized (lock) { TestSettings.TEST.setValue(1); lock.wait(100L); } assertEquals(EventType.VALUE_CHANGED, type[0]); // Changing the value to the current value shouldn't // trigger an Event! type[0] = null; synchronized (lock) { TestSettings.TEST.setValue(1); lock.wait(100L); } assertNull(type[0]); } public void testReload() throws Exception { final Object lock = new Object(); final EventType[] type = new EventType[1]; TestSettings.TEST.addSettingListener(new SettingListener() { public void settingChanged(SettingEvent evt) { synchronized (lock) { type[0] = evt.getEventType(); lock.notifyAll(); } } }); synchronized (lock) { TestSettings.TEST.reload(); lock.wait(100L); } assertEquals(EventType.RELOAD, type[0]); } public void testRevertToDefault() throws Exception { final Object lock = new Object(); final EventType[] type = new EventType[1]; TestSettings.TEST.setValue(123); TestSettings.TEST.addSettingListener(new SettingListener() { public void settingChanged(SettingEvent evt) { synchronized (lock) { if (evt.getEventType() == EventType.REVERT_TO_DEFAULT) { type[0] = evt.getEventType(); lock.notifyAll(); } } } }); synchronized (lock) { TestSettings.TEST.revertToDefault(); lock.wait(100L); } assertEquals(EventType.REVERT_TO_DEFAULT, type[0]); } public void testPrivacyChanged() throws Exception { final Object lock = new Object(); final EventType[] type = new EventType[1]; TestSettings.TEST.addSettingListener(new SettingListener() { public void settingChanged(SettingEvent evt) { synchronized (lock) { type[0] = evt.getEventType(); lock.notifyAll(); } } }); synchronized (lock) { TestSettings.TEST.setPrivate(!TestSettings.TEST.isPrivate()); lock.wait(100L); } assertEquals(EventType.PRIVACY_CHANGED, type[0]); type[0] = null; synchronized (lock) { TestSettings.TEST.setPrivate(TestSettings.TEST.isPrivate()); lock.wait(100L); } assertNull(type[0]); } public void testAlwaysSaveChanged() throws Exception { final Object lock = new Object(); final EventType[] type = new EventType[1]; TestSettings.TEST.addSettingListener(new SettingListener() { public void settingChanged(SettingEvent evt) { synchronized (lock) { type[0] = evt.getEventType(); lock.notifyAll(); } } }); synchronized (lock) { TestSettings.TEST.setAlwaysSave(!TestSettings.TEST.shouldAlwaysSave()); lock.wait(100L); } assertEquals(EventType.ALWAYS_SAVE_CHANGED, type[0]); type[0] = null; synchronized (lock) { TestSettings.TEST.setAlwaysSave(TestSettings.TEST.shouldAlwaysSave()); lock.wait(100L); } assertNull(type[0]); } private static class TestSettings extends BasicSettingsGroup { private static final TestSettings INSTANCE = new TestSettings(); public static final SettingsFactory FACTORY = INSTANCE.getFactory(); public TestSettings() { super(new File("test.props"), "Test Settings"); } public static final IntSetting TEST = FACTORY.createIntSetting("TEST", 0); } }