package org.drugis.common.beans; import static org.easymock.EasyMock.createMock; import static org.easymock.EasyMock.replay; import static org.easymock.EasyMock.verify; import static org.junit.Assert.assertEquals; import java.util.Arrays; import javax.swing.event.ListDataEvent; import javax.swing.event.ListDataListener; import org.apache.commons.collections15.Predicate; import org.drugis.common.event.ListDataEventMatcher; import org.junit.Before; import org.junit.Test; import com.jgoodies.binding.list.ArrayListModel; import com.jgoodies.binding.list.ObservableList; public class GuardedObservableListTest { private GuardedObservableList<Integer> d_list; @Before public void setUp() { d_list = new GuardedObservableList<Integer>(new ArrayListModel<Integer>(), new Predicate<Number>() { public boolean evaluate(Number object) { return object.doubleValue() > 0.0; } }); d_list.addAll(Arrays.asList(5, 1, 2)); } @Test public void testInit() { assertEquals(Arrays.asList(5, 1, 2), d_list); } @Test public void testModifications() { d_list.add(7); assertEquals(Arrays.asList(5, 1, 2, 7), d_list); d_list.set(0, 2); assertEquals(Arrays.asList(2, 1, 2, 7), d_list); d_list.remove(0); assertEquals(Arrays.asList(1, 2, 7), d_list); } @Test(expected=IllegalArgumentException.class) public void testConstructionWithNonEmptyList() { ObservableList<Integer> list = new ArrayListModel<Integer>(); list.add(1); d_list = new GuardedObservableList<Integer>(list, new Predicate<Number>() { public boolean evaluate(Number object) { return object.doubleValue() > 0.0; } }); } @Test(expected=IllegalArgumentException.class) public void testAddBadValue() { d_list.add(-1); } @Test(expected=IllegalArgumentException.class) public void testSetBadValue() { d_list.set(1, -1); } @Test public void testEvents() { ListDataListener mockListener = createMock(ListDataListener.class); mockListener.intervalAdded(ListDataEventMatcher.eqListDataEvent(new ListDataEvent(d_list, ListDataEvent.INTERVAL_ADDED, 3, 3))); mockListener.contentsChanged(ListDataEventMatcher.eqListDataEvent(new ListDataEvent(d_list, ListDataEvent.CONTENTS_CHANGED, 2, 2))); mockListener.intervalRemoved(ListDataEventMatcher.eqListDataEvent(new ListDataEvent(d_list, ListDataEvent.INTERVAL_REMOVED, 0, 0))); replay(mockListener); d_list.addListDataListener(mockListener); d_list.add(7); d_list.set(2, 2); d_list.remove(0); verify(mockListener); } }