/******************************************************************************* * Copyright (c) 2016 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.internal.tasks.ui.util; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import org.eclipse.mylyn.internal.tasks.core.TaskTask; import org.eclipse.mylyn.internal.tasks.ui.CategorizedPresentation; import org.eclipse.mylyn.internal.tasks.ui.ScheduledPresentation; import org.eclipse.mylyn.internal.tasks.ui.util.SortCriterion.SortKey; import org.eclipse.mylyn.tasks.core.ITask; import org.eclipse.mylyn.tasks.core.data.TaskAttribute; import org.eclipse.ui.IMemento; import org.eclipse.ui.XMLMemento; import org.junit.Before; import org.junit.Test; @SuppressWarnings("restriction") public class TaskComparatorTest { private TaskComparator taskComparator; @Before public void setup() { taskComparator = new TaskComparator(); } @Test public void compareRank() { assertCompare(taskWithRank("5"), taskWithRank("7")); assertCompare(taskWithRank("5"), taskWithRank("17")); assertCompare(taskWithRank("5"), taskWithRank("17.1")); assertCompare(taskWithRank("5.3"), taskWithRank("17.1")); assertCompare(taskWithRank("#$d"), taskWithRank("#$e")); assertCompare(taskWithRank("gjp"), taskWithRank("gkp")); assertCompare(taskWithRank("A"), taskWithRank("a")); assertCompare(taskWithRank("dsfhgSd"), taskWithRank("dsfhgsd")); assertCompare(taskWithRank("dsfhgS"), taskWithRank("dsfhgsd")); assertCompare(taskWithRank("dsfhgs"), taskWithRank("dsfhgsd")); assertEquals(0, taskComparator.compare(taskWithRank("5"), taskWithRank("5"))); assertEquals(0, taskComparator.compare(taskWithRank("17.1"), taskWithRank("17.1"))); assertEquals(0, taskComparator.compare(taskWithRank("dsfhgs"), taskWithRank("dsfhgs"))); assertEquals(0, taskComparator.compare(taskWithRank("ds#fHgs"), taskWithRank("ds#fHgs"))); } @Test public void readLegacyMemento() { XMLMemento memento = XMLMemento.createWriteRoot("sorter"); IMemento child1 = memento.createChild("sort0"); IMemento child2 = memento.createChild("sort1"); SortCriterion criterion1 = new SortCriterion(SortKey.PRIORITY, SortCriterion.ASCENDING); SortCriterion criterion2 = new SortCriterion(SortKey.TASK_ID, SortCriterion.DESCENDING); criterion1.saveState(child1); criterion2.saveState(child2); taskComparator.restoreState(memento); assertCriterionEquals(criterion1, taskComparator.getSortCriterion(0)); assertCriterionEquals(criterion2, taskComparator.getSortCriterion(1)); } @Test public void readPerspectiveMemento() { XMLMemento memento = XMLMemento.createWriteRoot("sorter"); IMemento categorized1 = memento.createChild("sortorg.eclipse.mylyn.tasks.ui.categorized0"); IMemento categorized2 = memento.createChild("sortorg.eclipse.mylyn.tasks.ui.categorized1"); IMemento scheduled1 = memento.createChild("sortorg.eclipse.mylyn.tasks.ui.scheduled0"); IMemento scheduled2 = memento.createChild("sortorg.eclipse.mylyn.tasks.ui.scheduled1"); SortCriterion criterion1c = new SortCriterion(SortKey.PRIORITY, SortCriterion.ASCENDING); SortCriterion criterion2c = new SortCriterion(SortKey.TASK_ID, SortCriterion.DESCENDING); SortCriterion criterion1s = new SortCriterion(SortKey.DUE_DATE, SortCriterion.ASCENDING); SortCriterion criterion2s = new SortCriterion(SortKey.SCHEDULED_DATE, SortCriterion.DESCENDING); criterion1c.saveState(categorized1); criterion2c.saveState(categorized2); criterion1s.saveState(scheduled1); criterion2s.saveState(scheduled2); taskComparator.restoreState(memento); assertCriterionEquals(criterion1c, taskComparator.getSortCriterion(0)); assertCriterionEquals(criterion2c, taskComparator.getSortCriterion(1)); taskComparator.presentationChanged(new ScheduledPresentation()); assertCriterionEquals(criterion1s, taskComparator.getSortCriterion(0)); assertCriterionEquals(criterion2s, taskComparator.getSortCriterion(1)); taskComparator.presentationChanged(new CategorizedPresentation()); assertCriterionEquals(criterion1c, taskComparator.getSortCriterion(0)); assertCriterionEquals(criterion2c, taskComparator.getSortCriterion(1)); } private void assertCriterionEquals(SortCriterion expected, SortCriterion actual) { assertEquals(expected.getDirection(), actual.getDirection()); assertEquals(expected.getKey(), actual.getKey()); } private void assertCompare(ITask task1, ITask task2) { assertTrue(taskComparator.compare(task1, task2) < 0); assertTrue(taskComparator.compare(task2, task1) > 0); } private ITask taskWithRank(String rank) { ITask task = new TaskTask("kind", "http://mock", "1"); task.setPriority(""); task.setAttribute(TaskAttribute.RANK, rank); return task; } }