/* * 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.entities; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotSame; import static org.junit.Assert.assertTrue; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import javax.xml.datatype.DatatypeConfigurationException; import javax.xml.datatype.DatatypeFactory; import org.drugis.addis.entities.StudyActivity.UsedBy; import org.drugis.common.JUnitUtil; import org.junit.Before; import org.junit.Test; public class StudyActivityTest { private StudyActivity d_undefined; private StudyActivity d_randomization; private String d_rndTitle; private PredefinedActivity d_rndActivity; private Arm d_arm; private Epoch d_epoch; private StudyActivity d_main; private Drug d_fluoxetine; @Before public void setUp() throws DatatypeConfigurationException { d_undefined = new StudyActivity(null, null); d_rndTitle = "Randomization"; d_rndActivity = PredefinedActivity.RANDOMIZATION; d_randomization = new StudyActivity(d_rndTitle, d_rndActivity); d_epoch = new Epoch("Main phase", DatatypeFactory.newInstance().newDuration("PT5H")); d_arm = new Arm("Group", 12); d_fluoxetine = new Drug("Fluoxetine", null); Activity treatment = new TreatmentActivity(new DrugTreatment(d_fluoxetine, new FixedDose(10.0, DoseUnit.createMilliGramsPerDay()))); d_main = new StudyActivity("treatment", treatment); } @Test public void testConstruction() { assertEquals(null, d_undefined.getName()); assertEquals(null, d_undefined.getActivity()); assertEquals(d_rndTitle, d_randomization.getName()); assertEquals(d_rndActivity, d_randomization.getActivity()); assertEquals(Collections.emptyList(), d_randomization.getNotes()); assertEquals(Collections.emptySet(), d_randomization.getUsedBy()); } @Test public void testSetName() { JUnitUtil.testSetter(d_undefined, StudyActivity.PROPERTY_NAME, null, "Screening"); } @Test public void testSetActivity() { JUnitUtil.testSetter(d_randomization, StudyActivity.PROPERTY_ACTIVITY, d_rndActivity, PredefinedActivity.SCREENING); } @Test public void testUsedByEquals() throws DatatypeConfigurationException { Epoch e = new Epoch("Randomization",DatatypeFactory.newInstance().newDuration("PT2H")); UsedBy ub = new UsedBy(d_arm, d_epoch); UsedBy ub2 = new UsedBy(d_arm, d_epoch); UsedBy ub3 = new UsedBy(d_arm, e); UsedBy ub4 = new UsedBy(new Arm("New Group", 8), e); assertEquals(ub, ub2); JUnitUtil.assertNotEquals(ub, ub3); JUnitUtil.assertNotEquals(ub3, ub4); assertEquals(ub.hashCode(), ub2.hashCode()); } @Test public void testEquals() { // equality is defined on the NAME field. JUnitUtil.assertNotEquals(d_undefined, d_randomization); d_undefined.setName(d_rndTitle); assertEquals(d_undefined, d_randomization); assertEquals(d_undefined.hashCode(), d_randomization.hashCode()); // deep equality is defined by equality of the object graph assertTrue(d_randomization.deepEquals(d_randomization)); assertFalse(d_undefined.deepEquals(d_randomization)); d_undefined.setActivity(d_rndActivity); assertTrue(d_randomization.deepEquals(d_randomization)); d_undefined.setUsedBy(Collections.singleton(new UsedBy(d_arm, d_epoch))); assertFalse(d_undefined.deepEquals(d_randomization)); d_undefined.setUsedBy(Collections.<UsedBy>emptySet()); d_undefined.getNotes().add(new Note()); assertFalse(d_undefined.deepEquals(d_randomization)); } @Test public void testDependencies() { assertEquals(Collections.emptySet(), d_randomization.getDependencies()); assertEquals(new HashSet<Entity>(Arrays.asList(d_fluoxetine, DoseUnit.createMilliGramsPerDay().getUnit())), d_main.getDependencies()); } @Test public void testSetUsedBy() { UsedBy ub = new UsedBy(d_arm, d_epoch); JUnitUtil.testSetter(d_randomization, StudyActivity.PROPERTY_USED_BY, Collections.emptySet(), Collections.singleton(ub)); } @Test public void testNotes() { assertEquals(Collections.emptyList(), d_randomization.getNotes()); Note n = new Note(Source.MANUAL, "Zis is a note"); d_randomization.getNotes().add(n); assertEquals(Collections.singletonList(n), d_randomization.getNotes()); } @Test public void testClone() { assertTrue(d_main.deepEquals(d_main.clone())); assertNotSame(d_main, d_main.clone()); assertNotSame(d_main.getActivity(), d_main.clone().getActivity()); assertNotSame(d_main.getUsedBy(), d_main.clone().getUsedBy()); assertEquals(Collections.emptyList(), d_main.getNotes()); assertNotSame(d_main.getNotes(), d_main.clone().getNotes()); d_main.getNotes().add(new Note()); assertTrue(d_main.deepEquals(d_main.clone())); } @Test public void testIsComplete() { assertFalse(d_undefined.isComplete()); assertTrue(d_randomization.isComplete()); assertTrue(d_main.isComplete()); d_main.setActivity(new TreatmentActivity(new DrugTreatment(null, new FixedDose(10.0, DoseUnit.createMilliGramsPerDay())))); assertFalse(d_main.isComplete()); d_main.setActivity(new TreatmentActivity(new DrugTreatment(d_fluoxetine, null))); assertFalse(d_main.isComplete()); } }