/*
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.gantt;
import java.util.List;
import junit.framework.TestCase;
import net.sourceforge.ganttproject.GanttTask;
import net.sourceforge.ganttproject.TestSetupHelper;
import net.sourceforge.ganttproject.TestSetupHelper.TaskManagerBuilder;
import net.sourceforge.ganttproject.resource.HumanResource;
import net.sourceforge.ganttproject.resource.HumanResourceManager;
import net.sourceforge.ganttproject.task.ResourceAssignment;
import net.sourceforge.ganttproject.task.Task;
import net.sourceforge.ganttproject.task.TaskManager;
import com.google.common.base.Function;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
/**
* Tests for clipboard operations with tasks.
*
* @author dbarashev
*/
public class ClipboardTaskProcessorTest extends TestCase {
public void testCopyDates() {
TaskManager taskManager = TestSetupHelper.newTaskManagerBuilder().build();
GanttTask task = taskManager.createTask();
task.setDuration(taskManager.createLength(3));
ClipboardContents contents = new ClipboardContents(taskManager);
contents.addTasks(ImmutableList.<Task>of(task));
contents.copy();
ClipboardTaskProcessor clipboardProcessor = new ClipboardTaskProcessor(taskManager);
Task pastedTask = clipboardProcessor.pasteAsSibling(taskManager.getRootTask(), contents).get(0);
assertEquals(task.getStart(), pastedTask.getStart());
assertEquals(task.getEnd(), pastedTask.getEnd());
assertEquals(task.getDuration(), pastedTask.getDuration());
}
public void testIntraDependencies() {
TaskManager taskManager = TestSetupHelper.newTaskManagerBuilder().build();
Task task1 = taskManager.newTaskBuilder().build();
Task task2 = taskManager.newTaskBuilder().build();
taskManager.getDependencyCollection().createDependency(task2, task1);
Task target = taskManager.newTaskBuilder().build();
ClipboardContents contents = new ClipboardContents(taskManager);
contents.addTasks(ImmutableList.of(task1, task2));
contents.copy();
ClipboardTaskProcessor clipboardProcessor = new ClipboardTaskProcessor(taskManager);
List<Task> pasted = clipboardProcessor.pasteAsSibling(target, contents);
assertEquals(2, pasted.size());
assertTrue(pasted.get(0).getDependencies().hasLinks(pasted));
assertTrue(pasted.get(1).getDependencies().hasLinks(pasted));
}
public void testExtraDependencies() {
TaskManager taskManager = TestSetupHelper.newTaskManagerBuilder().build();
Task task1 = taskManager.newTaskBuilder().build();
Task task2 = taskManager.newTaskBuilder().build();
Task predecessor = taskManager.newTaskBuilder().build();
taskManager.getDependencyCollection().createDependency(task1, predecessor);
taskManager.getDependencyCollection().createDependency(task2, predecessor);
Task target = taskManager.newTaskBuilder().build();
ClipboardContents contents = new ClipboardContents(taskManager);
contents.addTasks(ImmutableList.of(task1, task2));
contents.copy();
ClipboardTaskProcessor clipboardProcessor = new ClipboardTaskProcessor(taskManager);
List<Task> pasted = clipboardProcessor.pasteAsSibling(target, contents);
assertEquals(2, pasted.size());
assertTrue(pasted.get(0).getDependencies().hasLinks(ImmutableList.of(pasted.get(0), predecessor)));
assertTrue(pasted.get(1).getDependencies().hasLinks(ImmutableList.of(pasted.get(1), predecessor)));
}
public void testAssignmentsCopy() {
TaskManagerBuilder builder = TestSetupHelper.newTaskManagerBuilder();
HumanResourceManager hrMgr = builder.getResourceManager();
TaskManager taskManager = builder.build();
Task task1 = taskManager.newTaskBuilder().build();
HumanResource res1 = new HumanResource("Joe", 1, hrMgr);
hrMgr.add(res1);
ResourceAssignment assgn1 = task1.getAssignmentCollection().addAssignment(res1);
assgn1.setLoad(100f);
ClipboardContents contents = new ClipboardContents(taskManager);
contents.addTasks(ImmutableList.of(task1));
contents.copy();
ClipboardTaskProcessor clipboardProcessor = new ClipboardTaskProcessor(taskManager);
List<Task> pasted = clipboardProcessor.pasteAsSibling(taskManager.getRootTask(), contents);
ResourceAssignment[] newAssignments = pasted.get(0).getAssignments();
assertEquals(1, newAssignments.length);
assertEquals(res1, newAssignments[0].getResource());
assertEquals(100f, newAssignments[0].getLoad());
assertEquals(2, res1.getAssignments().length);
}
public void testAssignmentsCut() {
TaskManagerBuilder builder = TestSetupHelper.newTaskManagerBuilder();
HumanResourceManager hrMgr = builder.getResourceManager();
TaskManager taskManager = builder.build();
Task task1 = taskManager.newTaskBuilder().build();
HumanResource res1 = new HumanResource("Joe", 1, hrMgr);
hrMgr.add(res1);
ResourceAssignment assgn1 = task1.getAssignmentCollection().addAssignment(res1);
assgn1.setLoad(100f);
ClipboardContents contents = new ClipboardContents(taskManager);
contents.addTasks(ImmutableList.of(task1));
contents.cut();
assertEquals(0, res1.getAssignments().length);
ClipboardTaskProcessor clipboardProcessor = new ClipboardTaskProcessor(taskManager);
List<Task> pasted = clipboardProcessor.pasteAsSibling(taskManager.getRootTask(), contents);
ResourceAssignment[] newAssignments = pasted.get(0).getAssignments();
assertEquals(1, newAssignments.length);
assertEquals(res1, newAssignments[0].getResource());
assertEquals(100f, newAssignments[0].getLoad());
assertEquals(1, res1.getAssignments().length);
}
/**
* Tests that tasks cut and pasted with the help of ClipboardContents appear in the paste
* target in the same document order which they had before clipboard operation, no matter in which
* order they were added to clipboard.
*/
public void testTaskOrder() {
TaskManager taskManager = TestSetupHelper.newTaskManagerBuilder().build();
taskManager.getTaskCopyNamePrefixOption().setValue("{1}");
Task task1 = taskManager.newTaskBuilder().withName("1").build();
Task task2 = taskManager.newTaskBuilder().withName("2").build();
Task task3 = taskManager.newTaskBuilder().withName("3").build();
Task task4 = taskManager.newTaskBuilder().withName("4").build();
Task task5 = taskManager.newTaskBuilder().withName("5").build();
Task task6 = taskManager.newTaskBuilder().withName("6").build();
taskManager.getTaskHierarchy().move(task2, task1);
taskManager.getTaskHierarchy().move(task4, task3);
taskManager.getTaskHierarchy().move(task5, task3);
ClipboardContents contents = new ClipboardContents(taskManager);
contents.addTasks(ImmutableList.of(task3, task1));
contents.cut();
ClipboardTaskProcessor clipboardProcessor = new ClipboardTaskProcessor(taskManager);
clipboardProcessor.pasteAsChild(task6, contents);
List<Task> search = taskManager.getTaskHierarchy().breadthFirstSearch(task6, false);
assertEquals(ImmutableList.of("1", "3", "2", "4", "5"), Lists.transform(search, new Function<Task, String>() {
@Override
public String apply(Task t) {
return t.getName();
}
}));
}
public void testNestedTasksCopy() {
TaskManager taskManager = TestSetupHelper.newTaskManagerBuilder().build();
Task task1 = taskManager.newTaskBuilder().build();
Task task2 = taskManager.newTaskBuilder().build();
taskManager.getTaskHierarchy().move(task2, task1);
Task target = taskManager.newTaskBuilder().build();
{
ClipboardContents contents = new ClipboardContents(taskManager);
contents.addTasks(ImmutableList.of(task1));
contents.copy();
ClipboardTaskProcessor clipboardProcessor = new ClipboardTaskProcessor(taskManager);
List<Task> pasted = clipboardProcessor.pasteAsChild(target, contents);
assertEquals(1, pasted.size());
assertTrue(taskManager.getTaskHierarchy().hasNestedTasks(pasted.get(0)));
assertEquals(1, taskManager.getTaskHierarchy().getNestedTasks(pasted.get(0)).length);
}
{
ClipboardContents contents = new ClipboardContents(taskManager);
contents.addTasks(ImmutableList.of(task1));
contents.cut();
ClipboardTaskProcessor clipboardProcessor = new ClipboardTaskProcessor(taskManager);
List<Task> pasted = clipboardProcessor.pasteAsChild(target, contents);
assertEquals(1, pasted.size());
assertTrue(taskManager.getTaskHierarchy().hasNestedTasks(pasted.get(0)));
assertEquals(1, taskManager.getTaskHierarchy().getNestedTasks(pasted.get(0)).length);
}
}
}