/******************************************************************************* * Copyright (c) 2004, 2012 Tasktop Technologies 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: * Tasktop Technologies - initial API and implementation *******************************************************************************/ package org.eclipse.mylyn.tasks.tests.ui; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; import junit.framework.TestCase; import org.eclipse.core.commands.NotEnabledException; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.jface.viewers.IContentProvider; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.mylyn.internal.tasks.core.AbstractTaskContainer; import org.eclipse.mylyn.internal.tasks.core.LocalTask; import org.eclipse.mylyn.internal.tasks.core.RepositoryQuery; import org.eclipse.mylyn.internal.tasks.core.TaskTask; import org.eclipse.mylyn.internal.tasks.ui.ScheduledPresentation; import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin; import org.eclipse.mylyn.internal.tasks.ui.commands.MarkTaskHandler.MarkTaskCompleteHandler; import org.eclipse.mylyn.internal.tasks.ui.commands.MarkTaskHandler.MarkTaskReadHandler; import org.eclipse.mylyn.internal.tasks.ui.views.AbstractTaskListPresentation; import org.eclipse.mylyn.internal.tasks.ui.views.TaskListView; import org.eclipse.mylyn.internal.tasks.ui.views.TaskScheduleContentProvider.Incoming; import org.eclipse.mylyn.internal.tasks.ui.workingsets.TaskWorkingSetUpdater; import org.eclipse.mylyn.tasks.core.ITask.SynchronizationState; import org.eclipse.mylyn.tasks.core.TaskRepository; import org.eclipse.mylyn.tasks.tests.TaskTestUtil; import org.eclipse.mylyn.tasks.tests.connector.MockRepositoryConnector; import org.eclipse.ui.IWorkingSet; import org.eclipse.ui.IWorkingSetManager; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.handlers.IHandlerService; import org.eclipse.ui.internal.Workbench; /** * @author Steffen Pingel */ public class MarkTaskHandlerTest extends TestCase { private IHandlerService handlerService; private IWorkingSet workingSet; private IWorkingSetManager workingSetManager; @Override protected void setUp() throws Exception { TaskTestUtil.resetTaskListAndRepositories(); handlerService = (IHandlerService) PlatformUI.getWorkbench().getService(IHandlerService.class); TaskRepository repository = TaskTestUtil.createMockRepository(); TasksUiPlugin.getRepositoryManager().addRepository(repository); // TODO figure out which test leaves a filter enabled TaskWorkingSetUpdater.applyWorkingSetsToAllWindows(new HashSet<IWorkingSet>(0)); TaskTestUtil.openTasksViewInActivePerspective().clearFilters(); workingSetManager = Workbench.getInstance().getWorkingSetManager(); } @Override protected void tearDown() throws Exception { TaskTestUtil.resetTaskListAndRepositories(); if (workingSet != null) { workingSetManager.removeWorkingSet(workingSet); workingSet = null; } } public void testMarkTaskCompleted() throws Exception { MockRepositoryConnector.getDefault().setHasLocalCompletionState(true); TaskTask task = TaskTestUtil.createMockTask("1"); TaskTestUtil.addAndSelectTask(task); assertFalse(task.isCompleted()); handlerService.executeCommand(MarkTaskCompleteHandler.ID_COMMAND, null); assertTrue(task.isCompleted()); try { handlerService.executeCommand(MarkTaskCompleteHandler.ID_COMMAND, null); fail("Expected NotEnabledException"); } catch (NotEnabledException e) { // expected } } public void testMarkLocalTaskCompleted() throws Exception { LocalTask localTask = new LocalTask("1", ""); TaskTestUtil.addAndSelectTask(localTask); assertFalse(localTask.isCompleted()); handlerService.executeCommand(MarkTaskCompleteHandler.ID_COMMAND, null); assertTrue(localTask.isCompleted()); try { handlerService.executeCommand(MarkTaskCompleteHandler.ID_COMMAND, null); fail("Expected NotEnabledException"); } catch (NotEnabledException e) { // expected } } public void testMarkWorkingSetIncomingRead() throws Exception { workingSet = createAndSelectWorkingSet(); Incoming incoming = setScheduledPresentationAndSelectIncoming(); TaskTask taskInWorkingSet = createIncomingTask("1", incoming, workingSet); TaskTask taskNotInWorkingSet = createIncomingTask("2", incoming, null); assertTrue(workingSetContainsTask(taskInWorkingSet)); assertFalse(workingSetContainsTask(taskNotInWorkingSet)); assertTrue(taskInWorkingSet.getSynchronizationState().isIncoming()); assertTrue(taskNotInWorkingSet.getSynchronizationState().isIncoming()); handlerService.executeCommand(MarkTaskReadHandler.ID_COMMAND, null); assertFalse(taskInWorkingSet.getSynchronizationState().isIncoming()); assertTrue(taskNotInWorkingSet.getSynchronizationState().isIncoming()); } protected boolean workingSetContainsTask(TaskTask taskInWorkingSet) { List<IAdaptable> elements = Arrays.asList(workingSet.getElements()); for (AbstractTaskContainer parent : taskInWorkingSet.getParentContainers()) { if (elements.contains(parent)) { return true; } } return false; } protected Incoming setScheduledPresentationAndSelectIncoming() throws Exception { TaskListView taskListView = TaskTestUtil.openTasksViewInActivePerspective(); for (AbstractTaskListPresentation presentation : TaskListView.getPresentations()) { if (presentation.getId().equals(ScheduledPresentation.ID)) { taskListView.applyPresentation(presentation); break; } } taskListView.setFocusedMode(true); taskListView.refresh(); assertTrue(taskListView.getCurrentPresentation().getId().equals(ScheduledPresentation.ID)); // select incoming container IContentProvider contentProvider = taskListView.getViewer().getContentProvider(); assertTrue(contentProvider instanceof ITreeContentProvider); for (Object element : ((ITreeContentProvider) contentProvider).getElements(taskListView.getViewSite())) { if (element instanceof Incoming) { taskListView.getViewer().setSelection(new StructuredSelection(element), true); } } assertEquals(taskListView.getSelectedTaskContainers().size(), 1); assertTrue(taskListView.getSelectedTaskContainers().get(0) instanceof Incoming); return (Incoming) taskListView.getSelectedTaskContainers().get(0); } protected TaskTask createIncomingTask(String id, Incoming incoming, IWorkingSet workingSet) throws Exception { RepositoryQuery query = TaskTestUtil.createMockQuery("query." + id); TasksUiPlugin.getTaskList().addQuery(query); if (workingSet != null) { workingSet.setElements(new IAdaptable[] { query }); } TaskTask task = TaskTestUtil.createMockTask(id); TasksUiPlugin.getTaskList().addTask(task, query); task.setSynchronizationState(SynchronizationState.INCOMING); assertTrue(incoming.getChildren().contains(task)); return task; } protected IWorkingSet createAndSelectWorkingSet() { IWorkingSet workingSet = workingSetManager.createWorkingSet("Task Working Set", new IAdaptable[] {}); workingSet.setId(TaskWorkingSetUpdater.ID_TASK_WORKING_SET); ArrayList<IWorkingSet> list = new ArrayList<IWorkingSet>(); list.add(workingSet); TaskWorkingSetUpdater.applyWorkingSetsToAllWindows(list); assertTrue(TaskWorkingSetUpdater.isWorkingSetEnabled(workingSet)); return workingSet; } }