diff options
11 files changed, 210 insertions, 136 deletions
diff --git a/bundles/org.eclipse.core.databinding/src/org/eclipse/core/databinding/DataBindingContext.java b/bundles/org.eclipse.core.databinding/src/org/eclipse/core/databinding/DataBindingContext.java index 2f1684a2..6d3b8a05 100644 --- a/bundles/org.eclipse.core.databinding/src/org/eclipse/core/databinding/DataBindingContext.java +++ b/bundles/org.eclipse.core.databinding/src/org/eclipse/core/databinding/DataBindingContext.java @@ -162,9 +162,20 @@ public class DataBindingContext { if (bindSpec == null) { bindSpec = new DefaultBindSpec(); } - Binding result = new ValueBinding(targetObservableValue, + ValueBinding result = new ValueBinding(targetObservableValue, modelObservableValue, bindSpec); result.init(this); + + Integer position = result.getTargetChangeModelPipelinePosition(); + if (position != null) { + if (position.intValue() == BindingEvent.PIPELINE_AFTER_CHANGE) { + //we don't want to update the model + position = new Integer(BindingEvent.PIPELINE_BEFORE_CHANGE); + } + + result.updateModelFromTarget(position.intValue()); + } + return result; } @@ -221,9 +232,20 @@ public class DataBindingContext { if (bindSpec == null) { bindSpec = new DefaultBindSpec(); } - Binding result = new ListBinding(targetObservableList, + ListBinding result = new ListBinding(targetObservableList, modelObservableList, bindSpec); result.init(this); + + Integer position = result.getTargetChangeModelPipelinePosition(); + if (position != null) { + if (position.intValue() == BindingEvent.PIPELINE_AFTER_CHANGE) { + //we don't want to copy the value to the model + position = new Integer(BindingEvent.PIPELINE_BEFORE_CHANGE); + } + + result.updateModelFromTarget(position.intValue()); + } + return result; } diff --git a/bundles/org.eclipse.core.databinding/src/org/eclipse/core/internal/databinding/ListBinding.java b/bundles/org.eclipse.core.databinding/src/org/eclipse/core/internal/databinding/ListBinding.java index e80bcc04..d2e394c4 100644 --- a/bundles/org.eclipse.core.databinding/src/org/eclipse/core/internal/databinding/ListBinding.java +++ b/bundles/org.eclipse.core.databinding/src/org/eclipse/core/internal/databinding/ListBinding.java @@ -75,7 +75,7 @@ public class ListBinding extends Binding { fillBindSpecDefaults(bindSpec, targetList, modelList); if (bindSpec.isUpdateModel()) { - int stopPosition = getValidationPolicy(bindSpec + int stopPosition = calculateValidationPolicy(bindSpec .getModelUpdatePolicy(), bindSpec.getTargetValidatePolicy()); targetList .addListChangeListener(targetChangeListener = new ChangeListener( @@ -85,9 +85,11 @@ public class ListBinding extends Binding { } if (bindSpec.isUpdateTarget()) { - int stopPosition = getValidationPolicy( - bindSpec.getTargetUpdatePolicy(), bindSpec - .getModelValidatePolicy()); + int stopPosition = calculateValidationPolicy(bindSpec + .getTargetUpdatePolicy(), bindSpec.getModelValidatePolicy()); + + targetChangeModelPipelinePosition = new Integer(stopPosition); + modelList .addListChangeListener(modelChangeListener = new ChangeListener( BindingEvent.EVENT_COPY_TO_TARGET, stopPosition)); @@ -265,6 +267,11 @@ public class ListBinding extends Binding { private WritableValue validationErrorObservable; + /** + * Pipeline position that validation will run up to when the target changes. + */ + private Integer targetChangeModelPipelinePosition; + public void updateTargetFromModel() { updateTargetFromModel(BindingEvent.PIPELINE_AFTER_CHANGE); } @@ -330,7 +337,7 @@ public class ListBinding extends Binding { updateTargetFromModel(); } - private static int getValidationPolicy(Integer updatePolicy, + private static int calculateValidationPolicy(Integer updatePolicy, Integer validationPolicy) { int pipelineStop = BindingEvent.PIPELINE_AFTER_CHANGE; @@ -341,4 +348,11 @@ public class ListBinding extends Binding { return pipelineStop; } + + /** + * @return position that will be validated up to when the target changes, can be <code>null</code> + */ + public Integer getTargetChangeModelPipelinePosition() { + return targetChangeModelPipelinePosition; + } }
\ No newline at end of file diff --git a/bundles/org.eclipse.core.databinding/src/org/eclipse/core/internal/databinding/ValueBinding.java b/bundles/org.eclipse.core.databinding/src/org/eclipse/core/internal/databinding/ValueBinding.java index 1b7556ff..c4015b7c 100644 --- a/bundles/org.eclipse.core.databinding/src/org/eclipse/core/internal/databinding/ValueBinding.java +++ b/bundles/org.eclipse.core.databinding/src/org/eclipse/core/internal/databinding/ValueBinding.java @@ -66,6 +66,11 @@ public class ValueBinding extends Binding { new Integer(BindingEvent.PIPELINE_BEFORE_CHANGE) }; /** + * Pipeline position that validation will run up to when the target changes. + */ + private Integer targetChangeModelPipelinePosition; + + /** * @param target * @param model * @param bindSpec @@ -94,7 +99,7 @@ public class ValueBinding extends Binding { "Missing model to target converter from " + model.getValueType() + " to " + target.getValueType()); //$NON-NLS-1$ //$NON-NLS-2$ } - int pipelineStop = getValidationPolicy(bindSpec + int pipelineStop = calculateValidationPolicy(bindSpec .getTargetUpdatePolicy(), bindSpec.getModelValidatePolicy()); model @@ -108,13 +113,15 @@ public class ValueBinding extends Binding { "Missing target to model converter from " + target.getValueType() + " to " + model.getValueType()); //$NON-NLS-1$ //$NON-NLS-2$ } - int pipelineStop = getValidationPolicy(bindSpec + int pipelineStop = calculateValidationPolicy(bindSpec .getModelUpdatePolicy(), bindSpec.getTargetValidatePolicy()); target .addValueChangeListener(targetChangeListener = new TargetChangeListener( pipelineStop)); + targetChangeModelPipelinePosition = new Integer(pipelineStop); + if (target instanceof IVetoableValue) { ((IVetoableValue) target) .addValueChangingListener(targetChangingListener); @@ -422,7 +429,7 @@ public class ValueBinding extends Binding { } } - private static int getValidationPolicy(Integer updatePolicy, + private static int calculateValidationPolicy(Integer updatePolicy, Integer validationPolicy) { int pipelineStop = BindingEvent.PIPELINE_AFTER_CHANGE; @@ -433,4 +440,11 @@ public class ValueBinding extends Binding { return pipelineStop; } + + /** + * @return position that will be validated up to when the target changes, can be <code>null</code> + */ + public Integer getTargetChangeModelPipelinePosition() { + return targetChangeModelPipelinePosition; + } } diff --git a/examples/org.eclipse.jface.examples.databinding/src/org/eclipse/jface/examples/databinding/snippets/Snippet004DataBindingContextErrorLabel.java b/examples/org.eclipse.jface.examples.databinding/src/org/eclipse/jface/examples/databinding/snippets/Snippet004DataBindingContextErrorLabel.java index 2ec268fd..c676ebbc 100644 --- a/examples/org.eclipse.jface.examples.databinding/src/org/eclipse/jface/examples/databinding/snippets/Snippet004DataBindingContextErrorLabel.java +++ b/examples/org.eclipse.jface.examples.databinding/src/org/eclipse/jface/examples/databinding/snippets/Snippet004DataBindingContextErrorLabel.java @@ -62,8 +62,6 @@ public class Snippet004DataBindingContextErrorLabel { dbc.bindValue(SWTObservables.observeText(text, SWT.Modify), value, new DefaultBindSpec().addTargetValidator( BindingEvent.PIPELINE_AFTER_CONVERT, - new FiveValidator()).addModelValidator( - BindingEvent.PIPELINE_AFTER_CONVERT, new FiveValidator())); // Bind the error label to the validation error on the dbc. diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/DatabindingContextTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/DatabindingContextTest.java index b2b57bfb..cd695704 100644 --- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/DatabindingContextTest.java +++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/DatabindingContextTest.java @@ -21,25 +21,51 @@ import org.eclipse.core.databinding.Binding; import org.eclipse.core.databinding.BindingEvent; import org.eclipse.core.databinding.DataBindingContext; import org.eclipse.core.databinding.DefaultBindSpec; -import org.eclipse.core.databinding.observable.ChangeEvent; -import org.eclipse.core.databinding.observable.IChangeListener; +import org.eclipse.core.databinding.observable.Realm; import org.eclipse.core.databinding.observable.list.IObservableList; import org.eclipse.core.databinding.observable.list.WritableList; import org.eclipse.core.databinding.observable.map.IObservableMap; import org.eclipse.core.databinding.observable.value.IObservableValue; -import org.eclipse.core.databinding.observable.value.IValueChangeListener; -import org.eclipse.core.databinding.observable.value.ValueChangeEvent; import org.eclipse.core.databinding.observable.value.WritableValue; import org.eclipse.core.databinding.validation.IValidator; import org.eclipse.core.databinding.validation.ValidationStatus; import org.eclipse.core.internal.databinding.ListBinding; import org.eclipse.core.internal.databinding.ValueBinding; import org.eclipse.core.runtime.IStatus; +import org.eclipse.jface.tests.databinding.util.EventTrackers.ChangeEventTracker; +import org.eclipse.jface.tests.databinding.util.EventTrackers.ValueChangeEventTracker; public class DatabindingContextTest extends AbstractDefaultRealmTestCase { - public void testDisposeBindings() throws Exception { - DataBindingContext dbc = new DataBindingContext(); + private DataBindingContext dbc; + + /* + * (non-Javadoc) + * + * @see org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase#setUp() + */ + protected void setUp() throws Exception { + super.setUp(); + + dbc = new DataBindingContext(); + } + /* + * (non-Javadoc) + * + * @see org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase#tearDown() + */ + protected void tearDown() throws Exception { + if (dbc != null) { + Realm.getDefault().asyncExec(new Runnable() { + public void run() { + dbc.dispose(); + } + }); + } + super.tearDown(); + } + + public void testDisposeBindings() throws Exception { Binding binding = new BindingStub(); binding.init(dbc); @@ -50,7 +76,6 @@ public class DatabindingContextTest extends AbstractDefaultRealmTestCase { } public void testBindValue() throws Exception { - DataBindingContext dbc = new DataBindingContext(); IObservableValue target = WritableValue.withValueType(String.class); IObservableValue model = WritableValue.withValueType(String.class); @@ -60,7 +85,6 @@ public class DatabindingContextTest extends AbstractDefaultRealmTestCase { } public void testBindList() throws Exception { - DataBindingContext dbc = new DataBindingContext(); IObservableList target = WritableList.withElementType(Object.class); IObservableList model = WritableList.withElementType(Object.class); @@ -80,9 +104,8 @@ public class DatabindingContextTest extends AbstractDefaultRealmTestCase { WritableValue modelObservable = WritableValue.withValueType(String.class); final String errorMessage = "error"; - DataBindingContext dbc = new DataBindingContext(); - ValueChangeCounter errorCounter = new ValueChangeCounter(); - ChangeCounter errorsCounter = new ChangeCounter(); + ValueChangeEventTracker errorCounter = new ValueChangeEventTracker(); + ChangeEventTracker errorsCounter = new ChangeEventTracker(); IObservableValue error = new AggregateValidationStatus(dbc .getBindings(), AggregateValidationStatus.MAX_SEVERITY); @@ -124,7 +147,6 @@ public class DatabindingContextTest extends AbstractDefaultRealmTestCase { WritableValue targetValue = WritableValue.withValueType(String.class); WritableValue modelValue = WritableValue.withValueType(String.class); - DataBindingContext dbc = new DataBindingContext(); assertNotNull(dbc.getBindings()); assertEquals(0, dbc.getBindings().size()); @@ -147,7 +169,6 @@ public class DatabindingContextTest extends AbstractDefaultRealmTestCase { Object.class); WritableList modelList = new WritableList(new ArrayList(), Object.class); - DataBindingContext dbc = new DataBindingContext(); assertNotNull(dbc.getBindings()); assertEquals(0, dbc.getBindings().size()); @@ -159,7 +180,6 @@ public class DatabindingContextTest extends AbstractDefaultRealmTestCase { } public void testGetBindingsImmutability() throws Exception { - DataBindingContext dbc = new DataBindingContext(); BindingStub binding = new BindingStub(); binding.init(dbc); @@ -172,7 +192,6 @@ public class DatabindingContextTest extends AbstractDefaultRealmTestCase { public void testRemoveBinding() throws Exception { BindingStub binding = new BindingStub(); - DataBindingContext dbc = new DataBindingContext(); binding.init(dbc); assertTrue("context should contain the binding", dbc.getBindings() @@ -183,30 +202,51 @@ public class DatabindingContextTest extends AbstractDefaultRealmTestCase { } /** - * {@link IValueChangeListener} implementation that counts the times - * handleValueChange(...) is invoked. + * Asserts that when a ValueBinding is created validation is ran to ensure + * that the validation status of the Binding reflects the validity of the + * value in the target. * - * @since 3.2 + * @throws Exception */ - private static class ValueChangeCounter implements IValueChangeListener { - int count; - - public void handleValueChange(ValueChangeEvent event) { - count++; + public void testValidateTargetAfterValueBindingCreation() throws Exception { + WritableValue target = new WritableValue("", String.class); + WritableValue model = new WritableValue("2", String.class); + class Validator implements IValidator { + public IStatus validate(Object value) { + return ValidationStatus.error("error"); + } } + + ValueBinding binding = (ValueBinding) dbc.bindValue(target, model, + new DefaultBindSpec().addTargetValidator( + BindingEvent.PIPELINE_AFTER_CONVERT, new Validator())); + + assertEquals(IStatus.ERROR, ((IStatus) binding.getValidationStatus() + .getValue()).getSeverity()); } /** - * {@link IChangeListener} implementation that counts the times - * handleChange(...) is invoked. + * Asserts that when a ListBinding is created validation is ran to ensure + * that the validation status of the Binding reflects the validity of the + * value in the target. * + * @throws Exception */ - private static class ChangeCounter implements IChangeListener { - int count; - - public void handleChange(ChangeEvent event) { - count++; + public void testValidateTargetAfterListBindingCreation() throws Exception { + WritableList target = new WritableList(); + WritableList model = new WritableList(); + + class Validator implements IValidator { + public IStatus validate(Object value) { + return ValidationStatus.error("error"); + } } + + Binding binding = dbc.bindList(target, model, new DefaultBindSpec() + .addTargetValidator(BindingEvent.PIPELINE_AFTER_GET, + new Validator())); + + assertEquals(IStatus.ERROR, ((IStatus) binding.getValidationStatus().getValue()).getSeverity()); } private static class BindingStub extends Binding { diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/observable/value/WritableValueTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/observable/value/WritableValueTest.java index ea7e4fb7..bfc3528a 100644 --- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/observable/value/WritableValueTest.java +++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/observable/value/WritableValueTest.java @@ -13,11 +13,10 @@ package org.eclipse.jface.tests.databinding.observable.value; import org.eclipse.core.databinding.observable.Realm; -import org.eclipse.core.databinding.observable.value.IValueChangeListener; -import org.eclipse.core.databinding.observable.value.ValueChangeEvent; import org.eclipse.core.databinding.observable.value.WritableValue; import org.eclipse.jface.databinding.swt.SWTObservables; import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase; +import org.eclipse.jface.tests.databinding.util.EventTrackers.ValueChangeEventTracker; import org.eclipse.swt.widgets.Display; /** @@ -31,7 +30,7 @@ public class WritableValueTest extends AbstractDefaultRealmTestCase { */ public void testValueChangeOnlyFiresOnChange() throws Exception { WritableValue writableValue = new WritableValue(); - ValueChangeCounter counter = new ValueChangeCounter(); + ValueChangeEventTracker counter = new ValueChangeEventTracker(); writableValue.addValueChangeListener(counter); assertEquals(0, counter.count); @@ -79,12 +78,4 @@ public class WritableValueTest extends AbstractDefaultRealmTestCase { assertEquals(Realm.getDefault(), value.getRealm()); assertEquals(elementType, value.getValueType()); } - - private static class ValueChangeCounter implements IValueChangeListener { - int count; - - public void handleValueChange(ValueChangeEvent event) { - count++; - } - } } diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/util/EventTrackers.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/util/EventTrackers.java new file mode 100644 index 00000000..3624b5d3 --- /dev/null +++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/util/EventTrackers.java @@ -0,0 +1,45 @@ +/******************************************************************************* + * Copyright (c) 2007 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.jface.tests.databinding.util; + +import org.eclipse.core.databinding.observable.ChangeEvent; +import org.eclipse.core.databinding.observable.IChangeListener; +import org.eclipse.core.databinding.observable.value.IValueChangeListener; +import org.eclipse.core.databinding.observable.value.ValueChangeEvent; + +/** + * Implementations of change listeners that keep track of the number of times an + * event fires. + * + * @since 1.1 + */ +public class EventTrackers { + public static class ChangeEventTracker implements IChangeListener { + public int count; + public ChangeEvent event; + + public void handleChange(ChangeEvent event) { + count++; + this.event = event; + } + } + + public static class ValueChangeEventTracker implements IValueChangeListener { + public int count; + public ValueChangeEvent event; + + public void handleValueChange(ValueChangeEvent event) { + count++; + this.event = event; + } + } +} diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/internal/ValueBindingTest_Policies.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/internal/ValueBindingTest_Policies.java index f76e6abe..21127f65 100644 --- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/internal/ValueBindingTest_Policies.java +++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/internal/ValueBindingTest_Policies.java @@ -22,7 +22,7 @@ import org.eclipse.jface.tests.internal.databinding.internal.Pipeline.TrackLastL /** * Asserts the policies of ValueBinding. * - * @since 3.2 + * @since 1.1 */ public class ValueBindingTest_Policies extends AbstractDefaultRealmTestCase { private WritableValue target; @@ -50,22 +50,27 @@ public class ValueBindingTest_Policies extends AbstractDefaultRealmTestCase { } public void testModelUpdatePolicyAutomatic() throws Exception { - new ValueBinding(target, model, new BindSpec() - .setModelUpdatePolicy(BindSpec.POLICY_AUTOMATIC)).init(dbc); - target.setValue("1"); - assertEquals("should be automatic", target.getValue(), model.getValue()); + ValueBinding binding = new ValueBinding(target, model, new BindSpec() + .setModelUpdatePolicy(BindSpec.POLICY_AUTOMATIC)); + binding.init(dbc); + assertEquals(BindingEvent.PIPELINE_AFTER_CHANGE, binding.getTargetChangeModelPipelinePosition().intValue()); } public void testModelUpdatePolicyExplicit() throws Exception { + int position = BindingEvent.PIPELINE_AFTER_GET; ValueBinding binding = new ValueBinding(target, model, new BindSpec() - .setTargetUpdatePolicy(BindSpec.POLICY_EXPLICIT)); + .setModelUpdatePolicy(BindSpec.POLICY_EXPLICIT).setTargetValidatePolicy(new Integer(position))); binding.init(dbc); - model.setValue("1"); - assertFalse(model.getValue().equals(target.getValue())); + assertEquals(position, binding.getTargetChangeModelPipelinePosition().intValue()); + } + + public void testModelUpdatePolicyExplicitDefault() throws Exception { + ValueBinding binding = new ValueBinding(target, model, new BindSpec() + .setModelUpdatePolicy(BindSpec.POLICY_EXPLICIT)); + binding.init(dbc); - binding.updateTargetFromModel(); - assertEquals(model.getValue(), target.getValue()); + assertEquals(BindingEvent.PIPELINE_AFTER_CONVERT, binding.getTargetChangeModelPipelinePosition().intValue()); } public void testTargetUpdatePolicyNull() throws Exception { @@ -116,19 +121,4 @@ public class ValueBindingTest_Policies extends AbstractDefaultRealmTestCase { assertFalse(target.getValue().equals(model.getValue())); assertEquals("last position", position, listener.lastPosition); } - - public void testModelUpdatePolicyExplicitValidationDefault() - throws Exception { - TrackLastListener listener = new TrackLastListener(); - - ValueBinding binding = new ValueBinding(target, model, new BindSpec() - .setModelUpdatePolicy(BindSpec.POLICY_EXPLICIT)); - binding.init(dbc); - - binding.addBindingEventListener(listener); - target.setValue(""); - - assertEquals("default validation position", - BindingEvent.PIPELINE_AFTER_CONVERT, listener.lastPosition); - } } diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/internal/beans/JavaBeanObservableValueTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/internal/beans/JavaBeanObservableValueTest.java index 91464249..bbfd70c2 100644 --- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/internal/beans/JavaBeanObservableValueTest.java +++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/internal/beans/JavaBeanObservableValueTest.java @@ -15,10 +15,9 @@ package org.eclipse.jface.tests.internal.databinding.internal.beans; import java.beans.PropertyDescriptor; import org.eclipse.core.databinding.observable.Realm; -import org.eclipse.core.databinding.observable.value.IValueChangeListener; -import org.eclipse.core.databinding.observable.value.ValueChangeEvent; import org.eclipse.core.internal.databinding.internal.beans.JavaBeanObservableValue; import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase; +import org.eclipse.jface.tests.databinding.util.EventTrackers.ValueChangeEventTracker; /** * @since 3.2 @@ -58,12 +57,12 @@ public class JavaBeanObservableValueTest extends AbstractDefaultRealmTestCase { public void testRegistersListenerAfterFirstListenerIsAdded() throws Exception { assertFalse(bean.changeSupport.hasListeners(propertyName)); - observableValue.addValueChangeListener(new ValueChangeListener()); + observableValue.addValueChangeListener(new ValueChangeEventTracker()); assertTrue(bean.changeSupport.hasListeners(propertyName)); } public void testRemovesListenerAfterLastListenerIsRemoved() throws Exception { - ValueChangeListener listener = new ValueChangeListener(); + ValueChangeEventTracker listener = new ValueChangeEventTracker(); observableValue.addValueChangeListener(listener); assertTrue(bean.changeSupport.hasListeners(propertyName)); @@ -72,18 +71,11 @@ public class JavaBeanObservableValueTest extends AbstractDefaultRealmTestCase { } public void testFiresValueChangeEvents() throws Exception { - ValueChangeListener listener = new ValueChangeListener(); + ValueChangeEventTracker listener = new ValueChangeEventTracker(); observableValue.addValueChangeListener(listener); assertEquals(0, listener.count); bean.setValue(bean.getValue() + bean.getValue()); assertEquals(1, listener.count); } - - static class ValueChangeListener implements IValueChangeListener { - int count; - public void handleValueChange(ValueChangeEvent event) { - count++; - } - } } diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/internal/viewers/SelectionProviderSingleSelectionObservableValueTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/internal/viewers/SelectionProviderSingleSelectionObservableValueTest.java index b9e6b20b..6de9f335 100644 --- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/internal/viewers/SelectionProviderSingleSelectionObservableValueTest.java +++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/internal/viewers/SelectionProviderSingleSelectionObservableValueTest.java @@ -13,12 +13,9 @@ package org.eclipse.jface.tests.internal.databinding.internal.viewers; import junit.framework.TestCase; -import org.eclipse.core.databinding.observable.IObservable; -import org.eclipse.core.databinding.observable.value.IValueChangeListener; -import org.eclipse.core.databinding.observable.value.ValueChangeEvent; -import org.eclipse.core.databinding.observable.value.ValueDiff; import org.eclipse.jface.databinding.swt.SWTObservables; import org.eclipse.jface.internal.databinding.internal.viewers.SelectionProviderSingleSelectionObservableValue; +import org.eclipse.jface.tests.databinding.util.EventTrackers.ValueChangeEventTracker; import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.StructuredSelection; @@ -83,52 +80,32 @@ public class SelectionProviderSingleSelectionObservableValueTest extends TestCas SelectionProviderSingleSelectionObservableValue observable = new SelectionProviderSingleSelectionObservableValue( SWTObservables.getRealm(Display.getDefault()), selectionProvider); - ChangeListener listener = new ChangeListener(); + ValueChangeEventTracker listener = new ValueChangeEventTracker(); observable.addValueChangeListener(listener); assertNull(observable.getValue()); selectionProvider.setSelection(new StructuredSelection(model[0])); assertEquals(1, listener.count); - assertNull(listener.diff.getOldValue()); - assertEquals(model[0], listener.diff.getNewValue()); - assertEquals(observable, listener.source); + assertNull(listener.event.diff.getOldValue()); + assertEquals(model[0], listener.event.diff.getNewValue()); + assertEquals(observable, listener.event.getObservableValue()); assertEquals(model[0], observable.getValue()); selectionProvider.setSelection(new StructuredSelection(model[1])); assertEquals(2, listener.count); - assertEquals(model[0], listener.diff.getOldValue()); - assertEquals(model[1], listener.diff.getNewValue()); - assertEquals(observable, listener.source); + assertEquals(model[0], listener.event.diff.getOldValue()); + assertEquals(model[1], listener.event.diff.getNewValue()); + assertEquals(observable, listener.event.getObservableValue()); assertEquals(model[1], observable.getValue()); selectionProvider.setSelection(StructuredSelection.EMPTY); assertEquals(3, listener.count); - assertEquals(model[1], listener.diff.getOldValue()); - assertNull(listener.diff.getNewValue()); - assertEquals(observable, listener.source); + assertEquals(model[1], listener.event.diff.getOldValue()); + assertNull(listener.event.diff.getNewValue()); + assertEquals(observable, listener.event.getObservableValue()); assertEquals(null, observable.getValue()); } - private class ChangeListener implements IValueChangeListener { - int count = 0; - - IObservable source; - - ValueDiff diff; - - /* - * (non-Javadoc) - * - * @see org.eclipse.jface.databinding.observable.value.IValueChangeListener#handleValueChange(org.eclipse.jface.databinding.observable.value.IObservableValue, - * org.eclipse.jface.databinding.observable.value.ValueDiff) - */ - public void handleValueChange(ValueChangeEvent event) { - count++; - this.source = event.getObservableValue(); - this.diff = event.diff; - } - } - private class ContentProvider implements IStructuredContentProvider { public void dispose() { // TODO Auto-generated method stub diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/provisional/viewers/SelectionObservableValueTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/provisional/viewers/SelectionObservableValueTest.java index 73549284..7f8b6403 100644 --- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/provisional/viewers/SelectionObservableValueTest.java +++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/provisional/viewers/SelectionObservableValueTest.java @@ -14,16 +14,15 @@ package org.eclipse.jface.tests.internal.databinding.provisional.viewers; import junit.framework.TestCase; import org.eclipse.core.databinding.observable.value.IObservableValue; -import org.eclipse.core.databinding.observable.value.IValueChangeListener; -import org.eclipse.core.databinding.observable.value.ValueChangeEvent; import org.eclipse.jface.databinding.viewers.ViewersObservables; +import org.eclipse.jface.tests.databinding.util.EventTrackers.ValueChangeEventTracker; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ListViewer; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.swt.widgets.Shell; /** - * @since 3.3 + * @since 1.1 */ public class SelectionObservableValueTest extends TestCase { public void testSetValue() throws Exception { @@ -34,7 +33,7 @@ public class SelectionObservableValueTest extends TestCase { viewer.setInput(items); IObservableValue observable = ViewersObservables.observeSingleSelection(viewer); - ValueChangeListener listener = new ValueChangeListener(); + ValueChangeEventTracker listener = new ValueChangeEventTracker(); observable.addValueChangeListener(listener); assertNull(observable.getValue()); @@ -54,12 +53,4 @@ public class SelectionObservableValueTest extends TestCase { assertEquals("viewer selection should be empty", StructuredSelection.EMPTY, viewer.getSelection()); assertEquals("value change event did not fire", 2, listener.count); } - - private static class ValueChangeListener implements IValueChangeListener { - int count; - - public void handleValueChange(ValueChangeEvent event) { - count++; - } - } } |