package org.drugis.common.beans; import java.beans.PropertyChangeListener; import org.drugis.common.JUnitUtil; import org.easymock.EasyMock; import org.junit.Before; import org.junit.Test; import com.jgoodies.binding.list.ArrayListModel; import com.jgoodies.binding.list.ObservableList; public class ListPropertyChangeProxyTest { private ObservableList<MyBean> d_list; private MyBean d_bean0; private MyBean d_bean1; private MyBean d_bean3; @Before public void setUp() { d_list = new ArrayListModel<MyBean>(); d_bean0 = new MyBean("before"); d_bean1 = new MyBean("before1"); d_bean3 = new MyBean("before3"); d_list.add(d_bean0); d_list.add(d_bean1); d_list.add(d_bean3); } /** * Simply test whether a listener has been attached to list elements at initialization. */ @Test public void testProxy() { PropertyChangeListener listener = JUnitUtil.mockStrictListener(d_bean0, MyBean.PROPERTY_NAME, "before", "after"); new ListPropertyChangeProxy<MyBean>(d_list, listener); d_list.get(0).setName("after"); EasyMock.verify(listener); } /** * Test that listeners are added to elements that are added after list initialization. */ @Test public void testAdd() { MyBean bean2 = new MyBean("before2"); PropertyChangeListener listener = JUnitUtil.mockStrictListener(bean2, MyBean.PROPERTY_NAME, "before2", "after2"); new ListPropertyChangeProxy<MyBean>(d_list, listener); d_list.add(2, bean2); bean2.setName("after2"); EasyMock.verify(listener); } /** * Test that listeners are removed from elements that are removed from the list. */ @Test public void testRemove() { PropertyChangeListener listener = JUnitUtil.mockStrictListener(d_bean3, MyBean.PROPERTY_NAME, "before3", "after3"); new ListPropertyChangeProxy<MyBean>(d_list, listener); d_list.remove(1); d_bean1.setName("after1"); d_bean3.setName("after3"); } /** * Test that replacing elements in the list adds/removes listeners correctly. */ @Test public void testChange() { MyBean bean2 = new MyBean("before2"); PropertyChangeListener listener = JUnitUtil.mockStrictListener(bean2, MyBean.PROPERTY_NAME, "before2", "after2"); new ListPropertyChangeProxy<MyBean>(d_list, listener); d_list.set(1, bean2); bean2.setName("after2"); d_bean1.setName("after1"); EasyMock.verify(listener); } }