001: /*******************************************************************************
002: * Copyright (c) 2006 Brad Reynolds.
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: * Brad Reynolds - bug 116920
011: * Ashley Cambrell - bug 198906
012: *******************************************************************************/package org.eclipse.jface.tests.internal.databinding.internal.viewers;
013:
014: import junit.framework.TestCase;
015:
016: import org.eclipse.jface.databinding.swt.SWTObservables;
017: import org.eclipse.jface.internal.databinding.internal.viewers.SelectionProviderSingleSelectionObservableValue;
018: import org.eclipse.jface.tests.databinding.EventTrackers.ValueChangeEventTracker;
019: import org.eclipse.jface.viewers.ISelectionProvider;
020: import org.eclipse.jface.viewers.IStructuredContentProvider;
021: import org.eclipse.jface.viewers.StructuredSelection;
022: import org.eclipse.jface.viewers.TableViewer;
023: import org.eclipse.jface.viewers.Viewer;
024: import org.eclipse.swt.SWT;
025: import org.eclipse.swt.widgets.Display;
026: import org.eclipse.swt.widgets.Shell;
027:
028: /**
029: * Tests for SelectionProviderSingleSelectionObservableValue.
030: *
031: * @since 1.1
032: */
033: public class SelectionProviderSingleSelectionObservableValueTest extends
034: TestCase {
035: private ISelectionProvider selectionProvider;
036:
037: private TableViewer viewer;
038:
039: private static String[] model = new String[] { "0", "1" };
040:
041: /*
042: * (non-Javadoc)
043: *
044: * @see junit.framework.TestCase#setUp()
045: */
046: protected void setUp() throws Exception {
047: Shell shell = new Shell();
048: viewer = new TableViewer(shell, SWT.NONE);
049: viewer.setContentProvider(new ContentProvider());
050: viewer.setInput(model);
051: selectionProvider = viewer;
052: }
053:
054: /*
055: * (non-Javadoc)
056: *
057: * @see junit.framework.TestCase#tearDown()
058: */
059: protected void tearDown() throws Exception {
060: Shell shell = viewer.getTable().getShell();
061: if (!shell.isDisposed())
062: shell.dispose();
063: }
064:
065: public void testConstructorIllegalArgumentException() {
066: try {
067: new SelectionProviderSingleSelectionObservableValue(
068: SWTObservables.getRealm(Display.getDefault()), null);
069: fail();
070: } catch (IllegalArgumentException e) {
071: }
072: }
073:
074: /**
075: * Asserts that when a selection is set on the viewer:
076: * <ul>
077: * <li>the selection is available in the observable</li>
078: * <li>Value change events are fired with appropriate diff values</li>
079: * </ul>
080: */
081: public void testGetSetValue() {
082: SelectionProviderSingleSelectionObservableValue observable = new SelectionProviderSingleSelectionObservableValue(
083: SWTObservables.getRealm(Display.getDefault()),
084: selectionProvider);
085: ValueChangeEventTracker listener = new ValueChangeEventTracker();
086: observable.addValueChangeListener(listener);
087: assertNull(observable.getValue());
088:
089: selectionProvider
090: .setSelection(new StructuredSelection(model[0]));
091: assertEquals(1, listener.count);
092: assertNull(listener.event.diff.getOldValue());
093: assertEquals(model[0], listener.event.diff.getNewValue());
094: assertEquals(observable, listener.event.getObservableValue());
095: assertEquals(model[0], observable.getValue());
096:
097: selectionProvider
098: .setSelection(new StructuredSelection(model[1]));
099: assertEquals(2, listener.count);
100: assertEquals(model[0], listener.event.diff.getOldValue());
101: assertEquals(model[1], listener.event.diff.getNewValue());
102: assertEquals(observable, listener.event.getObservableValue());
103: assertEquals(model[1], observable.getValue());
104:
105: selectionProvider.setSelection(StructuredSelection.EMPTY);
106: assertEquals(3, listener.count);
107: assertEquals(model[1], listener.event.diff.getOldValue());
108: assertNull(listener.event.diff.getNewValue());
109: assertEquals(observable, listener.event.getObservableValue());
110: assertEquals(null, observable.getValue());
111: }
112:
113: public void testDispose() throws Exception {
114: SelectionProviderSingleSelectionObservableValue observable = new SelectionProviderSingleSelectionObservableValue(
115: SWTObservables.getRealm(Display.getDefault()),
116: selectionProvider);
117: ValueChangeEventTracker listener = new ValueChangeEventTracker();
118: observable.addValueChangeListener(listener);
119:
120: selectionProvider
121: .setSelection(new StructuredSelection(model[0]));
122: assertEquals(1, listener.count);
123: assertNull(listener.event.diff.getOldValue());
124: assertEquals(model[0], listener.event.diff.getNewValue());
125: assertEquals(observable, listener.event.getObservableValue());
126: assertEquals(model[0], observable.getValue());
127:
128: observable.dispose();
129: selectionProvider
130: .setSelection(new StructuredSelection(model[1]));
131: assertEquals(1, listener.count);
132: }
133:
134: private class ContentProvider implements IStructuredContentProvider {
135: public void dispose() {
136: // TODO Auto-generated method stub
137:
138: }
139:
140: public void inputChanged(Viewer viewer, Object oldInput,
141: Object newInput) {
142: // TODO Auto-generated method stub
143:
144: }
145:
146: public Object[] getElements(Object inputElement) {
147: return (String[]) inputElement;
148: }
149: }
150:
151: }
|