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 6824bdbc4..c3832603f 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 @@ -3037,14 +3037,14 @@ public class CriticalPathCalculatorTest { * */ private void givenPairOfTasksWithDependencyFirstWithBiggerConstraintAndSecondWithEqualConstraint( - int daysTask1, LocalDate dateConstraintTask1, int daysTask2, - LocalDate dateConstraintTask2) { + int daysTask1, LocalDate dateBiggerOrEqualConstraintTask1, + int daysTask2, LocalDate dateEqualConstraintTask2) { diagramGraphExample = createNiceMock(ICriticalPathCalculable.class); ITaskFundamentalProperties task1 = createTaskWithBiggerOrEqualThanConstraint( - START, daysTask1, dateConstraintTask1); + START, daysTask1, dateBiggerOrEqualConstraintTask1); ITaskFundamentalProperties task2 = createTaskWithEqualConstraint(START, - daysTask2, dateConstraintTask2); + daysTask2, dateEqualConstraintTask2); List listOfTasks = Arrays.asList(task1, task2); @@ -3115,4 +3115,92 @@ public class CriticalPathCalculatorTest { assertThat(daysBetweenStartAndEnd(criticalPath.get(0)), equalTo(4)); } + /** + *
+     * #### T1 ####
+     *       |---- #### T2 ####
+     * 
+ */ + private void givenPairOfTasksWithDependencyBothWithEqualConstraint( + int daysTask1, LocalDate dateEqualConstraintTask1, int daysTask2, + LocalDate dateEqualConstraintTask2) { + diagramGraphExample = createNiceMock(ICriticalPathCalculable.class); + + ITaskFundamentalProperties task1 = createTaskWithEqualConstraint( + START, daysTask1, dateEqualConstraintTask1); + ITaskFundamentalProperties task2 = createTaskWithEqualConstraint(START, + daysTask2, dateEqualConstraintTask2); + + List listOfTasks = Arrays.asList(task1, + task2); + + expect(diagramGraphExample.getTasks()).andReturn(listOfTasks) + .anyTimes(); + expect(diagramGraphExample.getInitialTasks()).andReturn( + Arrays.asList(task1)).anyTimes(); + expect(diagramGraphExample.getLatestTasks()).andReturn( + Arrays.asList(task2)).anyTimes(); + expect( + diagramGraphExample.getDependencyFrom( + isA(ITaskFundamentalProperties.class), + isA(ITaskFundamentalProperties.class))).andReturn(null) + .anyTimes(); + expect(diagramGraphExample.getIncomingTasksFor(task1)).andReturn( + new HashSet()).anyTimes(); + expect(diagramGraphExample.getIncomingTasksFor(task2)).andReturn( + new HashSet(Arrays.asList(task1))) + .anyTimes(); + expect(diagramGraphExample.getOutgoingTasksFor(task1)).andReturn( + new HashSet(Arrays.asList(task2))) + .anyTimes(); + expect(diagramGraphExample.getOutgoingTasksFor(task2)).andReturn( + new HashSet()).anyTimes(); + + addTaskMethods(listOfTasks); + + replay(diagramGraphExample); + } + + @Test + public void examplePairOfTasksWithDependencyBothWithEqualConstraint1() { + givenPairOfTasksWithDependencyBothWithEqualConstraint( + 6, START.plusDays(2), 4, START); + List criticalPath = buildCalculator() + .calculateCriticalPath(diagramGraphExample); + + assertThat(criticalPath.size(), equalTo(2)); + for (ITaskFundamentalProperties task : criticalPath) { + assertThat(daysBetweenStartAndEnd(task), anyOf(equalTo(6), + equalTo(4))); + } + } + + @Test + public void examplePairOfTasksWithDependencyBothWithEqualConstraint2() { + givenPairOfTasksWithDependencyBothWithEqualConstraint( + 6, START, 4, START.plusDays(5)); + List criticalPath = buildCalculator() + .calculateCriticalPath(diagramGraphExample); + + assertThat(criticalPath.size(), equalTo(2)); + for (ITaskFundamentalProperties task : criticalPath) { + assertThat(daysBetweenStartAndEnd(task), anyOf(equalTo(6), + equalTo(4))); + } + } + + @Test + public void examplePairOfTasksWithDependencyBothWithEqualConstraint3() { + givenPairOfTasksWithDependencyBothWithEqualConstraint( + 6, START, 4, START.plusDays(10)); + List criticalPath = buildCalculator() + .calculateCriticalPath(diagramGraphExample); + + assertThat(criticalPath.size(), equalTo(2)); + for (ITaskFundamentalProperties task : criticalPath) { + assertThat(daysBetweenStartAndEnd(task), anyOf(equalTo(6), + equalTo(4))); + } + } + }