org.eclipse.ui.editors.tests.ChainedPreferenceStoreTest.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.ui.editors.tests.ChainedPreferenceStoreTest.java

Source

/*******************************************************************************
 * Copyright (c) 2000, 2008 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());
    //   }
}