blob: b199a8d13253cc02e4c82fd59937859f483a79be [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2016 Tasktop Technologies and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* https://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Tasktop Technologies - initial API and implementation
* George Lindholm - improvements
* Frank Becker - improvements for bug 212967
* Julio Gesser - fixes for bug 303509
*******************************************************************************/
package org.eclipse.mylyn.tasks.tests;
import java.util.Date;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.mylyn.internal.tasks.core.AbstractTask;
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.TaskCategory;
import org.eclipse.mylyn.internal.tasks.core.TaskGroup;
import org.eclipse.mylyn.internal.tasks.core.UncategorizedTaskContainer;
import org.eclipse.mylyn.internal.tasks.core.UnmatchedTaskContainer;
import org.eclipse.mylyn.internal.tasks.core.UnsubmittedTaskContainer;
import org.eclipse.mylyn.internal.tasks.ui.util.SortCriterion;
import org.eclipse.mylyn.internal.tasks.ui.views.TaskListSorter;
import org.eclipse.mylyn.tasks.core.ITask;
import org.eclipse.mylyn.tasks.core.data.TaskAttribute;
import org.eclipse.mylyn.tasks.tests.connector.MockTask;
import org.eclipse.swt.widgets.Control;
import junit.framework.TestCase;
/**
* @author Mik Kersten
* @author George Lindholm
* @author Frank Becker
* @author Julio Gesser
*/
public class TaskListSorterTest extends TestCase {
public void testSortWithError() {
final TaskListSorter sorter = new TaskListSorter();
ITask task1 = new LocalTask("1", null);
ITask task2 = new MockTask("local", "", "1");
Object[] tasks = { task1, task2 };
Date start = new Date();
task2.setCreationDate(start);
task1.setCreationDate(new Date(start.getTime() - 1));
task1.setPriority("P5");
task2.setPriority("P1");
sorter.getTaskComparator().getSortCriterion(0).setKey(SortCriterion.SortKey.TASK_ID);
sorter.sort(new EmptyViewer(), tasks);
assertEquals(task1, tasks[1]);
assertEquals(task2, tasks[0]);
sorter.getTaskComparator().getSortCriterion(0).setKey(SortCriterion.SortKey.DATE_CREATED);
sorter.sort(new EmptyViewer(), tasks);
assertEquals(task1, tasks[0]);
assertEquals(task2, tasks[1]);
sorter.getTaskComparator().getSortCriterion(0).setKey(SortCriterion.SortKey.PRIORITY);
sorter.sort(new EmptyViewer(), tasks);
assertEquals(task1, tasks[1]);
assertEquals(task2, tasks[0]);
sorter.getTaskComparator().getSortCriterion(0).setKey(SortCriterion.SortKey.SUMMARY);
sorter.getTaskComparator().getSortCriterion(0).setDirection((-1));
sorter.sort(new EmptyViewer(), tasks);
assertEquals(task1, tasks[0]);
assertEquals(task2, tasks[1]);
}
public void testRootTaskSorting() {
TaskListSorter sorter = new TaskListSorter();
sorter.getTaskComparator().getSortCriterion(0).setKey(SortCriterion.SortKey.SUMMARY);
AbstractTask task = new LocalTask("1", "");
UncategorizedTaskContainer uncategorizedTaskContainer = new UncategorizedTaskContainer();
UnsubmittedTaskContainer unsubmittedTaskContainer = new UnsubmittedTaskContainer("connectorKind",
"repositoryUrl");
TaskCategory category = new TaskCategory("cat");
RepositoryQuery repositoryQuery = new RepositoryQuery("connectorKind", "queryName");
TaskGroup taskGroup = new TaskGroup("parentHandle", "summary", "groupBy");
UnmatchedTaskContainer unmatchedTaskContainer = new UnmatchedTaskContainer("connectorKind", "repositoryUrl");
checkToRootElements(sorter, uncategorizedTaskContainer, unsubmittedTaskContainer);
checkToRootElements(sorter, uncategorizedTaskContainer, category);
checkToRootElements(sorter, uncategorizedTaskContainer, repositoryQuery);
checkToRootElements(sorter, uncategorizedTaskContainer, taskGroup);
checkToRootElements(sorter, uncategorizedTaskContainer, unmatchedTaskContainer);
checkToRootElements(sorter, unsubmittedTaskContainer, category);
checkToRootElements(sorter, unsubmittedTaskContainer, repositoryQuery);
checkToRootElements(sorter, unsubmittedTaskContainer, taskGroup);
checkToRootElements(sorter, unsubmittedTaskContainer, unmatchedTaskContainer);
checkToRootElements(sorter, category, repositoryQuery);
checkToRootElements(sorter, category, taskGroup);
checkToRootElements(sorter, category, unmatchedTaskContainer);
checkToRootElements(sorter, repositoryQuery, taskGroup);
checkToRootElements(sorter, repositoryQuery, unmatchedTaskContainer);
checkToRootElements(sorter, taskGroup, unmatchedTaskContainer);
checkToRootElements(sorter, task, uncategorizedTaskContainer);
checkToRootElements(sorter, task, unsubmittedTaskContainer);
checkToRootElements(sorter, task, category);
checkToRootElements(sorter, task, repositoryQuery);
checkToRootElements(sorter, task, taskGroup);
checkToRootElements(sorter, task, unmatchedTaskContainer);
}
private void checkToRootElements(TaskListSorter sorter, AbstractTaskContainer e1, AbstractTaskContainer e2) {
assertEquals(-1, sorter.compare(null, e1, e2));
assertEquals(1, sorter.compare(null, e2, e1));
}
public class EmptyViewer extends Viewer {
public EmptyViewer() {
}
@Override
public Control getControl() {
return null;
}
@Override
public Object getInput() {
return null;
}
@Override
public ISelection getSelection() {
return null;
}
@Override
public void refresh() {
}
@Override
public void setInput(Object input) {
}
@Override
public void setSelection(ISelection selection, boolean reveal) {
}
}
public void testSummaryOrderSorting() {
MockTask[] tasks = new MockTask[6];
tasks[0] = new MockTask("local", "4", "c");
tasks[1] = new MockTask("local", "1", "b");
tasks[2] = new MockTask("local", "11", "a");
tasks[3] = new MockTask("local", "11", "d");
tasks[4] = new MockTask("local", "3", "c");
tasks[5] = new MockTask("local", "5", "a");
Date start = new Date();
tasks[5].setCreationDate(start);
tasks[4].setCreationDate(new Date(start.getTime() - 1));
tasks[3].setCreationDate(new Date(start.getTime() - 2));
tasks[2].setCreationDate(new Date(start.getTime() - 3));
tasks[1].setCreationDate(new Date(start.getTime() - 4));
tasks[0].setCreationDate(new Date(start.getTime() - 5));
TaskListSorter sorter = new TaskListSorter();
sorter.getTaskComparator().getSortCriterion(0).setKey(SortCriterion.SortKey.SUMMARY);
sorter.getTaskComparator().getSortCriterion(1).setKey(SortCriterion.SortKey.DATE_CREATED);
sorter.sort(new EmptyViewer(), tasks);
assertEquals("11", tasks[0].getTaskKey());
assertEquals("a", tasks[0].getSummary());
assertEquals("5", tasks[1].getTaskKey());
assertEquals("1", tasks[2].getTaskKey());
assertEquals("4", tasks[3].getTaskKey());
assertEquals("3", tasks[4].getTaskKey());
assertEquals("11", tasks[5].getTaskKey());
assertEquals("d", tasks[5].getSummary());
}
public void testRankOrderSorting() {
MockTask[] tasks = new MockTask[6];
tasks[0] = new MockTask("local", "4", "c");
tasks[1] = new MockTask("local", "1", "b");
tasks[2] = new MockTask("local", "11", "a");
tasks[3] = new MockTask("local", "11", "d");
tasks[4] = new MockTask("local", "3", "c");
tasks[5] = new MockTask("local", "5", "a");
Date start = new Date();
tasks[5].setCreationDate(start);
tasks[4].setCreationDate(new Date(start.getTime() - 1));
tasks[3].setCreationDate(new Date(start.getTime() - 2));
tasks[2].setCreationDate(new Date(start.getTime() - 3));
tasks[1].setCreationDate(new Date(start.getTime() - 4));
tasks[0].setCreationDate(new Date(start.getTime() - 5));
tasks[0].setAttribute(TaskAttribute.RANK, "1");
tasks[2].setAttribute(TaskAttribute.RANK, "2");
tasks[4].setAttribute(TaskAttribute.RANK, "3");
tasks[1].setAttribute(TaskAttribute.RANK, "4");
tasks[3].setAttribute(TaskAttribute.RANK, "5");
tasks[5].setAttribute(TaskAttribute.RANK, "6");
TaskListSorter sorter = new TaskListSorter();
sorter.getTaskComparator().getSortCriterion(0).setKey(SortCriterion.SortKey.RANK);
sorter.getTaskComparator().getSortCriterion(1).setKey(SortCriterion.SortKey.DATE_CREATED);
sorter.sort(new EmptyViewer(), tasks);
assertEquals("4", tasks[0].getTaskKey());
assertEquals("11", tasks[1].getTaskKey());
assertEquals("a", tasks[1].getSummary());
assertEquals("3", tasks[2].getTaskKey());
assertEquals("1", tasks[3].getTaskKey());
assertEquals("11", tasks[4].getTaskKey());
assertEquals("d", tasks[4].getSummary());
assertEquals("5", tasks[5].getTaskKey());
}
public void testRankOrderSortingWithNullRank() {
MockTask[] tasks = new MockTask[6];
tasks[0] = new MockTask("local", "1", "a");
tasks[1] = new MockTask("local", "2", "b");
tasks[2] = new MockTask("local", "3", "c");
tasks[3] = new MockTask("local", "4", "d");
tasks[4] = new MockTask("local", "5", "e");
tasks[5] = new MockTask("local", "6", "f");
Date start = new Date();
tasks[5].setCreationDate(start);
tasks[4].setCreationDate(new Date(start.getTime() - 1));
tasks[3].setCreationDate(new Date(start.getTime() - 2));
tasks[2].setCreationDate(new Date(start.getTime() - 3));
tasks[1].setCreationDate(new Date(start.getTime() - 4));
tasks[0].setCreationDate(new Date(start.getTime() - 5));
tasks[0].setAttribute(TaskAttribute.RANK, "3");
tasks[1].setAttribute(TaskAttribute.RANK, null);
tasks[2].setAttribute(TaskAttribute.RANK, "2");
tasks[3].setAttribute(TaskAttribute.RANK, "1");
tasks[4].setAttribute(TaskAttribute.RANK, "");
tasks[5].setAttribute(TaskAttribute.RANK, null);
TaskListSorter sorter = new TaskListSorter();
sorter.getTaskComparator().getSortCriterion(0).setKey(SortCriterion.SortKey.RANK);
sorter.getTaskComparator().getSortCriterion(1).setKey(SortCriterion.SortKey.DATE_CREATED);
sorter.sort(new EmptyViewer(), tasks);
assertEquals("2", tasks[0].getTaskKey());
assertEquals("5", tasks[1].getTaskKey());
assertEquals("6", tasks[2].getTaskKey());
assertEquals("4", tasks[3].getTaskKey());
assertEquals("3", tasks[4].getTaskKey());
assertEquals("1", tasks[5].getTaskKey());
}
public void testModuleSummaryOrderSorting() {
MockTask[] tasks = new MockTask[5];
tasks[0] = new MockTask("local", "MYLN:4", "c");
tasks[1] = new MockTask("local", "MYLN:1", "b");
tasks[2] = new MockTask("local", "MYLN:11", "a");
tasks[3] = new MockTask("local", "MYLN:11", "b");
tasks[4] = new MockTask("local", "MYLN:5", "a");
Date start = new Date();
tasks[4].setCreationDate(start);
tasks[3].setCreationDate(new Date(start.getTime() - 1));
tasks[2].setCreationDate(new Date(start.getTime() - 2));
tasks[1].setCreationDate(new Date(start.getTime() - 3));
tasks[0].setCreationDate(new Date(start.getTime() - 4));
TaskListSorter sorter = new TaskListSorter();
sorter.getTaskComparator().getSortCriterion(0).setKey(SortCriterion.SortKey.SUMMARY);
sorter.getTaskComparator().getSortCriterion(1).setKey(SortCriterion.SortKey.DATE_CREATED);
sorter.sort(new EmptyViewer(), tasks);
assertEquals("MYLN:11", tasks[0].getTaskKey());
assertEquals("a", tasks[0].getSummary());
assertEquals("MYLN:5", tasks[1].getTaskKey());
assertEquals("MYLN:1", tasks[2].getTaskKey());
assertEquals("MYLN:11", tasks[3].getTaskKey());
assertEquals("b", tasks[3].getSummary());
assertEquals("MYLN:4", tasks[4].getTaskKey());
}
public void testLocalTaskSort() {
final TaskListSorter sorter = new TaskListSorter();
ITask task1 = new LocalTask("1", "task1");
ITask task2 = new LocalTask("2", "task2");
ITask task3 = new LocalTask("3", "task3");
ITask[] tasks = { task1, task2, task3 };
Date start = new Date();
task1.setCreationDate(start);
task2.setCreationDate(new Date(start.getTime() - 1));
task3.setCreationDate(new Date(start.getTime() - 2));
sorter.getTaskComparator().getSortCriterion(0).setKey(SortCriterion.SortKey.DATE_CREATED);
sorter.sort(new EmptyViewer(), tasks);
sorter.getTaskComparator().getSortCriterion(0).setDirection((-1));
sorter.sort(new EmptyViewer(), tasks);
}
}