package org.drugis.common.validation; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import org.drugis.common.JUnitUtil; import org.easymock.EasyMock; import org.junit.Test; import com.jgoodies.binding.list.ArrayListModel; import com.jgoodies.binding.list.ObservableList; import com.jgoodies.binding.value.ValueHolder; public class ListItemsUniqueModelTest { @Test public void testValidation() { ObservableList<ValueHolder> list = new ArrayListModel<ValueHolder>(); list.add(new ValueHolder("A")); list.add(new ValueHolder("B")); ListItemsUniqueModel<ValueHolder> unique = new ListItemsUniqueModel<ValueHolder>(list, ValueHolder.class, "value"); assertTrue((Boolean)unique.getValue()); ValueHolder v = new ValueHolder("A"); list.add(v); assertFalse((Boolean)unique.getValue()); v.setValue("C"); assertTrue((Boolean)unique.getValue()); } @Test public void testEventsOnAddRemove() { ObservableList<ValueHolder> list = new ArrayListModel<ValueHolder>(); list.add(new ValueHolder("A")); ListItemsUniqueModel<ValueHolder> unique = new ListItemsUniqueModel<ValueHolder>(list, ValueHolder.class, "value"); PropertyChangeListener listener = EasyMock.createStrictMock(PropertyChangeListener.class); listener.propertyChange(JUnitUtil.eqPropertyChangeEvent( new PropertyChangeEvent(unique, "value", true, false))); listener.propertyChange(JUnitUtil.eqPropertyChangeEvent( new PropertyChangeEvent(unique, "value", false, true))); EasyMock.replay(listener); unique.addPropertyChangeListener(listener); list.add(new ValueHolder("B")); list.add(new ValueHolder("A")); list.remove(0); EasyMock.verify(listener); } @Test public void testEventsOnPropertyChange() { ObservableList<ValueHolder> list = new ArrayListModel<ValueHolder>(); ValueHolder v1 = new ValueHolder("A"); list.add(v1); ValueHolder v2 = new ValueHolder("B"); list.add(v2); ListItemsUniqueModel<ValueHolder> unique = new ListItemsUniqueModel<ValueHolder>(list, ValueHolder.class, "value"); PropertyChangeListener listener = EasyMock.createStrictMock(PropertyChangeListener.class); listener.propertyChange(JUnitUtil.eqPropertyChangeEvent( new PropertyChangeEvent(unique, "value", true, false))); listener.propertyChange(JUnitUtil.eqPropertyChangeEvent( new PropertyChangeEvent(unique, "value", false, true))); EasyMock.replay(listener); unique.addPropertyChangeListener(listener); v1.setValue("B"); v1.setValue("Bar"); EasyMock.verify(listener); } }