/******************************************************************************* * Copyright (c) 2004, 2014 Frank Becker and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Frank Becker - initial API and implementation *******************************************************************************/ package org.eclipse.mylyn.tasks.tests; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; import junit.framework.TestCase; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.mylyn.internal.tasks.core.AbstractTask; import org.eclipse.mylyn.internal.tasks.core.AbstractTaskContainer; import org.eclipse.mylyn.internal.tasks.core.TaskActivationHistory; import org.eclipse.mylyn.internal.tasks.core.TaskActivityManager; import org.eclipse.mylyn.internal.tasks.core.TaskList; import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin; import org.eclipse.mylyn.internal.tasks.ui.actions.ActivateTaskHistoryDropDownAction; import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal; import org.eclipse.mylyn.internal.tasks.ui.workingsets.TaskWorkingSetUpdater; import org.eclipse.mylyn.tasks.tests.connector.MockRepositoryQuery; import org.eclipse.mylyn.tasks.ui.TasksUi; import org.eclipse.ui.IWorkingSet; import org.eclipse.ui.IWorkingSetManager; import org.eclipse.ui.PlatformUI; /** * @author Frank Becker * @author Wesley Coelho */ public class TaskActivationHistoryTest extends TestCase { private TaskActivationHistory history; private TaskList taskList; private AbstractTask task1; private AbstractTask task2; private AbstractTask task3; private AbstractTask task4; private AbstractTask task5; private ActivateTaskHistoryDropDownAction previousTaskAction; private TaskActivityManager taskActivityManager; @Override protected void setUp() throws Exception { taskActivityManager = TasksUiPlugin.getTaskActivityManager(); history = taskActivityManager.getTaskActivationHistory(); taskList = TasksUiPlugin.getTaskList(); taskActivityManager.deactivateActiveTask(); taskActivityManager.clear(); // ContextCorePlugin.getContextManager().resetActivityMetaContext(); TaskTestUtil.resetTaskList(); task1 = TasksUiInternal.createNewLocalTask("task 1"); taskList.addTask(task1); task2 = TasksUiInternal.createNewLocalTask("task 2"); taskList.addTask(task2); task3 = TasksUiInternal.createNewLocalTask("task 3"); taskList.addTask(task3); task4 = TasksUiInternal.createNewLocalTask("task 4"); taskList.addTask(task4); task5 = TasksUiInternal.createNewLocalTask("task 5"); taskList.addTask(task5); previousTaskAction = new ActivateTaskHistoryDropDownAction(); } @Override protected void tearDown() throws Exception { TaskTestUtil.resetTaskList(); TaskWorkingSetUpdater.applyWorkingSetsToAllWindows(new HashSet<IWorkingSet>(0)); } public void testWithWorkingSet() { MockRepositoryQuery query1 = new MockRepositoryQuery("Query 1"); MockRepositoryQuery query2 = new MockRepositoryQuery("Query 2"); AbstractTask task11 = TasksUiInternal.createNewLocalTask("Query1 Task 1"); AbstractTask task12 = TasksUiInternal.createNewLocalTask("Query1 Task 2"); AbstractTask task21 = TasksUiInternal.createNewLocalTask("Query2 Task 1"); AbstractTask task22 = TasksUiInternal.createNewLocalTask("Query2 Task 2"); taskList.addQuery(query1); taskList.addQuery(query2); createWorkingSet(query1); TasksUi.getTaskActivityManager().activateTask(task11); history.addTask(task11); taskList.addTask(task11, query1); TasksUi.getTaskActivityManager().activateTask(task12); history.addTask(task12); taskList.addTask(task12, query1); TasksUi.getTaskActivityManager().activateTask(task21); history.addTask(task21); taskList.addTask(task21, query2); TasksUi.getTaskActivityManager().activateTask(task22); history.addTask(task22); taskList.addTask(task22, query2); List<AbstractTask> prevHistoryList = history.getPreviousTasks(); // Check that the previous history list looks right assertTrue(prevHistoryList.size() >= 3); assertTrue(prevHistoryList.get(prevHistoryList.size() - 1) == task22); assertTrue(prevHistoryList.get(prevHistoryList.size() - 2) == task21); assertTrue(prevHistoryList.get(prevHistoryList.size() - 3) == task12); assertTrue(prevHistoryList.get(prevHistoryList.size() - 4) == task11); prevHistoryList = history.getPreviousTasks(TasksUiInternal.getContainersFromWorkingSet(TaskWorkingSetUpdater.getActiveWorkingSets(PlatformUI.getWorkbench() .getActiveWorkbenchWindow()))); // Check that the previous history list looks right assertTrue(prevHistoryList.size() >= 2); assertTrue(prevHistoryList.get(prevHistoryList.size() - 1) == task12); assertTrue(prevHistoryList.get(prevHistoryList.size() - 2) == task11); prevHistoryList = history.getPreviousTasks(new HashSet<AbstractTaskContainer>()); // Check that the previous history list looks right assertTrue(prevHistoryList.size() >= 3); assertTrue(prevHistoryList.get(prevHistoryList.size() - 1) == task22); assertTrue(prevHistoryList.get(prevHistoryList.size() - 2) == task21); assertTrue(prevHistoryList.get(prevHistoryList.size() - 3) == task12); assertTrue(prevHistoryList.get(prevHistoryList.size() - 4) == task11); } private IWorkingSet createWorkingSet(IAdaptable element) { IWorkingSetManager workingSetManager1 = PlatformUI.getWorkbench().getWorkingSetManager(); IWorkingSet workingSet = workingSetManager1.createWorkingSet("Task Working Set", new IAdaptable[] { element }); workingSet.setId(TaskWorkingSetUpdater.ID_TASK_WORKING_SET); assertTrue(Arrays.asList(workingSet.getElements()).contains(element)); Set<IWorkingSet> sets = TaskWorkingSetUpdater.getActiveWorkingSets(PlatformUI.getWorkbench() .getActiveWorkbenchWindow()); sets.add(workingSet); TaskWorkingSetUpdater.applyWorkingSetsToAllWindows(sets); return workingSet; } /** * Tests the next task and previous task navigation. */ public void testBasicHistoryNavigation() { // NOTE: legacy test TasksUi.getTaskActivityManager().activateTask(task1); history.addTask(task1); TasksUi.getTaskActivityManager().activateTask(task2); history.addTask(task2); TasksUi.getTaskActivityManager().activateTask(task3); history.addTask(task3); assertTrue(task3.isActive()); assertFalse(task2.isActive()); assertFalse(task1.isActive()); // order 1 (2) 3 previousTaskAction.run(); // order (1) 3 2 assertEquals(task2, taskActivityManager.getActiveTask()); assertTrue(task2.isActive()); previousTaskAction.run(); // order (1) 2 3 assertEquals(task1, taskActivityManager.getActiveTask()); assertTrue(task1.isActive()); previousTaskAction.run(); // order (1) 2 3 assertEquals(task1, taskActivityManager.getActiveTask()); assertTrue(task1.isActive()); // taskView.getPreviousTaskAction().run(); // assertTrue(task1.isActive()); // // taskView.getPreviousTaskAction().run(); // assertTrue(task1.isActive()); // taskView.getNextTaskAction().run(); // assertTrue(task2.isActive()); // // taskView.getNextTaskAction().run(); // assertTrue(task3.isActive()); // // taskView.getNextTaskAction().run(); // assertTrue(task3.isActive()); // // taskView.getPreviousTaskAction().run(); // assertTrue(task2.isActive()); // // taskView.getNextTaskAction().run(); // assertTrue(task3.isActive()); // // TasksUi.getTaskActivityManager().activateTask(task4); // history.addTask(task4); // Simulate clicking on it rather // // than navigating next or previous // assertTrue(task4.isActive()); // // taskView.getNextTaskAction().run(); // assertTrue(task4.isActive()); // // taskView.getPreviousTaskAction().run(); // assertTrue(task3.isActive()); // // taskView.getNextTaskAction().run(); // assertTrue(task4.isActive()); } /** * Tests navigation to previous/next tasks that are chosen from a list rather than being sequentially navigated */ public void testArbitraryHistoryNavigation() { // Simulate activating the tasks by clicking rather than // navigating previous/next TasksUi.getTaskActivityManager().activateTask(task1); history.addTask(task1); TasksUi.getTaskActivityManager().activateTask(task2); history.addTask(task2); TasksUi.getTaskActivityManager().activateTask(task3); history.addTask(task3); TasksUi.getTaskActivityManager().activateTask(task4); history.addTask(task4); assertTrue(task4.isActive()); //TaskActivationHistory taskHistory = taskView.getTaskActivationHistory(); List<AbstractTask> prevHistoryList = history.getPreviousTasks(); // Check that the previous history list looks right assertTrue(prevHistoryList.size() >= 3); assertEquals(task3, prevHistoryList.get(prevHistoryList.size() - 2)); assertEquals(task2, prevHistoryList.get(prevHistoryList.size() - 3)); assertEquals(task1, prevHistoryList.get(prevHistoryList.size() - 4)); // Get a task from the list and activate it TasksUi.getTaskActivityManager().activateTask(task2); assertEquals(task2, taskActivityManager.getActiveTask()); assertTrue(task2.isActive()); // Now check that the next and prev lists look right prevHistoryList = history.getPreviousTasks(); assertEquals(task2, prevHistoryList.get(prevHistoryList.size() - 1)); assertEquals(task4, prevHistoryList.get(prevHistoryList.size() - 2)); assertEquals(task1, prevHistoryList.get(prevHistoryList.size() - 4)); assertEquals(task3, prevHistoryList.get(prevHistoryList.size() - 3)); // Activation of task outside of history navigation tool history.addTask(task3); prevHistoryList = history.getPreviousTasks(); assertEquals(task3, prevHistoryList.get(prevHistoryList.size() - 1)); assertEquals(task2, prevHistoryList.get(prevHistoryList.size() - 2)); assertEquals(task4, prevHistoryList.get(prevHistoryList.size() - 3)); assertEquals(task1, prevHistoryList.get(prevHistoryList.size() - 4)); // Pick a task from drop down history TasksUi.getTaskActivityManager().activateTask(task4); assertEquals(task4, taskActivityManager.getActiveTask()); assertTrue(task4.isActive()); prevHistoryList = history.getPreviousTasks(); assertEquals(task4, prevHistoryList.get(prevHistoryList.size() - 1)); assertEquals(task3, prevHistoryList.get(prevHistoryList.size() - 2)); assertEquals(task2, prevHistoryList.get(prevHistoryList.size() - 3)); assertEquals(task1, prevHistoryList.get(prevHistoryList.size() - 4)); // Hit previous task button previousTaskAction.run(); assertEquals(task3, taskActivityManager.getActiveTask()); assertTrue(task3.isActive()); prevHistoryList = history.getPreviousTasks(); assertEquals(task3, prevHistoryList.get(prevHistoryList.size() - 1)); assertEquals(task4, prevHistoryList.get(prevHistoryList.size() - 2)); assertEquals(task2, prevHistoryList.get(prevHistoryList.size() - 3)); assertEquals(task1, prevHistoryList.get(prevHistoryList.size() - 4)); TasksUi.getTaskActivityManager().deactivateTask(task3); // List<ITask> nextHistoryList = taskHistory.getNextTasks(); // assertTrue(nextHistoryList.get(0) == task3); // assertTrue(nextHistoryList.get(1) == task4); // // // Navigate to a next item // NextTaskDropDownAction nextAction = new // NextTaskDropDownAction(taskView, taskHistory); // navigateAction = nextAction.new TaskNavigateAction(task4); // navigateAction.run(); // taskHistory.navigatedToTask(task4); // // assertTrue(task4.isActive()); // // // Check that the prev and next lists look right // nextHistoryList = taskHistory.getNextTasks(); // prevHistoryList = taskHistory.getPreviousTasks(); // assertTrue(nextHistoryList.size() == 0); // assertTrue(prevHistoryList.get(prevHistoryList.size() - 1) == task3); // assertTrue(prevHistoryList.get(prevHistoryList.size() - 2) == task2); // assertTrue(prevHistoryList.get(prevHistoryList.size() - 3) == task1); // // // Check that a deactivated task appears first on the history list // TasksUi.getTaskActivityManager().activateTask(task5); // (new TaskDeactivateAction()).run(task5); // taskView.addTaskToHistory(task5); // prevHistoryList = taskHistory.getPreviousTasks(); // assertTrue(prevHistoryList.get(prevHistoryList.size() - 1) == task5); } }