/* * 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; import static org.easymock.EasyMock.verify; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.beans.PropertyChangeListener; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import org.drugis.addis.entities.AdverseEvent; import org.drugis.addis.entities.Epoch; import org.drugis.addis.entities.Study; import org.drugis.addis.entities.StudyOutcomeMeasure; import org.drugis.addis.entities.Variable; import org.drugis.addis.presentation.wizard.AddEpochsPresentation; import org.drugis.addis.presentation.wizard.WhenTakenFactory; import org.drugis.addis.util.EntityUtil; import org.drugis.common.JUnitUtil; import org.drugis.common.beans.SortedSetModel; import org.junit.Before; import org.junit.Test; public class SelectVariablesPresentationTest { private static final String TYPENAME = "Adverse Event"; private static final String DESCRIPTION = "Please select the appropriate adverse events."; private static final String TITLE = "Select Adverse Events"; private AdverseEvent d_ade1 = new AdverseEvent("ADE 1", AdverseEvent.convertVarType(Variable.Type.RATE)); private AdverseEvent d_ade2 = new AdverseEvent("ADE 2", AdverseEvent.convertVarType(Variable.Type.RATE)); private AdverseEvent d_ade3 = new AdverseEvent("ADE 3", AdverseEvent.convertVarType(Variable.Type.RATE)); private SortedSetModel<AdverseEvent> d_list; private SelectAdverseEventsPresentation d_pm; @Before public void setUp() { d_list = new SortedSetModel<AdverseEvent>(Arrays.asList(d_ade1, d_ade2)); Study study = new Study(); AddEpochsPresentation aep = new AddEpochsPresentation(study, "epoch", 1); aep.getList().add(new Epoch("test", EntityUtil.createDuration("P3D"))); WhenTakenFactory wtf = new WhenTakenFactory(study); d_pm = new SelectAdverseEventsPresentation(d_list, wtf, null); } @Test public void testGetTypeName() { assertEquals(TYPENAME, d_pm.getTypeName()); } @Test public void testHasAddOptionDialog() { assertTrue(d_pm.hasAddOptionDialog()); } @Test public void testGetTitle() { assertEquals(TITLE, d_pm.getTitle()); assertEquals(DESCRIPTION, d_pm.getDescription()); } @Test public void testGetOptions() { assertEquals(d_list, d_pm.getOptions()); d_list.add(d_ade3); assertEquals(d_list, d_pm.getOptions()); } @Test public void testAddSlot() { assertEquals(0, d_pm.countSlots()); d_pm.addSlot(); assertEquals(1, d_pm.countSlots()); } @Test public void testGetSlot() { d_pm.addSlot(); d_pm.getSlot(0).setValue(d_ade2); assertEquals(d_ade2, d_pm.getSlot(0).getValue()); } @Test public void testRemoveSlot() { d_pm.addSlot(); assertEquals(1, d_pm.countSlots()); d_pm.removeSlot(0); assertEquals(0, d_pm.countSlots()); d_pm.addSlot(); d_pm.getSlot(0).setValue(d_ade1); d_pm.addSlot(); d_pm.getSlot(1).setValue(d_ade2); d_pm.removeSlot(0); assertEquals(d_pm.getSlot(0).getValue(), d_ade2); } @Test public void testAddSlotsEnabledModel() { assertEquals(d_pm.getAddSlotsEnabledModel().getValue(), Boolean.TRUE); d_pm.addSlot(); d_pm.addSlot(); assertEquals(d_pm.getAddSlotsEnabledModel().getValue(), Boolean.TRUE); d_pm.addSlot(); assertEquals(d_pm.getAddSlotsEnabledModel().getValue(), Boolean.TRUE); } @Test public void testInputCompleteModel() { assertEquals(Boolean.TRUE, d_pm.getInputCompleteModel().getValue()); PropertyChangeListener mock = JUnitUtil.mockListener(d_pm.getInputCompleteModel(), "value", Boolean.TRUE, Boolean.FALSE); d_pm.getInputCompleteModel().addValueChangeListener(mock); d_pm.addSlot(); assertEquals(Boolean.FALSE, d_pm.getInputCompleteModel().getValue()); verify(mock); mock = JUnitUtil.mockListener(d_pm.getInputCompleteModel(), "value", Boolean.FALSE, Boolean.TRUE); d_pm.getInputCompleteModel().addValueChangeListener(mock); assertEquals(Boolean.FALSE, d_pm.getInputCompleteModel().getValue()); d_pm.getSlot(0).setValue(d_ade2); assertEquals(Boolean.TRUE, d_pm.getInputCompleteModel().getValue()); verify(mock); } @Test public void testInputCompleteModelAfterSetSlots() { assertEquals(Boolean.TRUE, d_pm.getInputCompleteModel().getValue()); PropertyChangeListener mock = JUnitUtil.mockListener(d_pm.getInputCompleteModel(), "value", Boolean.TRUE, Boolean.FALSE); d_pm.getInputCompleteModel().addValueChangeListener(mock); ArrayList<StudyOutcomeMeasure<AdverseEvent>> slots = new ArrayList<StudyOutcomeMeasure<AdverseEvent>>(); slots.add(new StudyOutcomeMeasure<AdverseEvent>(AdverseEvent.class)); d_pm.setSlots(slots); assertEquals(Boolean.FALSE, d_pm.getInputCompleteModel().getValue()); verify(mock); } @Test public void testSetSlotsModifiesUnderlyingList() { ArrayList<StudyOutcomeMeasure<AdverseEvent>> list = new ArrayList<StudyOutcomeMeasure<AdverseEvent>>(); d_pm.setSlots(list); d_pm.addSlot(); assertEquals(Collections.singletonList(new StudyOutcomeMeasure<AdverseEvent>(AdverseEvent.class)), list); } @Test public void testSelectSameValueTwiceRemovesFromFirst() { d_pm.addSlot(); d_pm.addSlot(); d_pm.getSlot(1).setValue(d_ade1); assertEquals(d_ade1, d_pm.getSlot(1).getValue()); assertFalse(d_pm.getSlot(1).hasPlaceholder()); assertTrue(d_pm.getSlot(0).hasPlaceholder()); d_pm.getSlot(0).setValue(d_ade1); assertEquals(d_ade1, d_pm.getSlot(0).getValue()); assertFalse(d_pm.getSlot(0).hasPlaceholder()); assertTrue(d_pm.getSlot(1).hasPlaceholder()); } }