/*
GanttProject is an opensource project management tool. License: GPL2
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.chart.mouse;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import biz.ganttproject.core.time.TimeDuration;
import biz.ganttproject.core.time.TimeDurationImpl;
import biz.ganttproject.core.time.TimeUnit;
import biz.ganttproject.core.time.impl.GPTimeUnitStack;
import junit.framework.TestCase;
import net.sourceforge.ganttproject.TestSetupHelper;
import net.sourceforge.ganttproject.chart.TaskChartModelFacade;
import net.sourceforge.ganttproject.task.Task;
import net.sourceforge.ganttproject.task.TaskActivity;
import net.sourceforge.ganttproject.task.TaskManager;
import org.easymock.EasyMock;
import biz.ganttproject.core.calendar.WeekendCalendarImpl;
import biz.ganttproject.core.chart.canvas.Canvas;
import biz.ganttproject.core.chart.canvas.Canvas.Rectangle;
/**
* Tests for {@link ChangeTaskProgressRuler}.
*
* @author Dmitry Barashev
*/
public class ChangeTaskProgressRulerTest extends TestCase {
private static Task createTask(TaskManager taskManager) {
Task result = taskManager.createTask();
result.move(taskManager.getRootTask());
result.setName(String.valueOf(result.getTaskID()));
return result;
}
public void testProgressConversionToUnits() {
TimeDuration taskDuration = new TimeDurationImpl(GPTimeUnitStack.DAY, 2);
assertEquals("0", new ChangeTaskProgressRuler.Progress(0, taskDuration).toUnits());
assertEquals("0+", new ChangeTaskProgressRuler.Progress(1, taskDuration).toUnits());
assertEquals("1", new ChangeTaskProgressRuler.Progress(50, taskDuration).toUnits());
assertEquals("1+", new ChangeTaskProgressRuler.Progress(51, taskDuration).toUnits());
assertEquals("1+", new ChangeTaskProgressRuler.Progress(99, taskDuration).toUnits());
assertEquals("2", new ChangeTaskProgressRuler.Progress(100, taskDuration).toUnits());
}
public void testSimpleRuler() {
TaskChartModelFacade mockChartModel = EasyMock.createMock(TaskChartModelFacade.class);
TaskManager taskManager = TestSetupHelper.newTaskManagerBuilder()
.withCalendar(new WeekendCalendarImpl()).build();
Task task = createTask(taskManager);
task.setStart(TestSetupHelper.newMonday());
task.setDuration(taskManager.createLength(2));
Canvas primitives = new Canvas();
Rectangle r = primitives.createRectangle(0, 0, 100, 10);
assertEquals(1, task.getActivities().size());
primitives.bind(r, task.getActivities().get(0));
EasyMock.expect(mockChartModel.getTaskRectangles(task)).andReturn(Collections.singletonList(r));
EasyMock.replay(mockChartModel);
ChangeTaskProgressRuler ruler = new ChangeTaskProgressRuler(task, mockChartModel);
assertEquals(0, ruler.getProgress(-1).toPercents());
assertEquals(0, ruler.getProgress(0).toPercents());
assertEquals(1, ruler.getProgress(1).toPercents());
assertEquals(50, ruler.getProgress(50).toPercents());
assertEquals(99, ruler.getProgress(99).toPercents());
assertEquals(100, ruler.getProgress(100).toPercents());
assertEquals(100, ruler.getProgress(101).toPercents());
EasyMock.verify(mockChartModel);
}
public void testRulerOverWeekend() {
TaskChartModelFacade mockChartModel = EasyMock.createMock(TaskChartModelFacade.class);
TaskManager taskManager = TestSetupHelper.newTaskManagerBuilder()
.withCalendar(new WeekendCalendarImpl()).build();
Task task = createTask(taskManager);
task.setStart(TestSetupHelper.newFriday());
task.setDuration(taskManager.createLength(2));
List<TaskActivity> activities = task.getActivities();
assertEquals(3, activities.size());
Canvas primitives = new Canvas();
Rectangle r0 = primitives.createRectangle(0, 0, 100, 10);
primitives.bind(r0, activities.get(0));
Rectangle r1 = primitives.createRectangle(100, 0, 10, 10);
primitives.bind(r1, activities.get(1));
Rectangle r2 = primitives.createRectangle(110, 0, 100, 10);
primitives.bind(r2, activities.get(2));
EasyMock.expect(mockChartModel.getTaskRectangles(task)).andReturn(Arrays.asList(r0, r1, r2));
EasyMock.replay(mockChartModel);
ChangeTaskProgressRuler ruler = new ChangeTaskProgressRuler(task, mockChartModel);
assertEquals(0, ruler.getProgress(-1).toPercents());
assertEquals(0, ruler.getProgress(0).toPercents());
assertEquals(1, ruler.getProgress(2).toPercents());
assertEquals(25, ruler.getProgress(50).toPercents());
assertEquals(50, ruler.getProgress(100).toPercents());
assertEquals(50, ruler.getProgress(101).toPercents());
assertEquals(50, ruler.getProgress(109).toPercents());
assertEquals(50, ruler.getProgress(110).toPercents());
assertEquals(75, ruler.getProgress(160).toPercents());
assertEquals(100, ruler.getProgress(219).toPercents());
assertEquals(100, ruler.getProgress(211).toPercents());
assertEquals(100, ruler.getProgress(212).toPercents());
EasyMock.verify(mockChartModel);
}
}