From f986519075ca0305bc1dc545894904b0de46ce6a Mon Sep 17 00:00:00 2001 From: Manuel Rego Casasnovas Date: Thu, 18 Nov 2010 16:27:26 +0100 Subject: [PATCH] [Bug #738] Added tests that make critical path fails. FEA: ItEr63S03BugFixing --- .../CriticalPathCalculatorTest.java | 213 ++++++++++++++++++ 1 file changed, 213 insertions(+) diff --git a/ganttzk/src/test/java/org/zkoss/ganttz/data/criticalpath/CriticalPathCalculatorTest.java b/ganttzk/src/test/java/org/zkoss/ganttz/data/criticalpath/CriticalPathCalculatorTest.java index 9e110d4a1..829ba2ef8 100644 --- a/ganttzk/src/test/java/org/zkoss/ganttz/data/criticalpath/CriticalPathCalculatorTest.java +++ b/ganttzk/src/test/java/org/zkoss/ganttz/data/criticalpath/CriticalPathCalculatorTest.java @@ -2119,6 +2119,192 @@ public class CriticalPathCalculatorTest { replay(diagramGraphExample); } + /** + *
+     * _- #### C1 #### -_
+     * |                |
+     * _- #### C2 #### -_
+     * |                |
+     * |- #### S2 #### -|
+     * 
+ */ + private void givenTaskContainerWithContainerWithSubtask(int daysSubtask1) { + diagramGraphExample = createNiceMock(ICriticalPathCalculable.class); + + ITaskFundamentalProperties taskContainer1 = createTask(START, + daysSubtask1); + ITaskFundamentalProperties taskContainer2 = createTask(START, + daysSubtask1); + ITaskFundamentalProperties subtask1 = createTask(START, daysSubtask1); + + List listOfTasks = Arrays.asList( + taskContainer1, taskContainer2, subtask1); + + expect(diagramGraphExample.getTasks()).andReturn(listOfTasks) + .anyTimes(); + expect(diagramGraphExample.getInitialTasks()).andReturn( + Arrays.asList(taskContainer1)).anyTimes(); + expect(diagramGraphExample.getLatestTasks()).andReturn( + Arrays.asList(taskContainer1)).anyTimes(); + + IDependency dependencyStartStart1 = createDependency( + taskContainer1, taskContainer2, DependencyType.START_START); + expect( + diagramGraphExample.getDependencyFrom(taskContainer1, + taskContainer2)).andReturn(dependencyStartStart1) + .anyTimes(); + IDependency dependencyEndEnd1 = createDependency( + taskContainer2, taskContainer1, DependencyType.END_END); + expect( + diagramGraphExample.getDependencyFrom(taskContainer2, + taskContainer1)).andReturn(dependencyEndEnd1).anyTimes(); + IDependency dependencyStartStart2 = createDependency( + taskContainer2, subtask1, DependencyType.START_START); + expect(diagramGraphExample.getDependencyFrom(taskContainer2, subtask1)) + .andReturn(dependencyStartStart2).anyTimes(); + IDependency dependencyEndEnd2 = createDependency( + subtask1, taskContainer2, DependencyType.END_END); + expect(diagramGraphExample.getDependencyFrom(subtask1, taskContainer2)) + .andReturn(dependencyEndEnd2).anyTimes(); + + expect(diagramGraphExample.getIncomingTasksFor(taskContainer1)) + .andReturn( + new HashSet(Arrays + .asList(taskContainer2))).anyTimes(); + expect(diagramGraphExample.getIncomingTasksFor(taskContainer2)) + .andReturn( + new HashSet(Arrays.asList( + taskContainer1, subtask1))).anyTimes(); + expect(diagramGraphExample.getIncomingTasksFor(subtask1)).andReturn( + new HashSet(Arrays + .asList(taskContainer2))).anyTimes(); + expect(diagramGraphExample.getOutgoingTasksFor(taskContainer1)) + .andReturn( + new HashSet(Arrays + .asList(taskContainer2))).anyTimes(); + expect(diagramGraphExample.getOutgoingTasksFor(taskContainer2)) + .andReturn( + new HashSet(Arrays.asList( + taskContainer1, subtask1))).anyTimes(); + expect(diagramGraphExample.getOutgoingTasksFor(subtask1)).andReturn( + new HashSet(Arrays + .asList(taskContainer2))).anyTimes(); + + expect(diagramGraphExample.isContainer(taskContainer1)).andReturn(true) + .anyTimes(); + expect(diagramGraphExample.getChildren(taskContainer1)).andReturn( + Arrays.asList(taskContainer2)).anyTimes(); + expect(diagramGraphExample.contains(taskContainer1, taskContainer2)) + .andReturn(true).anyTimes(); + expect(diagramGraphExample.isContainer(taskContainer2)).andReturn(true) + .anyTimes(); + expect(diagramGraphExample.getChildren(taskContainer2)).andReturn( + Arrays.asList(subtask1)).anyTimes(); + expect(diagramGraphExample.contains(taskContainer2, subtask1)) + .andReturn(true).anyTimes(); + + addTaskMethods(listOfTasks); + + replay(diagramGraphExample); + } + + /** + *
+     * #### T1 ####---_- #### C1 #### -_
+     *                |                |
+     *                _- #### C2 #### -_
+     *                |                |
+     *                |- #### S2 #### -|
+     * 
+ */ + private void givenExampleContainersWithContainers(int daysTask1, + int daysSubtask1) { + diagramGraphExample = createNiceMock(ICriticalPathCalculable.class); + + ITaskFundamentalProperties task1 = createTask(START, daysTask1); + ITaskFundamentalProperties taskContainer1 = createTask(START, + daysSubtask1); + ITaskFundamentalProperties taskContainer2 = createTask(START, + daysSubtask1); + ITaskFundamentalProperties subtask1 = createTask(START, daysSubtask1); + + List listOfTasks = Arrays.asList(task1, + taskContainer1, taskContainer2, subtask1); + + expect(diagramGraphExample.getTasks()).andReturn(listOfTasks) + .anyTimes(); + expect(diagramGraphExample.getInitialTasks()).andReturn( + Arrays.asList(task1)).anyTimes(); + expect(diagramGraphExample.getLatestTasks()).andReturn( + Arrays.asList(taskContainer1)).anyTimes(); + + IDependency dependencyStartStart1 = createDependency( + taskContainer1, taskContainer2, DependencyType.START_START); + expect( + diagramGraphExample.getDependencyFrom(taskContainer1, + taskContainer2)).andReturn(dependencyStartStart1) + .anyTimes(); + IDependency dependencyEndEnd1 = createDependency( + taskContainer2, taskContainer1, DependencyType.END_END); + expect( + diagramGraphExample.getDependencyFrom(taskContainer2, + taskContainer1)).andReturn(dependencyEndEnd1) + .anyTimes(); + IDependency dependencyStartStart2 = createDependency( + taskContainer2, subtask1, DependencyType.START_START); + expect(diagramGraphExample.getDependencyFrom(taskContainer2, subtask1)) + .andReturn(dependencyStartStart2).anyTimes(); + IDependency dependencyEndEnd2 = createDependency( + subtask1, taskContainer2, DependencyType.END_END); + expect(diagramGraphExample.getDependencyFrom(subtask1, taskContainer2)) + .andReturn(dependencyEndEnd2).anyTimes(); + + expect(diagramGraphExample.getIncomingTasksFor(task1)).andReturn( + new HashSet()).anyTimes(); + expect(diagramGraphExample.getIncomingTasksFor(taskContainer1)) + .andReturn( + new HashSet(Arrays.asList( + task1, taskContainer2))).anyTimes(); + expect(diagramGraphExample.getIncomingTasksFor(taskContainer2)) + .andReturn( + new HashSet(Arrays.asList( + taskContainer1, subtask1))).anyTimes(); + expect(diagramGraphExample.getIncomingTasksFor(subtask1)).andReturn( + new HashSet(Arrays + .asList(taskContainer2))).anyTimes(); + expect(diagramGraphExample.getOutgoingTasksFor(task1)).andReturn( + new HashSet(Arrays + .asList(taskContainer1))).anyTimes(); + expect(diagramGraphExample.getOutgoingTasksFor(taskContainer1)) + .andReturn( + new HashSet(Arrays + .asList(taskContainer2))).anyTimes(); + expect(diagramGraphExample.getOutgoingTasksFor(taskContainer2)) + .andReturn( + new HashSet(Arrays.asList( + taskContainer1, subtask1))).anyTimes(); + expect(diagramGraphExample.getOutgoingTasksFor(subtask1)).andReturn( + new HashSet(Arrays + .asList(taskContainer2))).anyTimes(); + + expect(diagramGraphExample.isContainer(taskContainer1)).andReturn(true) + .anyTimes(); + expect(diagramGraphExample.getChildren(taskContainer1)).andReturn( + Arrays.asList(taskContainer2)).anyTimes(); + expect(diagramGraphExample.contains(taskContainer1, taskContainer2)) + .andReturn(true).anyTimes(); + expect(diagramGraphExample.isContainer(taskContainer2)).andReturn(true) + .anyTimes(); + expect(diagramGraphExample.getChildren(taskContainer2)).andReturn( + Arrays.asList(subtask1)).anyTimes(); + expect(diagramGraphExample.contains(taskContainer2, subtask1)) + .andReturn(true).anyTimes(); + + addTaskMethods(listOfTasks); + + replay(diagramGraphExample); + } + @Test public void trivialBaseCaseWithTwoTasksNotConnected() { givenTwoTasksNotConnected(5, 10); @@ -2816,4 +3002,31 @@ public class CriticalPathCalculatorTest { } } + @Test + public void taskContainerWithContainerWithSubtask() { + givenTaskContainerWithContainerWithSubtask(10); + List criticalPath = buildCalculator() + .calculateCriticalPath(diagramGraphExample); + + assertThat(criticalPath.size(), equalTo(1)); + for (ITaskFundamentalProperties task : criticalPath) { + assertThat(daysBetweenStartAndEnd(task), equalTo(10)); + assertFalse(diagramGraphExample.isContainer(task)); + } + } + + @Test + public void exampleContainersWithContainers() { + givenExampleContainersWithContainers(10, 5); + List criticalPath = buildCalculator() + .calculateCriticalPath(diagramGraphExample); + + assertThat(criticalPath.size(), equalTo(2)); + for (ITaskFundamentalProperties task : criticalPath) { + assertThat(daysBetweenStartAndEnd(task), anyOf(equalTo(10), + equalTo(5))); + assertFalse(diagramGraphExample.isContainer(task)); + } + } + }