/* GanttProject is an opensource project management tool. Copyright (C) 2011 GanttProject Team 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 2 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package net.sourceforge.ganttproject.test.task.dependency; import net.sourceforge.ganttproject.TestSetupHelper; import net.sourceforge.ganttproject.task.Task; import net.sourceforge.ganttproject.task.TaskManager; import net.sourceforge.ganttproject.task.dependency.constraint.FinishStartConstraintImpl; import net.sourceforge.ganttproject.test.task.TaskTestCase; import biz.ganttproject.core.time.CalendarFactory; public class TestSupertaskAdjustment extends TaskTestCase { public void testSupetaskDurationGrowsWhenNestedTasksGrow() throws Exception { TaskManager taskManager = getTaskManager(); Task supertask = taskManager.createTask(); Task task1 = taskManager.createTask(); Task task2 = taskManager.createTask(); task1.move(supertask); task2.move(supertask); task1.setStart(CalendarFactory.createGanttCalendar(2000, 01, 01)); task1.setEnd(CalendarFactory.createGanttCalendar(2000, 01, 03)); task2.setStart(CalendarFactory.createGanttCalendar(2000, 01, 03)); task2.setEnd(CalendarFactory.createGanttCalendar(2000, 01, 04)); supertask.setStart(CalendarFactory.createGanttCalendar(2000, 01, 01)); supertask.setEnd(CalendarFactory.createGanttCalendar(2000, 01, 04)); taskManager.getDependencyCollection().createDependency( task2, task1, new FinishStartConstraintImpl()); task1.setEnd(CalendarFactory.createGanttCalendar(2000, 01, 04)); taskManager.getAlgorithmCollection().getScheduler().run(); assertEquals("Unexpected start of supertask=" + supertask, CalendarFactory.createGanttCalendar(2000, 01, 01), supertask.getStart()); assertEquals("Unexpected end of supertask=" + supertask, CalendarFactory.createGanttCalendar(2000, 01, 05), supertask.getEnd()); } public void testSupertaskDurationShrinksWhenNestedTasksShrink() throws Exception { TaskManager taskManager = getTaskManager(); Task supertask = taskManager.createTask(); Task task1 = taskManager.createTask(); Task task2 = taskManager.createTask(); task1.move(supertask); task2.move(supertask); task1.setStart(CalendarFactory.createGanttCalendar(2000, 01, 01)); task1.setEnd(CalendarFactory.createGanttCalendar(2000, 01, 03)); task2.setStart(CalendarFactory.createGanttCalendar(2000, 01, 03)); task2.setEnd(CalendarFactory.createGanttCalendar(2000, 01, 04)); supertask.setStart(CalendarFactory.createGanttCalendar(2000, 01, 01)); supertask.setEnd(CalendarFactory.createGanttCalendar(2000, 01, 04)); task1.setStart(CalendarFactory.createGanttCalendar(2000, 01, 02)); task2.setStart(CalendarFactory.createGanttCalendar(2000, 01, 02)); task2.setEnd(CalendarFactory.createGanttCalendar(2000, 01, 03)); taskManager.getAlgorithmCollection().getScheduler().run(); assertEquals("Unexpected start of supertask=" + supertask, CalendarFactory.createGanttCalendar(2000, 01, 02), supertask.getStart()); assertEquals("Unexpected end of supertask=" + supertask, CalendarFactory.createGanttCalendar(2000, 01, 03), supertask.getEnd()); } public void testTaskDurationChangeIsPropagatedTwoLevelsUp() throws Exception { TaskManager taskManager = getTaskManager(); Task supertask = taskManager.createTask(); supertask.move(taskManager.getRootTask()); Task level1task1 = taskManager.createTask(); level1task1.move(supertask); Task level1task2 = taskManager.createTask(); level1task2.move(supertask); Task level2task1 = taskManager.createTask(); level2task1.move(level1task2); supertask.setStart(TestSetupHelper.newMonday()); supertask.setEnd(TestSetupHelper.newTuesday()); level1task1.setStart(TestSetupHelper.newMonday()); level1task1.setEnd(TestSetupHelper.newTuesday()); level1task2.setStart(TestSetupHelper.newMonday()); level1task2.setEnd(TestSetupHelper.newTuesday()); level2task1.setStart(TestSetupHelper.newMonday()); level2task1.setEnd(TestSetupHelper.newTuesday()); level2task1.setEnd(TestSetupHelper.newWendesday()); taskManager.getAlgorithmCollection().getScheduler().run(); assertEquals("Unexpected end of the topleveltask="+supertask, TestSetupHelper.newWendesday(), supertask.getEnd()); } }