blob: 62efc825156fe1f6f28d753c582829768e6d1283 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2005 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.ui.editors.tests;
import java.util.ArrayList;
import java.util.List;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferenceStore;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.ui.texteditor.ChainedPreferenceStore;
public class ChainedPreferenceStoreTest extends TestCase {
private class PropertyChangeListener implements IPropertyChangeListener {
public void propertyChange(PropertyChangeEvent event) {
fEvents.add(event);
}
}
private List fEvents= new ArrayList();
private PropertyChangeListener fPropertyChangeListener= new PropertyChangeListener();
private static final String PROPERTY= "some.property";
private static final String VALUE= "8";
private static final String DEFAULT_VALUE= "4";
private static final String DEFAULT_DEFAULT_VALUE= "";
public static Test suite() {
return new TestSuite(ChainedPreferenceStoreTest.class);
}
/**
* [implementation] ChainedPreferenceStore
* https://bugs.eclipse.org/bugs/show_bug.cgi?id=69419
*/
public void testChainedStore0() {
IPreferenceStore store1= new PreferenceStore();
IPreferenceStore store2= new PreferenceStore();
IPreferenceStore chainedStore= new ChainedPreferenceStore(new IPreferenceStore[] { store1, store2 });
store2.setDefault(PROPERTY, DEFAULT_VALUE);
chainedStore.addPropertyChangeListener(fPropertyChangeListener);
store1.firePropertyChangeEvent(PROPERTY, VALUE, DEFAULT_DEFAULT_VALUE); // simulated removal with newValue != null
chainedStore.removePropertyChangeListener(fPropertyChangeListener);
assertEquals(1, fEvents.size());
PropertyChangeEvent event= (PropertyChangeEvent) fEvents.get(0);
assertEquals(chainedStore, event.getSource());
assertEquals(PROPERTY, event.getProperty());
assertEquals(VALUE, event.getOldValue());
assertEquals(DEFAULT_VALUE, event.getNewValue());
}
/**
* Assertion failed in ChainedPreferenceStore.handlePropertyChangeEvent(..)
* https://bugs.eclipse.org/bugs/show_bug.cgi?id=52827
*/
public void testChainedStore1() {
IPreferenceStore store1= new PreferenceStore();
IPreferenceStore store2= new PreferenceStore();
IPreferenceStore chainedStore= new ChainedPreferenceStore(new IPreferenceStore[] { store1, store2 });
chainedStore.addPropertyChangeListener(fPropertyChangeListener);
store1.firePropertyChangeEvent(PROPERTY, VALUE, DEFAULT_DEFAULT_VALUE); // simulated removal with newValue != null
chainedStore.removePropertyChangeListener(fPropertyChangeListener);
assertEquals(1, fEvents.size());
PropertyChangeEvent event= (PropertyChangeEvent) fEvents.get(0);
assertEquals(store1, event.getSource());
assertEquals(PROPERTY, event.getProperty());
assertEquals(VALUE, event.getOldValue());
assertEquals(DEFAULT_DEFAULT_VALUE, event.getNewValue());
}
/**
* Third case where the initial implementation used to have an assertion which would fail in this case
*/
public void testChainedStore2() {
IPreferenceStore store1= new PreferenceStore();
IPreferenceStore store2= new PreferenceStore();
IPreferenceStore chainedStore= new ChainedPreferenceStore(new IPreferenceStore[] { store1, store2 });
store1.setValue(PROPERTY, VALUE);
chainedStore.addPropertyChangeListener(fPropertyChangeListener);
store1.firePropertyChangeEvent(PROPERTY, DEFAULT_VALUE, null); // simulated change with newValue == null
chainedStore.removePropertyChangeListener(fPropertyChangeListener);
assertEquals(1, fEvents.size());
PropertyChangeEvent event= (PropertyChangeEvent) fEvents.get(0);
assertEquals(store1, event.getSource());
assertEquals(PROPERTY, event.getProperty());
assertEquals(DEFAULT_VALUE, event.getOldValue());
assertEquals(null, event.getNewValue());
}
/**
* Case where the initial implementation used to throw an IAE
*/
public void testChainedStore3() {
IPreferenceStore store1= new PreferenceStore();
IPreferenceStore store2= new PreferenceStore();
IPreferenceStore chainedStore= new ChainedPreferenceStore(new IPreferenceStore[] { store1, store2 });
store2.setDefault(PROPERTY, DEFAULT_VALUE);
chainedStore.addPropertyChangeListener(fPropertyChangeListener);
store1.firePropertyChangeEvent(PROPERTY, null, null); // simulated removal with oldValue == null
chainedStore.removePropertyChangeListener(fPropertyChangeListener);
assertEquals(1, fEvents.size());
PropertyChangeEvent event= (PropertyChangeEvent) fEvents.get(0);
assertEquals(chainedStore, event.getSource());
assertEquals(PROPERTY, event.getProperty());
assertEquals(null, event.getOldValue());
assertEquals(DEFAULT_VALUE, event.getNewValue());
}
// /**
// * Case where the old value cannot be determined. (Not handled by the current implementation.)
// */
// public void testChainedStore4() {
// IPreferenceStore store1= EditorsUI.getPreferenceStore();
// IPreferenceStore store2= new PreferenceStore();
// IPreferenceStore chainedStore= new ChainedPreferenceStore(new IPreferenceStore[] { store1, store2 });
// store2.setDefault(PROPERTY, DEFAULT_VALUE);
//
// chainedStore.addPropertyChangeListener(fPropertyChangeListener);
// store1.setValue(PROPERTY, VALUE);
// chainedStore.removePropertyChangeListener(fPropertyChangeListener);
//
// assertEquals(1, fEvents.size());
// PropertyChangeEvent event= (PropertyChangeEvent) fEvents.get(0);
// assertEquals(PROPERTY, event.getProperty());
// assertNull(event.getOldValue());
// assertEquals(VALUE, event.getNewValue());
// }
}