/*******************************************************************************
* Copyright (c) 2007, 2014 compeople AG 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:
* compeople AG - initial API and implementation
*******************************************************************************/
package org.eclipse.riena.internal.ui.ridgets.swt;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import org.eclipse.core.databinding.DataBindingContext;
import org.eclipse.core.databinding.UpdateListStrategy;
import org.eclipse.core.databinding.UpdateValueStrategy;
import org.eclipse.core.databinding.observable.list.WritableList;
import org.eclipse.core.databinding.observable.value.WritableValue;
import org.eclipse.riena.beans.common.Person;
import org.eclipse.riena.beans.common.PersonManager;
import org.eclipse.riena.internal.ui.swt.test.UITestHelper;
import org.eclipse.riena.ui.ridgets.ISelectableIndexedRidget;
import org.eclipse.riena.ui.ridgets.ISelectableRidget;
import org.eclipse.riena.ui.ridgets.ISelectableRidget.SelectionType;
import org.eclipse.riena.ui.ridgets.ITableRidget;
import org.eclipse.riena.ui.ridgets.swt.AbstractSelectableIndexedRidget;
import org.eclipse.riena.ui.ridgets.swt.AbstractSelectableRidget;
import org.eclipse.riena.ui.tests.base.TestMultiSelectionBean;
import org.eclipse.riena.ui.tests.base.TestSingleSelectionBean;
/**
* Tests for the class {@link AbstractSelectableRidget} and
* {@link AbstractSelectableIndexedRidget} for table/list based implementations.
*/
public abstract class AbstractTableListRidgetTest extends AbstractSWTRidgetTest {
protected PersonManager manager;
protected Person person1;
protected Person person2;
protected Person person3;
protected TestSingleSelectionBean singleSelectionBean;
protected TestMultiSelectionBean multiSelectionBean;
@Override
public void setUp() throws Exception {
super.setUp();
manager = new PersonManager(createPersonList());
final Iterator<Person> it = manager.getPersons().iterator();
person1 = it.next();
person2 = it.next();
person3 = it.next();
bindRidgetToModel();
singleSelectionBean = new TestSingleSelectionBean();
getRidget().bindSingleSelectionToModel(singleSelectionBean, TestSingleSelectionBean.PROPERTY_SELECTION);
multiSelectionBean = new TestMultiSelectionBean();
getRidget().bindMultiSelectionToModel(multiSelectionBean, TestMultiSelectionBean.PROPERTY_SELECTION);
getRidget().updateFromModel();
UITestHelper.readAndDispatch(getWidget());
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.riena.internal.ui.ridgets.swt.AbstractRidgetTestCase#tearDown
* ()
*/
@Override
protected void tearDown() throws Exception {
UITestHelper.readAndDispatch(getWidget());
super.tearDown();
}
protected abstract void bindRidgetToModel();
@Override
protected ISelectableIndexedRidget getRidget() {
return (ISelectableIndexedRidget) super.getRidget();
}
// test methods
// /////////////
public void testClearSelection() {
final ISelectableIndexedRidget ridget = getRidget();
ridget.setSelectionType(SelectionType.SINGLE);
ridget.setSelection(person1);
assertTrue(ridget.getSelection().size() > 0);
assertTrue(getUIControlSelectedRowCount() > 0);
assertEquals(person1, ridget.getSingleSelectionObservable().getValue());
assertEquals(1, ridget.getMultiSelectionObservable().size());
ridget.clearSelection();
assertEquals(0, ridget.getSelection().size());
assertEquals(0, getUIControlSelectedRowCount());
assertNull(ridget.getSingleSelectionObservable().getValue());
assertEquals(0, ridget.getMultiSelectionObservable().size());
if (supportsMulti()) {
ridget.setSelectionType(SelectionType.MULTI);
ridget.setSelection(Arrays.asList(new Person[] { person1, person2 }));
assertTrue(ridget.getSelection().size() > 0);
assertTrue(getUIControlSelectedRowCount() > 0);
assertNotNull(ridget.getSingleSelectionObservable().getValue());
assertEquals(2, ridget.getMultiSelectionObservable().size());
ridget.clearSelection();
assertEquals(0, ridget.getSelection().size());
assertEquals(0, getUIControlSelectedRowCount());
assertNull(ridget.getSingleSelectionObservable().getValue());
assertEquals(0, ridget.getMultiSelectionObservable().size());
}
}
/**
* As per Bug 304733
*/
public void testClearSelectionWhenSelectionIsRemovedFromModel() {
final ISelectableIndexedRidget ridget = getRidget();
ridget.bindSingleSelectionToModel(manager, "selectedPerson"); //$NON-NLS-1$
ridget.setSelection(person2);
assertSame(person2, ridget.getSelection().get(0));
assertSame(person2, manager.getSelectedPerson());
manager.getPersons().remove(person2);
ridget.updateFromModel();
assertTrue(ridget.getSelection().isEmpty());
assertNull(manager.getSelectedPerson());
}
public void testGetSelection() {
final ISelectableIndexedRidget ridget = getRidget();
assertNotNull(ridget.getSelection());
assertTrue(ridget.getSelection().isEmpty());
if (supportsMulti()) {
ridget.setSelectionType(ISelectableRidget.SelectionType.MULTI);
ridget.setSelection(new int[] { 1, 2 });
assertEquals(2, ridget.getSelection().size());
assertEquals(getRowValue(1), ridget.getSelection().get(0));
assertEquals(getRowValue(2), ridget.getSelection().get(1));
}
}
public void testGetSelectionIndex() {
final ISelectableIndexedRidget ridget = getRidget();
assertEquals(-1, ridget.getSelectionIndex());
ridget.setSelection(1);
assertEquals(1, ridget.getSelectionIndex());
ridget.setSelection(new int[] { 2, 0 });
// TODO [ev] is first the "smallest" ?
assertEquals(2, ridget.getSelectionIndex());
ridget.clearSelection();
assertEquals(-1, ridget.getSelectionIndex());
}
public void testGetSelectionIndices() {
final ISelectableIndexedRidget ridget = getRidget();
assertEquals(0, ridget.getSelectionIndices().length);
if (supportsMulti()) {
ridget.setSelectionType(ITableRidget.SelectionType.MULTI);
final java.util.List<Object> selBeans = new ArrayList<Object>(2);
selBeans.add(getRowValue(0));
selBeans.add(getRowValue(1));
ridget.setSelection(selBeans);
assertEquals(2, ridget.getSelectionIndices().length);
assertEquals(0, ridget.getSelectionIndices()[0]);
assertEquals(1, ridget.getSelectionIndices()[1]);
}
ridget.setSelection(2);
assertEquals(1, ridget.getSelectionIndices().length);
assertEquals(2, ridget.getSelectionIndices()[0]);
}
public void testSetSelectionInt() {
final ISelectableIndexedRidget ridget = getRidget();
assertNull(singleSelectionBean.getSelection());
assertTrue(multiSelectionBean.getSelectionList().isEmpty());
assertEquals(0, getUIControlSelectedRowCount());
ridget.setSelection(0);
assertEquals(1, getUIControlSelectedRowCount());
assertEquals(0, getUIControlSelectedRow());
assertEquals(getRowValue(0), singleSelectionBean.getSelection());
assertEquals(1, multiSelectionBean.getSelectionList().size());
assertEquals(getRowValue(0), multiSelectionBean.getSelectionList().get(0));
ridget.setSelection(1);
assertEquals(1, getUIControlSelectedRowCount());
assertEquals(1, getUIControlSelectedRow());
assertEquals(getRowValue(1), singleSelectionBean.getSelection());
assertEquals(1, multiSelectionBean.getSelectionList().size());
assertEquals(getRowValue(1), multiSelectionBean.getSelectionList().get(0));
try {
ridget.setSelection(99);
fail();
} catch (final RuntimeException e) {
ok();
}
assertEquals(1, getUIControlSelectedRowCount());
assertEquals(1, getUIControlSelectedRow());
assertEquals(getRowValue(1), singleSelectionBean.getSelection());
assertEquals(1, multiSelectionBean.getSelectionList().size());
assertEquals(getRowValue(1), multiSelectionBean.getSelectionList().get(0));
try {
ridget.setSelection(-1);
fail();
} catch (final RuntimeException e) {
ok();
}
assertEquals(1, getUIControlSelectedRowCount());
assertEquals(1, getUIControlSelectedRow());
assertEquals(getRowValue(1), singleSelectionBean.getSelection());
assertEquals(1, multiSelectionBean.getSelectionList().size());
assertEquals(getRowValue(1), multiSelectionBean.getSelectionList().get(0));
}
public void testSetSelectionIntArray() {
final ISelectableIndexedRidget ridget = getRidget();
assertNull(singleSelectionBean.getSelection());
assertTrue(multiSelectionBean.getSelectionList().isEmpty());
assertEquals(0, getUIControlSelectedRowCount());
ridget.setSelectionType(SelectionType.SINGLE);
ridget.setSelection(new int[] { 1, 2 });
assertEquals(1, getUIControlSelectedRowCount());
assertEquals(1, getUIControlSelectedRow());
assertEquals(getRowValue(1), singleSelectionBean.getSelection());
assertEquals(1, multiSelectionBean.getSelectionList().size());
assertEquals(getRowValue(1), multiSelectionBean.getSelectionList().get(0));
if (supportsMulti()) {
ridget.setSelectionType(ISelectableRidget.SelectionType.MULTI);
ridget.setSelection(new int[] { 1, 2 });
assertEquals(2, getUIControlSelectedRowCount());
assertEquals(1, getSelectedRows()[0]);
assertEquals(2, getSelectedRows()[1]);
assertEquals(getRowValue(1), singleSelectionBean.getSelection());
assertEquals(2, multiSelectionBean.getSelectionList().size());
assertEquals(getRowValue(1), multiSelectionBean.getSelectionList().get(0));
assertEquals(getRowValue(2), multiSelectionBean.getSelectionList().get(1));
}
ridget.setSelection(new int[] {});
assertEquals(0, ridget.getSelectionIndices().length);
try {
ridget.setSelection(new int[] { 1, -1, 2 });
fail();
} catch (final RuntimeException e) {
ok();
}
}
public void testSetSelectionList() {
final ISelectableIndexedRidget ridget = getRidget();
assertNull(singleSelectionBean.getSelection());
assertTrue(multiSelectionBean.getSelectionList().isEmpty());
assertEquals(0, getUIControlSelectedRowCount());
final java.util.List<Object> selBeans1 = new ArrayList<Object>(2);
selBeans1.add(getRowValue(0));
selBeans1.add(getRowValue(1));
ridget.setSelection(selBeans1);
assertEquals(1, getUIControlSelectedRowCount());
assertEquals(0, getUIControlSelectedRow());
assertEquals(getRowValue(0), singleSelectionBean.getSelection());
assertEquals(1, multiSelectionBean.getSelectionList().size());
assertEquals(getRowValue(0), multiSelectionBean.getSelectionList().get(0));
if (supportsMulti()) {
ridget.setSelectionType(ITableRidget.SelectionType.MULTI);
final java.util.List<Object> selBeans2 = new ArrayList<Object>(2);
selBeans2.add(getRowValue(0));
selBeans2.add(getRowValue(1));
ridget.setSelection(selBeans2);
assertEquals(2, getUIControlSelectedRowCount());
assertEquals(0, getSelectedRows()[0]);
assertEquals(1, getSelectedRows()[1]);
assertEquals(getRowValue(0), singleSelectionBean.getSelection());
assertEquals(2, multiSelectionBean.getSelectionList().size());
assertEquals(getRowValue(0), multiSelectionBean.getSelectionList().get(0));
assertEquals(getRowValue(1), multiSelectionBean.getSelectionList().get(1));
ridget.setSelectionType(ITableRidget.SelectionType.MULTI);
final java.util.List<Object> selBeans3 = new ArrayList<Object>(1);
selBeans3.add(new Object());
ridget.setSelection(selBeans3);
assertEquals(0, getUIControlSelectedRowCount());
assertNull(singleSelectionBean.getSelection());
assertTrue(multiSelectionBean.getSelectionList().isEmpty());
try {
ridget.setSelection((List<?>) null);
fail();
} catch (final RuntimeException e) {
ok();
}
}
}
public void testSetSelectionObject() {
final ISelectableIndexedRidget ridget = getRidget();
assertNull(singleSelectionBean.getSelection());
assertTrue(multiSelectionBean.getSelectionList().isEmpty());
assertEquals(0, getUIControlSelectedRowCount());
ridget.setSelection(getRowValue(0));
assertEquals(1, getUIControlSelectedRowCount());
assertEquals(0, getUIControlSelectedRow());
assertEquals(getRowValue(0), singleSelectionBean.getSelection());
assertEquals(1, multiSelectionBean.getSelectionList().size());
assertEquals(getRowValue(0), multiSelectionBean.getSelectionList().get(0));
ridget.setSelection(new Object());
assertEquals(0, getUIControlSelectedRowCount());
assertNull(singleSelectionBean.getSelection());
assertEquals(0, multiSelectionBean.getSelectionList().size());
ridget.setSelection((Object) null);
assertEquals(0, getUIControlSelectedRowCount());
assertNull(singleSelectionBean.getSelection());
assertEquals(0, multiSelectionBean.getSelectionList().size());
}
public void testSetSelectionWithNoModel() {
final ISelectableIndexedRidget ridget = (ISelectableIndexedRidget) createRidget();
assertEquals(0, ridget.getOptionCount());
try {
ridget.setSelection(0);
fail();
} catch (final RuntimeException rex) {
ok();
}
try {
ridget.setSelection(new int[] { 0 });
fail();
} catch (final RuntimeException rex) {
ok();
}
try {
ridget.setSelection((Object) null);
fail();
} catch (final RuntimeException rex) {
ok();
}
try {
ridget.setSelection(Collections.EMPTY_LIST);
fail();
} catch (final RuntimeException rex) {
ok();
}
}
public void testSetSelectionWithNoBoundControl() {
final ISelectableIndexedRidget ridget = getRidget();
ridget.setSelection(person2);
assertNotNull(ridget.getUIControl());
assertEquals(person2, ridget.getSelection().get(0));
ridget.setUIControl(null);
ridget.setSelection(person1);
assertNull(ridget.getUIControl());
assertEquals(person1, ridget.getSelection().get(0));
}
/**
* As per Bug 298033 comment #1
*/
public void testUpdateSingleSelectionFromModelWithNoBoundControl() {
final ISelectableIndexedRidget ridget = getRidget();
// ridget.addPropertyChangeListener(ISelectableIndexedRidget.PROPERTY_SELECTION, new PropertyChangeListener() {
// public void propertyChange(PropertyChangeEvent evt) {
// List list = (List) evt.getNewValue();
// System.out.println(list.isEmpty() ? "empty" : list.get(0));
// }
// });
ridget.setSelectionType(SelectionType.SINGLE);
ridget.setSelection(person2);
assertEquals(person2, ridget.getSelection().get(0));
// remove selected element while not bound to a control
ridget.setUIControl(null);
manager.getPersons().remove(person2);
ridget.updateFromModel();
assertNull(ridget.getUIControl());
assertTrue(ridget.getSelection().isEmpty());
}
/**
* As per Bug 298033 comment #1
*/
public void testUpdateMultiSelectionFromModelWithNoBoundControl() {
if (!supportsMulti()) {
System.out.println("skipping testUpdateMultiSelectionFromModelWithNoBoundControl() for " + getRidget()); //$NON-NLS-1$
return;
}
final ISelectableIndexedRidget ridget = getRidget();
// ridget.addPropertyChangeListener(ISelectableIndexedRidget.PROPERTY_SELECTION, new PropertyChangeListener() {
// public void propertyChange(PropertyChangeEvent evt) {
// List list = (List) evt.getNewValue();
// System.out.println("\t" + (list.isEmpty() ? "empty" : Arrays.toString(list.toArray())));
// }
// });
ridget.setSelectionType(SelectionType.MULTI);
ridget.setSelection(Arrays.asList(person1, person2));
assertEquals(2, ridget.getSelection().size());
assertEquals(person1, ridget.getSelection().get(0));
assertEquals(person2, ridget.getSelection().get(1));
// remove selected element while not bound to a control
ridget.setUIControl(null);
manager.getPersons().remove(person2);
ridget.updateFromModel();
assertNull(ridget.getUIControl());
assertEquals(1, ridget.getSelection().size());
assertEquals(person1, ridget.getSelection().get(0));
}
public void testUpdateSingleSelectionFromModelWithBoundControl() {
final ISelectableIndexedRidget ridget = getRidget();
// ridget.addPropertyChangeListener(ISelectableIndexedRidget.PROPERTY_SELECTION, new PropertyChangeListener() {
// public void propertyChange(PropertyChangeEvent evt) {
// List list = (List) evt.getNewValue();
// System.out.println(list.isEmpty() ? "empty" : list.get(0));
// }
// });
ridget.setSelectionType(SelectionType.SINGLE);
ridget.setSelection(person2);
assertEquals(person2, ridget.getSelection().get(0));
// remove selected element while bound to a control
manager.getPersons().remove(person2);
ridget.updateFromModel();
assertNotNull(ridget.getUIControl());
assertTrue(ridget.getSelection().isEmpty());
}
public void testUpdateMultiSelectionFromModelWithBoundControl() {
if (!supportsMulti()) {
System.out.println("skipping testUpdateMultiSelectionFromModelWithBoundControl() for " + getRidget()); //$NON-NLS-1$
return;
}
final ISelectableIndexedRidget ridget = getRidget();
// ridget.addPropertyChangeListener(ISelectableIndexedRidget.PROPERTY_SELECTION, new PropertyChangeListener() {
// public void propertyChange(PropertyChangeEvent evt) {
// List list = (List) evt.getNewValue();
// System.err.println("\t" + (list.isEmpty() ? "empty" : Arrays.toString(list.toArray())));
// }
// });
ridget.setSelectionType(SelectionType.MULTI);
ridget.setSelection(Arrays.asList(person1, person2));
assertEquals(2, ridget.getSelection().size());
assertEquals(person1, ridget.getSelection().get(0));
assertEquals(person2, ridget.getSelection().get(1));
// remove selected element while bound to a control
manager.getPersons().remove(person2);
ridget.updateFromModel();
assertNotNull(ridget.getUIControl());
assertEquals(1, ridget.getSelection().size());
assertEquals(person1, ridget.getSelection().get(0));
}
public void testUpdateMultiSelectionFromControl() {
if (!supportsMulti()) {
return;
}
final ISelectableIndexedRidget ridget = getRidget();
ridget.setSelectionType(ITableRidget.SelectionType.MULTI);
assertNull(singleSelectionBean.getSelection());
assertTrue(multiSelectionBean.getSelectionList().isEmpty());
setUIControlRowSelectionInterval(1, 2);
assertEquals(getRowValue(1), singleSelectionBean.getSelection());
assertEquals(2, multiSelectionBean.getSelectionList().size());
assertEquals(getRowValue(1), multiSelectionBean.getSelectionList().get(0));
assertEquals(getRowValue(2), multiSelectionBean.getSelectionList().get(1));
setUIControlRowSelection(new int[] { 0, 2 });
assertEquals(getRowValue(0), singleSelectionBean.getSelection());
assertEquals(2, multiSelectionBean.getSelectionList().size());
assertEquals(getRowValue(0), multiSelectionBean.getSelectionList().get(0));
assertEquals(getRowValue(2), multiSelectionBean.getSelectionList().get(1));
}
public void testUpdateMultiSelectionCustomBinding() {
if (!supportsMulti()) {
return;
}
final ISelectableIndexedRidget ridget = getRidget();
ridget.setSelectionType(ITableRidget.SelectionType.MULTI);
final WritableList customMultiSelectionObservable = new WritableList();
final DataBindingContext dbc = new DataBindingContext();
dbc.bindList(ridget.getMultiSelectionObservable(), customMultiSelectionObservable, new UpdateListStrategy(
UpdateListStrategy.POLICY_UPDATE), new UpdateListStrategy(UpdateListStrategy.POLICY_UPDATE));
setUIControlRowSelectionInterval(0, 2);
assertEquals(3, getUIControlSelectedRowCount());
assertEquals(0, getUIControlSelectedRows()[0]);
assertEquals(1, getUIControlSelectedRows()[1]);
assertEquals(2, getUIControlSelectedRows()[2]);
assertEquals(3, customMultiSelectionObservable.size());
assertEquals(getRowValue(0), customMultiSelectionObservable.get(0));
assertEquals(getRowValue(1), customMultiSelectionObservable.get(1));
assertEquals(getRowValue(2), customMultiSelectionObservable.get(2));
customMultiSelectionObservable.add(getRowValue(0));
customMultiSelectionObservable.clear();
customMultiSelectionObservable.add(getRowValue(0));
customMultiSelectionObservable.add(getRowValue(2));
assertEquals(2, getUIControlSelectedRowCount());
assertEquals(0, getUIControlSelectedRows()[0]);
assertEquals(2, getUIControlSelectedRows()[1]);
assertEquals(2, customMultiSelectionObservable.size());
assertEquals(getRowValue(0), customMultiSelectionObservable.get(0));
assertEquals(getRowValue(2), customMultiSelectionObservable.get(1));
}
public void testUpdateMultiSelection2FromModel() {
if (!supportsMulti()) {
return;
}
final ISelectableIndexedRidget ridget = getRidget();
ridget.setSelectionType(ITableRidget.SelectionType.MULTI);
setUIControlRowSelectionInterval(0, 2);
multiSelectionBean.setSelectionList(new ArrayList<Object>());
multiSelectionBean.getSelectionList().add(getRowValue(1));
multiSelectionBean.getSelectionList().add(getRowValue(2));
assertEquals(3, getUIControlSelectedRowCount());
assertEquals(0, getUIControlSelectedRows()[0]);
assertEquals(1, getUIControlSelectedRows()[1]);
assertEquals(2, getUIControlSelectedRows()[2]);
assertEquals(getRowValue(0), singleSelectionBean.getSelection());
assertEquals(2, multiSelectionBean.getSelectionList().size());
assertEquals(getRowValue(1), multiSelectionBean.getSelectionList().get(0));
assertEquals(getRowValue(2), multiSelectionBean.getSelectionList().get(1));
ridget.updateMultiSelectionFromModel();
assertEquals(2, getUIControlSelectedRowCount());
assertEquals(1, getUIControlSelectedRows()[0]);
assertEquals(2, getUIControlSelectedRows()[1]);
assertEquals(getRowValue(1), singleSelectionBean.getSelection());
assertEquals(2, multiSelectionBean.getSelectionList().size());
assertEquals(getRowValue(1), multiSelectionBean.getSelectionList().get(0));
assertEquals(getRowValue(2), multiSelectionBean.getSelectionList().get(1));
}
public void testUpdateMultiSelection3FromModelWhenUnbound() {
if (!supportsMulti()) {
return;
}
final ISelectableIndexedRidget ridget = getRidget();
ridget.setSelectionType(ITableRidget.SelectionType.MULTI);
setUIControlRowSelectionInterval(0, 2);
multiSelectionBean.setSelectionList(new ArrayList<Object>());
multiSelectionBean.getSelectionList().add(getRowValue(1));
multiSelectionBean.getSelectionList().add(getRowValue(2));
assertEquals(3, getUIControlSelectedRowCount());
assertEquals(0, getUIControlSelectedRows()[0]);
assertEquals(1, getUIControlSelectedRows()[1]);
assertEquals(2, getUIControlSelectedRows()[2]);
assertEquals(getRowValue(0), singleSelectionBean.getSelection());
assertEquals(2, multiSelectionBean.getSelectionList().size());
assertEquals(getRowValue(1), multiSelectionBean.getSelectionList().get(0));
assertEquals(getRowValue(2), multiSelectionBean.getSelectionList().get(1));
ridget.setUIControl(null);
ridget.updateMultiSelectionFromModel();
ridget.setUIControl(getWidget());
assertEquals(2, getUIControlSelectedRowCount());
assertEquals(1, getUIControlSelectedRows()[0]);
assertEquals(2, getUIControlSelectedRows()[1]);
assertEquals(getRowValue(1), singleSelectionBean.getSelection());
assertEquals(2, multiSelectionBean.getSelectionList().size());
assertEquals(getRowValue(1), multiSelectionBean.getSelectionList().get(0));
assertEquals(getRowValue(2), multiSelectionBean.getSelectionList().get(1));
}
public void testUpdateMultiSelectionFromRidgetOnRebind() {
if (!supportsMulti()) {
return;
}
final ISelectableIndexedRidget ridget = getRidget();
ridget.setSelectionType(ITableRidget.SelectionType.MULTI);
setUIControlRowSelectionInterval(1, 2);
ridget.setUIControl(null); // unbind
clearUIControlRowSelection();
assertEquals(0, getUIControlSelectedRowCount());
assertEquals(getRowValue(1), singleSelectionBean.getSelection());
assertEquals(2, multiSelectionBean.getSelectionList().size());
assertEquals(getRowValue(1), multiSelectionBean.getSelectionList().get(0));
assertEquals(getRowValue(2), multiSelectionBean.getSelectionList().get(1));
ridget.setUIControl(getWidget()); // rebind
assertEquals(2, getUIControlSelectedRowCount());
assertEquals(1, getUIControlSelectedRows()[0]);
assertEquals(2, getUIControlSelectedRows()[1]);
assertEquals(getRowValue(1), singleSelectionBean.getSelection());
assertEquals(2, multiSelectionBean.getSelectionList().size());
assertEquals(getRowValue(1), multiSelectionBean.getSelectionList().get(0));
assertEquals(getRowValue(2), multiSelectionBean.getSelectionList().get(1));
}
public void testUpdateSingleSelectionCustomBinding() {
final ISelectableIndexedRidget ridget = getRidget();
final WritableValue customSingleSelectionObservable = new WritableValue();
final DataBindingContext dbc = new DataBindingContext();
dbc.bindValue(ridget.getSingleSelectionObservable(), customSingleSelectionObservable, new UpdateValueStrategy(
UpdateValueStrategy.POLICY_NEVER), new UpdateValueStrategy(UpdateValueStrategy.POLICY_UPDATE));
setUIControlRowSelectionInterval(1, 1);
assertEquals(1, getUIControlSelectedRowCount());
assertEquals(1, getUIControlSelectedRow());
assertNull(customSingleSelectionObservable.getValue());
customSingleSelectionObservable.setValue(getRowValue(0));
assertEquals(1, getUIControlSelectedRowCount());
assertEquals(0, getUIControlSelectedRow());
assertEquals(getRowValue(0), customSingleSelectionObservable.getValue());
}
public void testUpdateSingleSelectionFromControl() {
assertNull(singleSelectionBean.getSelection());
assertTrue(multiSelectionBean.getSelectionList().isEmpty());
setUIControlRowSelectionInterval(1, 1);
assertEquals(getRowValue(1), singleSelectionBean.getSelection());
assertEquals(1, multiSelectionBean.getSelectionList().size());
assertEquals(getRowValue(1), multiSelectionBean.getSelectionList().get(0));
}
public void testUpdateSingleSelectionFromModel() {
final ISelectableIndexedRidget ridget = getRidget();
setUIControlRowSelectionInterval(1, 1);
singleSelectionBean.setSelection(getRowValue(0));
assertEquals(1, getUIControlSelectedRowCount());
assertEquals(1, getUIControlSelectedRow());
assertEquals(getRowValue(0), singleSelectionBean.getSelection());
assertEquals(1, multiSelectionBean.getSelectionList().size());
assertEquals(getRowValue(1), multiSelectionBean.getSelectionList().get(0));
ridget.updateSingleSelectionFromModel();
assertEquals(1, getUIControlSelectedRowCount());
assertEquals(0, getUIControlSelectedRow());
assertEquals(getRowValue(0), singleSelectionBean.getSelection());
assertEquals(1, multiSelectionBean.getSelectionList().size());
assertEquals(getRowValue(0), multiSelectionBean.getSelectionList().get(0));
}
public void testUpdateSingleSelectionFromModelWhenUnbound() {
final ISelectableIndexedRidget ridget = getRidget();
setUIControlRowSelectionInterval(1, 1); // select row 1 in widget
singleSelectionBean.setSelection(getRowValue(0)); // select row 0 in bean; does not update selection
assertEquals(1, getUIControlSelectedRowCount());
assertEquals(1, getUIControlSelectedRow());
assertEquals(getRowValue(0), singleSelectionBean.getSelection());
assertEquals(1, multiSelectionBean.getSelectionList().size());
assertEquals(getRowValue(1), multiSelectionBean.getSelectionList().get(0));
ridget.setUIControl(null); // unbind
ridget.updateSingleSelectionFromModel(); // update selection from bean
ridget.setUIControl(getWidget()); // rebind
UITestHelper.readAndDispatch(getWidget());
assertEquals(1, getUIControlSelectedRowCount());
assertEquals(0, getUIControlSelectedRow());
assertEquals(getRowValue(0), singleSelectionBean.getSelection());
assertEquals(1, multiSelectionBean.getSelectionList().size());
assertEquals(getRowValue(0), multiSelectionBean.getSelectionList().get(0));
}
public void testUpdateSingleSelectionFromRidgetOnRebind() {
final ISelectableIndexedRidget ridget = getRidget();
setUIControlRowSelectionInterval(2, 2);
ridget.setUIControl(null); // unbind
clearUIControlRowSelection();
assertEquals(0, getUIControlSelectedRowCount());
assertEquals(getRowValue(2), singleSelectionBean.getSelection());
assertEquals(1, multiSelectionBean.getSelectionList().size());
assertEquals(getRowValue(2), multiSelectionBean.getSelectionList().get(0));
ridget.setUIControl(getWidget()); // rebind
assertEquals(1, getUIControlSelectedRowCount());
assertEquals(2, getUIControlSelectedRow());
assertEquals(getRowValue(2), singleSelectionBean.getSelection());
assertEquals(1, multiSelectionBean.getSelectionList().size());
assertEquals(getRowValue(2), multiSelectionBean.getSelectionList().get(0));
}
public void testSelectionEventsSelectionTypeSingle() {
final ISelectableIndexedRidget ridget = getRidget();
ridget.setSelectionType(SelectionType.SINGLE);
assertNull(singleSelectionBean.getSelection());
assertTrue(multiSelectionBean.getSelectionList().isEmpty());
assertEquals(0, getUIControlSelectedRowCount());
// ridget.addPropertyChangeListener(new PropertyChangeListener() {
// public void propertyChange(PropertyChangeEvent evt) {
// String name = evt.getPropertyName();
// Object old = evt.getOldValue();
// Object newv = evt.getNewValue();
// System.out.println(name + ", " + old + " -> " + newv);
// }
// });
java.util.List<?> oldSelection = Collections.EMPTY_LIST;
java.util.List<?> newSelection = Arrays.asList(new Object[] { person1 });
expectPropertyChangeEvent(ISelectableRidget.PROPERTY_SELECTION, oldSelection, newSelection);
ridget.setSelection(0);
verifyPropertyChangeEvents();
expectNoPropertyChangeEvent();
ridget.setSelection(0);
verifyPropertyChangeEvents();
oldSelection = newSelection;
newSelection = Collections.EMPTY_LIST;
expectPropertyChangeEvent(ISelectableRidget.PROPERTY_SELECTION, oldSelection, newSelection);
ridget.setSelection(Collections.EMPTY_LIST);
verifyPropertyChangeEvents();
oldSelection = Collections.EMPTY_LIST;
newSelection = Arrays.asList(new Object[] { person2 });
expectPropertyChangeEvent(ISelectableRidget.PROPERTY_SELECTION, oldSelection, newSelection);
ridget.setSelection(new int[] { 1, 2 });
verifyPropertyChangeEvents();
}
public void testSelectionEventsSelectionTypeMulti() {
if (!supportsMulti()) {
return;
}
final ISelectableIndexedRidget ridget = getRidget();
ridget.setSelectionType(SelectionType.MULTI);
assertNull(singleSelectionBean.getSelection());
assertTrue(multiSelectionBean.getSelectionList().isEmpty());
assertEquals(0, getUIControlSelectedRowCount());
// ridget.addPropertyChangeListener(new PropertyChangeListener() {
// public void propertyChange(PropertyChangeEvent evt) {
// String name = evt.getPropertyName();
// Object old = evt.getOldValue();
// Object newv = evt.getNewValue();
// System.out.println(name + ", " + old + " -> " + newv);
// }
// });
java.util.List<?> oldSelection = Collections.EMPTY_LIST;
java.util.List<?> newSelection = Arrays.asList(new Object[] { person1 });
expectPropertyChangeEvent(ISelectableRidget.PROPERTY_SELECTION, oldSelection, newSelection);
ridget.setSelection(0);
verifyPropertyChangeEvents();
expectNoPropertyChangeEvent();
ridget.setSelection(0);
verifyPropertyChangeEvents();
oldSelection = newSelection;
newSelection = Collections.EMPTY_LIST;
expectPropertyChangeEvent(ISelectableRidget.PROPERTY_SELECTION, oldSelection, newSelection);
ridget.setSelection(Collections.EMPTY_LIST);
verifyPropertyChangeEvents();
oldSelection = Collections.EMPTY_LIST;
newSelection = Arrays.asList(new Object[] { person2, person3 });
expectPropertyChangeEvent(ISelectableRidget.PROPERTY_SELECTION, oldSelection, newSelection);
ridget.setSelection(new int[] { 1, 2 });
verifyPropertyChangeEvents();
}
public void testIndexOfOption() {
final ISelectableIndexedRidget ridget = getRidget();
assertEquals(-1, ridget.indexOfOption(null));
assertEquals(-1, ridget.indexOfOption(new Object()));
assertEquals(0, ridget.indexOfOption(person1));
assertEquals(1, ridget.indexOfOption(person2));
assertEquals(2, ridget.indexOfOption(person3));
}
public void testGetOption() {
final ISelectableIndexedRidget ridget = getRidget();
try {
ridget.getOption(-1);
fail();
} catch (final RuntimeException e) {
ok();
}
try {
final int tooBig = manager.getPersons().size() + 1;
ridget.getOption(tooBig);
fail();
} catch (final RuntimeException e) {
ok();
}
assertSame(person1, ridget.getOption(0));
assertSame(person2, ridget.getOption(1));
assertSame(person3, ridget.getOption(2));
}
public void testGetOptionCount() {
final ISelectableIndexedRidget ridget = getRidget();
final int oldCount = manager.getPersons().size();
assertEquals(oldCount, ridget.getOptionCount());
manager.getPersons().remove(person1);
final int newCount = oldCount - 1;
assertEquals(newCount, manager.getPersons().size());
assertEquals(oldCount, ridget.getOptionCount());
ridget.updateFromModel();
assertEquals(newCount, ridget.getOptionCount());
}
public void testSetSelectionTypeNull() {
final ISelectableIndexedRidget ridget = getRidget();
try {
ridget.setSelectionType(null);
fail();
} catch (final RuntimeException npe) {
ok();
}
}
public void testSetSelectionTypeNONE() {
final ISelectableIndexedRidget ridget = getRidget();
try {
ridget.setSelectionType(ISelectableRidget.SelectionType.NONE);
fail();
} catch (final RuntimeException iae) {
ok();
}
}
// helping methods
// ////////////////
abstract protected void clearUIControlRowSelection();
abstract protected int getUIControlSelectedRowCount();
abstract protected int getUIControlSelectedRow();
abstract protected Object getRowValue(int i);
abstract protected int[] getSelectedRows();
abstract protected int[] getUIControlSelectedRows();
abstract protected void setUIControlRowSelection(int[] indices);
abstract protected void setUIControlRowSelectionInterval(int start, int end);
/**
* Returns true if this ridget supports multiple selection, false otherwise.
*/
abstract protected boolean supportsMulti();
/**
* fires a selection event manually - control.setXXX does not fire events
*/
protected final void fireSelectionEvent() {
UITestHelper.fireSelectionEvent(getWidget());
}
private Collection<Person> createPersonList() {
final Collection<Person> newList = new ArrayList<Person>();
Person person = new Person("Doe", "John"); //$NON-NLS-1$ //$NON-NLS-2$
person.setEyeColor(1);
newList.add(person);
person = new Person("Jackson", "Janet"); //$NON-NLS-1$ //$NON-NLS-2$
person.setEyeColor(1);
newList.add(person);
person = new Person("Jackson", "Jermaine"); //$NON-NLS-1$ //$NON-NLS-2$
person.setEyeColor(1);
newList.add(person);
person = new Person("Jackson", "John"); //$NON-NLS-1$ //$NON-NLS-2$
person.setEyeColor(3);
newList.add(person);
person = new Person("JJ Jr. Shabadoo", "Joey"); //$NON-NLS-1$ //$NON-NLS-2$
person.setEyeColor(3);
newList.add(person);
person = new Person("Johnson", "Jack"); //$NON-NLS-1$ //$NON-NLS-2$
person.setEyeColor(2);
newList.add(person);
person = new Person("Johnson", "Jane"); //$NON-NLS-1$ //$NON-NLS-2$
person.setEyeColor(3);
newList.add(person);
person = new Person("Zappa", "Frank"); //$NON-NLS-1$ //$NON-NLS-2$
person.setEyeColor(2);
newList.add(person);
return newList;
}
}