/*
GanttProject is an opensource project management tool. License: GPL3
Copyright (C) 2012 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 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, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package net.sourceforge.ganttproject.chart;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import biz.ganttproject.core.calendar.GPCalendar.DayMask;
import biz.ganttproject.core.calendar.GPCalendar.DayType;
import biz.ganttproject.core.chart.canvas.Canvas.Text;
import biz.ganttproject.core.chart.grid.Offset;
import biz.ganttproject.core.time.GanttCalendar;
import biz.ganttproject.core.time.impl.GPTimeUnitStack;
import com.google.common.collect.Lists;
import net.sourceforge.ganttproject.TestSetupHelper;
import net.sourceforge.ganttproject.task.Task;
import net.sourceforge.ganttproject.task.TaskManager;
import junit.framework.TestCase;
/**
* Tests for TimelineLabelRendererImpl
*
* @author dbarashev (Dmitry Barashev)
*/
public class TestTimelineLabelRendererImpl extends TestCase {
private class TestChartModelApi implements TimelineLabelRendererImpl.ChartModelApi {
private final TaskManager myTaskManager = TestSetupHelper.newTaskManagerBuilder().build();
final List<Offset> myOffsets = Lists.newArrayList();
@Override
public int getTimelineTopLineHeight() {
return 20;
}
@Override
public List<Offset> getDefaultUnitOffsets() {
return myOffsets;
}
@Override
public Date getStartDate() {
return myTaskManager.getProjectStart();
}
@Override
public Collection<Task> getTimelineTasks() {
List<Task> result = Lists.newArrayList();
for (Task t : myTaskManager.getTasks()) {
if (t.isMilestone()) {
result.add(t);
}
}
return result;
}
TaskManager getTaskManager() {
return myTaskManager;
}
}
private static final GanttCalendar SUNDAY = TestSetupHelper.newSunday();
private static final GanttCalendar MONDAY = TestSetupHelper.newMonday();
private static final GanttCalendar TUESDAY = TestSetupHelper.newTuesday();
private static final GanttCalendar WEDNESDAY = TestSetupHelper.newWendesday();
private TestChartModelApi testApi;
@Override
protected void setUp() throws Exception {
super.setUp();
testApi = new TestChartModelApi();
}
private void testHasTimelineLabel(Task task, boolean condition) {
testApi.getTaskManager().getTaskHierarchy().move(task, testApi.getTaskManager().getRootTask());
testApi.myOffsets.add(new Offset(GPTimeUnitStack.DAY, SUNDAY.getTime(), SUNDAY.getTime(), MONDAY.getTime(), 0, 50,
DayMask.WEEKEND));
testApi.myOffsets.add(new Offset(GPTimeUnitStack.DAY, SUNDAY.getTime(), MONDAY.getTime(), TUESDAY.getTime(), 50, 100,
DayMask.WORKING));
testApi.myOffsets.add(new Offset(GPTimeUnitStack.DAY, SUNDAY.getTime(), TUESDAY.getTime(), WEDNESDAY.getTime(),
100, 150, DayMask.WORKING));
TimelineLabelRendererImpl renderer = new TimelineLabelRendererImpl(testApi);
renderer.render();
renderer.getLabelLayer().paint(new TestPainter(new TestTextLengthCalculator(10)));
if (condition) {
assertTrue(renderer.getLabelLayer().getPrimitive(60, 15) instanceof Text);
} else {
assertNull(renderer.getLabelLayer().getPrimitive(60, 15));
}
}
public void testMilestoneLabels() {
Task task = testApi.getTaskManager().createTask();
task.setName("foo");
task.setMilestone(true);
task.setStart(MONDAY);
task.setEnd(TUESDAY);
testHasTimelineLabel(task, true);
}
public void testNoLabelsForMereMortals() {
TestChartModelApi testApi = new TestChartModelApi();
Task task = testApi.getTaskManager().createTask();
task.setName("foo");
task.setMilestone(false);
task.setStart(MONDAY);
task.setEnd(TUESDAY);
testHasTimelineLabel(task, false);
}
}