blob: 239952a2a704aa12ebf368dd74b1f394822fee92 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2008 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;
import java.util.Calendar;
import java.util.Date;
import junit.framework.TestCase;
import org.eclipse.mylyn.commons.net.AuthenticationCredentials;
import org.eclipse.mylyn.commons.net.AuthenticationType;
import org.eclipse.mylyn.internal.tasks.core.AbstractTask;
import org.eclipse.mylyn.internal.tasks.core.DateRange;
import org.eclipse.mylyn.internal.tasks.core.LocalTask;
import org.eclipse.mylyn.internal.tasks.core.TaskActivityManager;
import org.eclipse.mylyn.internal.tasks.core.TaskActivityUtil;
import org.eclipse.mylyn.internal.tasks.core.TaskList;
import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
import org.eclipse.mylyn.tasks.core.ITask;
import org.eclipse.mylyn.tasks.core.TaskActivationAdapter;
import org.eclipse.mylyn.tasks.core.TaskRepository;
import org.eclipse.mylyn.tasks.tests.connector.MockRepositoryConnector;
import org.eclipse.mylyn.tasks.tests.connector.MockTask;
/**
* @author Shawn Minto
* @author Robert Elves
*/
public class TaskActivityManagerTest extends TestCase {
private class MockTaskActivationListener extends TaskActivationAdapter {
private boolean hasActivated = false;
private boolean hasPreActivated = false;
private boolean hasDeactivated = false;
private boolean hasPreDeactivated = false;
public void reset() {
hasActivated = false;
hasPreActivated = false;
hasDeactivated = false;
hasPreDeactivated = false;
}
@Override
public void preTaskActivated(ITask task) {
assertFalse(hasActivated);
hasPreActivated = true;
}
@Override
public void preTaskDeactivated(ITask task) {
assertFalse(hasDeactivated);
hasPreDeactivated = true;
}
@Override
public void taskActivated(ITask task) {
assertTrue(hasPreActivated);
hasActivated = true;
}
@Override
public void taskDeactivated(ITask task) {
assertTrue(hasPreDeactivated);
hasDeactivated = true;
}
}
private TaskActivityManager taskActivityManager;
private TaskList taskList;
private TaskRepository repository;
@Override
protected void setUp() throws Exception {
taskActivityManager = TasksUiPlugin.getTaskActivityManager();
taskActivityManager.deactivateActiveTask();
taskList = TasksUiPlugin.getTaskList();
TaskTestUtil.resetTaskListAndRepositories();
repository = new TaskRepository(MockRepositoryConnector.REPOSITORY_KIND, MockRepositoryConnector.REPOSITORY_URL);
TasksUiPlugin.getRepositoryManager().addRepository(repository);
}
public void testWeekEnd() {
AbstractTask task = new LocalTask("12", "task-12");
assertFalse(taskActivityManager.isScheduledForToday(task));
// test end of next week
Calendar end = TaskActivityUtil.getNextWeek().getEndDate();
Calendar start = TaskActivityUtil.getCalendar();
start.setTimeInMillis(end.getTimeInMillis());
TaskActivityUtil.snapStartOfDay(start);
taskActivityManager.setScheduledFor(task, new DateRange(start, end));
assertTrue(taskActivityManager.isScheduledForNextWeek(task));
taskActivityManager.setScheduledFor(task, TaskActivityUtil.getNextWeek());
assertTrue(taskActivityManager.isScheduledForNextWeek(task));
assertEquals(0, taskActivityManager.getScheduledTasks(new DateRange(start, end)).size());
// test end of two weeks
end = TaskActivityUtil.getNextWeek().next().getEndDate();
start = TaskActivityUtil.getCalendar();
start.setTimeInMillis(end.getTimeInMillis());
TaskActivityUtil.snapStartOfDay(start);
taskActivityManager.setScheduledFor(task, new DateRange(start, end));
assertEquals(1, taskActivityManager.getScheduledTasks(new DateRange(start, end)).size());
assertEquals(1, taskActivityManager.getScheduledTasks(TaskActivityUtil.getNextWeek().next()).size());
}
public void testTaskActivation() {
MockTask task = new MockTask("test:activation");
MockTaskActivationListener listener = new MockTaskActivationListener();
try {
taskActivityManager.addActivationListener(listener);
try {
taskActivityManager.activateTask(task);
assertTrue(listener.hasPreActivated);
assertTrue(listener.hasActivated);
assertFalse(listener.hasPreDeactivated);
assertFalse(listener.hasDeactivated);
listener.reset();
} finally {
taskActivityManager.deactivateTask(task);
}
assertFalse(listener.hasPreActivated);
assertFalse(listener.hasActivated);
assertTrue(listener.hasPreDeactivated);
assertTrue(listener.hasDeactivated);
} finally {
taskActivityManager.removeActivationListener(listener);
}
}
public void testIsActiveToday() {
AbstractTask task = new LocalTask("1", "task-1");
assertFalse(taskActivityManager.isScheduledForToday(task));
task.setScheduledForDate(TaskActivityUtil.getCurrentWeek().getToday());
assertTrue(taskActivityManager.isScheduledForToday(task));
task.setReminded(true);
assertTrue(taskActivityManager.isScheduledForToday(task));
task.setReminded(true);
// Calendar inAnHour = Calendar.getInstance();
// inAnHour.set(Calendar.HOUR_OF_DAY, inAnHour.get(Calendar.HOUR_OF_DAY) + 1);
// inAnHour.getTime();
// task.setScheduledForDate(inAnHour.getTime());
// Calendar tomorrow = Calendar.getInstance();
// TaskActivityUtil.snapToNextDay(tomorrow);
// assertEquals(-1, inAnHour.compareTo(tomorrow));
// assertTrue(taskActivityManager.isScheduledForToday(task));
}
public void testScheduledForToday() {
AbstractTask task = new LocalTask("1", "task-1");
task.setScheduledForDate(TaskActivityUtil.getCurrentWeek().getToday());
assertTrue(taskActivityManager.isScheduledForToday(task));
task.setScheduledForDate(TaskActivityUtil.getCurrentWeek().getToday().next());
assertFalse(taskActivityManager.isScheduledForToday(task));
}
public void testSchedulePastEndOfMonth() {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.MONTH, Calendar.SEPTEMBER);
calendar.set(Calendar.DAY_OF_MONTH, 30);
TaskActivityUtil.snapForwardNumDays(calendar, 1);
assertEquals("Should be October", Calendar.OCTOBER, calendar.get(Calendar.MONTH));
}
public void testIsCompletedToday() {
ITask task = new LocalTask("1", "task 1");
task.setCompletionDate(new Date());
assertTrue(taskActivityManager.isCompletedToday(task));
MockTask mockTask = new MockTask("1");
mockTask.setOwner("unknown");
taskList.addTask(mockTask);
mockTask.setCompletionDate(new Date());
assertFalse("completed: " + mockTask.getCompletionDate(), taskActivityManager.isCompletedToday(mockTask));
mockTask = new MockTask("2");
taskList.addTask(mockTask);
mockTask.setCompletionDate(new Date());
mockTask.setOwner("testUser");
repository.setCredentials(AuthenticationType.REPOSITORY, new AuthenticationCredentials("testUser", ""), false);
assertTrue(taskActivityManager.isCompletedToday(mockTask));
}
public void testAllTasksDeactivation() {
AbstractTask task1 = new LocalTask("task1", "description1");
AbstractTask task2 = new LocalTask("task2", "description2");
taskList.addTask(task1);
taskList.addTask(task2);
assertNull(taskActivityManager.getActiveTask());
taskActivityManager.activateTask(task2);
assertEquals(task2, taskActivityManager.getActiveTask());
taskActivityManager.deactivateActiveTask();
assertNull(taskActivityManager.getActiveTask());
}
}