001: /*******************************************************************************
002: * Copyright (c) 2006 Brad Reynolds and others.
003: * All rights reserved. This program and the accompanying materials
004: * are made available under the terms of the Eclipse Public License v1.0
005: * which accompanies this distribution, and is available at
006: * http://www.eclipse.org/legal/epl-v10.html
007: *
008: * Contributors:
009: * Brad Reynolds - initial API and implementation
010: * Ashley Cambrell - bug 198904
011: ******************************************************************************/package org.eclipse.jface.tests.internal.databinding.internal.swt;
012:
013: import junit.framework.Test;
014:
015: import org.eclipse.core.databinding.observable.IObservable;
016: import org.eclipse.core.databinding.observable.Realm;
017: import org.eclipse.core.databinding.observable.value.IObservableValue;
018: import org.eclipse.jface.conformance.databinding.AbstractObservableValueContractDelegate;
019: import org.eclipse.jface.conformance.databinding.SWTMutableObservableValueContractTest;
020: import org.eclipse.jface.conformance.databinding.SWTObservableValueContractTest;
021: import org.eclipse.jface.conformance.databinding.SuiteBuilder;
022: import org.eclipse.jface.internal.databinding.internal.swt.ButtonObservableValue;
023: import org.eclipse.jface.tests.databinding.AbstractSWTTestCase;
024: import org.eclipse.jface.tests.databinding.EventTrackers.ValueChangeEventTracker;
025: import org.eclipse.swt.SWT;
026: import org.eclipse.swt.widgets.Button;
027: import org.eclipse.swt.widgets.Shell;
028:
029: /**
030: * @since 3.2
031: */
032: public class ButtonObservableValueTest extends AbstractSWTTestCase {
033: private Button button;
034: private ButtonObservableValue observableValue;
035: private ValueChangeEventTracker listener;
036:
037: /* (non-Javadoc)
038: * @see junit.framework.TestCase#setUp()
039: */
040: protected void setUp() throws Exception {
041: super .setUp();
042:
043: Shell shell = getShell();
044: button = new Button(shell, SWT.CHECK);
045: observableValue = new ButtonObservableValue(button);
046: listener = new ValueChangeEventTracker();
047: }
048:
049: public void testSelection_ChangeNotifiesObservable()
050: throws Exception {
051: observableValue.addValueChangeListener(listener);
052: button.setSelection(true);
053:
054: // precondition
055: assertEquals(0, listener.count);
056: button.notifyListeners(SWT.Selection, null);
057:
058: assertEquals("Selection event should notify observable.", 1,
059: listener.count);
060: }
061:
062: public void testSelection_NoChange() throws Exception {
063: button.setSelection(true);
064: button.notifyListeners(SWT.Selection, null);
065: observableValue.addValueChangeListener(listener);
066:
067: //precondition
068: assertEquals(0, listener.count);
069:
070: button.notifyListeners(SWT.Selection, null);
071: assertEquals(
072: "Value did not change. Listeners should not have been notified.",
073: 0, listener.count);
074: }
075:
076: public void testDispose() throws Exception {
077: ValueChangeEventTracker testCounterValueChangeListener = new ValueChangeEventTracker();
078: observableValue
079: .addValueChangeListener(testCounterValueChangeListener);
080:
081: assertEquals(Boolean.FALSE, observableValue.getValue());
082: assertFalse(button.getSelection());
083:
084: button.setSelection(true);
085: button.notifyListeners(SWT.Selection, null);
086:
087: assertEquals(1, testCounterValueChangeListener.count);
088: assertEquals(Boolean.TRUE, observableValue.getValue());
089: assertTrue(button.getSelection());
090:
091: observableValue.dispose();
092:
093: button.setSelection(false);
094: button.notifyListeners(SWT.Selection, null);
095:
096: assertEquals(1, testCounterValueChangeListener.count);
097: }
098:
099: public static Test suite() {
100: Delegate delegate = new Delegate();
101:
102: return new SuiteBuilder().addTests(
103: ButtonObservableValueTest.class)
104: .addObservableContractTest(
105: SWTObservableValueContractTest.class, delegate)
106: .addObservableContractTest(
107: SWTMutableObservableValueContractTest.class,
108: delegate).build();
109: }
110:
111: /* package */static class Delegate extends
112: AbstractObservableValueContractDelegate {
113: Shell shell;
114:
115: Button button;
116:
117: public void setUp() {
118: super .setUp();
119:
120: shell = new Shell();
121: button = new Button(shell, SWT.CHECK);
122: }
123:
124: public void tearDown() {
125: super .tearDown();
126:
127: shell.dispose();
128: }
129:
130: public IObservableValue createObservableValue(Realm realm) {
131: return new ButtonObservableValue(realm, button);
132: }
133:
134: public Object getValueType(IObservableValue observable) {
135: return Boolean.TYPE;
136: }
137:
138: public void change(IObservable observable) {
139: IObservableValue observableValue = (IObservableValue) observable;
140: observableValue.setValue(createValue(observableValue));
141: }
142:
143: public Object createValue(IObservableValue observable) {
144: if (Boolean.TRUE.equals(observable.getValue())) {
145: return Boolean.FALSE;
146: }
147:
148: return Boolean.TRUE;
149: }
150: }
151: }
|