/* * This file is part of ADDIS (Aggregate Data Drug Information System). * ADDIS is distributed from http://drugis.org/. * Copyright © 2009 Gert van Valkenhoef, Tommi Tervonen. * Copyright © 2010 Gert van Valkenhoef, Tommi Tervonen, Tijs Zwinkels, * Maarten Jacobs, Hanno Koeslag, Florin Schimbinschi, Ahmad Kamal, Daniel * Reid. * Copyright © 2011 Gert van Valkenhoef, Ahmad Kamal, Daniel Reid, Florin * Schimbinschi. * Copyright © 2012 Gert van Valkenhoef, Daniel Reid, Joël Kuiper, Wouter * Reckman. * Copyright © 2013 Gert van Valkenhoef, Joël Kuiper. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.drugis.addis.presentation.wizard; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.List; import javax.swing.event.ListDataEvent; import javax.swing.event.ListDataListener; import junit.framework.Assert; import org.drugis.addis.presentation.ModifiableHolder; import org.drugis.common.event.ListDataEventMatcher; import org.easymock.EasyMock; import org.junit.Before; import org.junit.Test; import com.jgoodies.binding.list.ObservableList; public class SelectableOptionsModelTest { private SelectableOptionsModel<String> d_model; @Before public void setUp() { d_model = new SelectableOptionsModel<String>(); } @Test public void testAddOptionDefaultValue() { assertEquals(true, d_model.addOption("Geitenkaas", true).getValue()); assertEquals(false, d_model.addOption("Bladerdeeg", false).getValue()); } @Test public void testAddOptionsDefaultValue() { List<ModifiableHolder<Boolean>> holders = d_model.addOptions(Arrays.asList("Geitenkaas", "Bladerdeeg"), true); assertEquals(2, holders.size()); assertEquals(true, holders.get(0).getValue()); assertEquals(true, holders.get(1).getValue()); } @Test public void testSelectedOptions() { assertEquals(Collections.emptySet(), new HashSet<String>(d_model.getSelectedOptions())); List<String> optionsYes = new ArrayList<String>(Arrays.asList("Geitenkaas", "Bladerdeeg")); d_model.addOptions(optionsYes, true); Collections.sort(optionsYes); assertEquals(optionsYes, d_model.getSelectedOptions()); d_model.addOption("Zongedroogde tomaat", false); assertEquals(optionsYes, d_model.getSelectedOptions()); d_model.addOption("Bier", true); optionsYes.add(0, "Bier"); assertEquals(optionsYes, d_model.getSelectedOptions()); } @Test public void testSelectedOptionsEvents() { ObservableList<String> list = d_model.getSelectedOptions(); ListDataListener mock = EasyMock.createStrictMock(ListDataListener.class); EasyMock.replay(mock); list.addListDataListener(mock); ModifiableHolder<Boolean> bladerdeeg = d_model.addOption("Bladerdeeg", false); EasyMock.verify(mock); list.removeListDataListener(mock); ListDataListener mock2 = EasyMock.createStrictMock(ListDataListener.class); mock2.intervalAdded(ListDataEventMatcher.eqListDataEvent( new ListDataEvent(list, ListDataEvent.INTERVAL_ADDED, 0, 0))); EasyMock.replay(mock2); list.addListDataListener(mock2); bladerdeeg.setValue(true); EasyMock.verify(mock2); list.removeListDataListener(mock2); ModifiableHolder<Boolean> ei = d_model.addOption("Ei", true); ModifiableHolder<Boolean> courgette = d_model.addOption("Courgette", true); ListDataListener mock3 = EasyMock.createStrictMock(ListDataListener.class); mock3.intervalRemoved(ListDataEventMatcher.eqListDataEvent( new ListDataEvent(list, ListDataEvent.INTERVAL_REMOVED, 1, 1))); mock3.intervalRemoved(ListDataEventMatcher.eqListDataEvent( new ListDataEvent(list, ListDataEvent.INTERVAL_REMOVED, 1, 1))); EasyMock.replay(mock3); list.addListDataListener(mock3); courgette.setValue(false); ei.setValue(false); EasyMock.verify(mock3); list.removeListDataListener(mock3); } @Test public void testClear() { d_model.addOption("Bladerdeeg", false); d_model.addOption("Geitenkaas", true); d_model.addOption("Komijn", false); d_model.addOption("Makreel", true); final ModifiableHolder<Integer> count = new ModifiableHolder<Integer>(0); ObservableList<String> list = d_model.getSelectedOptions(); ListDataListener counter = new ListDataListener() { @Override public void intervalRemoved(ListDataEvent e) { count.setValue(count.getValue() + (e.getIndex1() - e.getIndex0()) + 1); } @Override public void intervalAdded(ListDataEvent e) { Assert.fail("Expected INTERVAL_REMOVED, but got " + e); } @Override public void contentsChanged(ListDataEvent e) { Assert.fail("Expected INTERVAL_REMOVED, but got " + e); } }; list.addListDataListener(counter); d_model.clear(); list.removeListDataListener(counter); assertEquals(new Integer(2), count.getValue()); assertEquals(Collections.emptyList(), d_model.getSelectedOptions()); } @Test public void testGet() { ModifiableHolder<Boolean> bladerdeeg = d_model.addOption("Bladerdeeg", false); ModifiableHolder<Boolean> geitekaas = d_model.addOption("Geitenkaas", true); assertSame(bladerdeeg, d_model.getSelectedModel("Bladerdeeg")); assertNull(d_model.getSelectedModel("DITBESTAATTOCHNIET")); assertSame(geitekaas, d_model.getSelectedModel("Geitenkaas")); } @Test public void testSelectionsChangeList() { ModifiableHolder<Boolean> bdeeg = d_model.addOption("Bladerdeeg", false); ModifiableHolder<Boolean> gkaas = d_model.addOption("Geitenkaas", false); d_model.addOption("Komijn", false); d_model.addOption("Makreel", false); assertEquals(Collections.emptyList(), d_model.getSelectedOptions()); bdeeg.setValue(true); gkaas.setValue(true); assertEquals(Arrays.asList("Bladerdeeg", "Geitenkaas"), d_model.getSelectedOptions()); bdeeg.setValue(false); assertEquals(Arrays.asList("Geitenkaas"), d_model.getSelectedOptions()); } }