/******************************************************************************* * 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.views; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import java.util.Calendar; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.mylyn.internal.tasks.core.AbstractTask; import org.eclipse.mylyn.internal.tasks.core.AbstractTaskCategory; import org.eclipse.mylyn.internal.tasks.core.AbstractTaskContainer; import org.eclipse.mylyn.internal.tasks.core.DateRange; import org.eclipse.mylyn.internal.tasks.core.ITasksCoreConstants; import org.eclipse.mylyn.internal.tasks.core.LocalTask; import org.eclipse.mylyn.internal.tasks.core.RepositoryQuery; import org.eclipse.mylyn.internal.tasks.core.ScheduledTaskContainer; import org.eclipse.mylyn.internal.tasks.core.TaskActivityManager; import org.eclipse.mylyn.internal.tasks.core.TaskCategory; import org.eclipse.mylyn.internal.tasks.core.TaskTask; import org.eclipse.mylyn.internal.tasks.ui.ITasksUiPreferenceConstants; import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin; import org.eclipse.mylyn.internal.tasks.ui.views.TaskScheduleContentProvider.StateTaskContainer; import org.eclipse.mylyn.tasks.core.IRepositoryQuery; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; @SuppressWarnings("restriction") public class PresentationFilterTest { private static boolean filterHidden; private static boolean filterNonMatching; private static IPreferenceStore preferenceStore; private static PresentationFilter filter; @BeforeClass public static void recordSettings() { preferenceStore = TasksUiPlugin.getDefault().getPreferenceStore(); filterHidden = preferenceStore.getBoolean(ITasksUiPreferenceConstants.FILTER_HIDDEN); filterNonMatching = preferenceStore.getBoolean(ITasksUiPreferenceConstants.FILTER_NON_MATCHING); } @AfterClass public static void resetSettings() { preferenceStore.setValue(ITasksUiPreferenceConstants.FILTER_HIDDEN, filterHidden); preferenceStore.setValue(ITasksUiPreferenceConstants.FILTER_NON_MATCHING, filterNonMatching); } @Before public void setup() { preferenceStore.setValue(ITasksUiPreferenceConstants.FILTER_HIDDEN, false); preferenceStore.setValue(ITasksUiPreferenceConstants.FILTER_NON_MATCHING, false); filter = new PresentationFilter(); } @Test public void readSettings() { preferenceStore.setValue(ITasksUiPreferenceConstants.FILTER_HIDDEN, true); preferenceStore.setValue(ITasksUiPreferenceConstants.FILTER_NON_MATCHING, false); filter.updateSettings(); assertTrue(filter.isFilterHiddenQueries()); assertFalse(filter.isFilterNonMatching()); preferenceStore.setValue(ITasksUiPreferenceConstants.FILTER_HIDDEN, false); preferenceStore.setValue(ITasksUiPreferenceConstants.FILTER_NON_MATCHING, true); filter.updateSettings(); assertFalse(filter.isFilterHiddenQueries()); assertTrue(filter.isFilterNonMatching()); } @Test public void filterHiddenQueries() { IRepositoryQuery visible = new RepositoryQuery("kind", "visible"); IRepositoryQuery hidden = new RepositoryQuery("kind", "hidden"); hidden.setAttribute(ITasksCoreConstants.ATTRIBUTE_HIDDEN, "true"); assertTrue(filter.select(null, visible)); assertTrue(filter.select(null, hidden)); filter.setFilterHiddenQueries(true); assertTrue(filter.select(null, visible)); assertFalse(filter.select(null, hidden)); } @Test public void filterLocalTasks() { AbstractTaskCategory category = new TaskCategory("category"); LocalTask task = new LocalTask("1", "task"); LocalTask subTask = new LocalTask("2", "subtask"); addChild(task, subTask); addChild(category, task); assertTrue(filter.select(category, task)); assertTrue(filter.select(task, subTask)); filter.setFilterNonMatching(true); assertTrue(filter.select(category, task)); assertTrue(filter.select(task, subTask)); } @Test public void filterSubTasksInQuery() { RepositoryQuery query = new RepositoryQuery("kind", "query"); assertMatchingSubTask(query, query, true, true); } @Test public void filterSubTasksInCategory() { TaskCategory category = new TaskCategory("category"); assertMatchingSubTask(category, category, true, true); } @Test public void filterScheduledSubTasks() { ScheduledTaskContainer schedule = new ScheduledTaskContainer(mock(TaskActivityManager.class), new DateRange(Calendar.getInstance())); RepositoryQuery query = new RepositoryQuery("kind", "query"); assertMatchingSubTask(query, schedule, true, false); } @Test public void filterSubTasksInStateContainers() { StateTaskContainer schedule = mock(StateTaskContainer.class); RepositoryQuery query = new RepositoryQuery("kind", "query"); assertMatchingSubTask(query, schedule, false, false); } private void assertMatchingSubTask(AbstractTaskContainer taskContainer, AbstractTaskContainer subTaskContainer, boolean subTasksVisibleInContainer, boolean subTaskVisibleInTask) { TaskTask task = new TaskTask("kind", "http://eclipse.org", "task"); TaskTask subTask = new TaskTask("kind", "http://eclipse.org", "subTask"); TaskTask matchingSubTask = new TaskTask("kind", "http://eclipse.org", "matchingSubTask"); addChild(task, subTask); addChild(task, matchingSubTask); addChild(taskContainer, task); addChild(subTaskContainer, matchingSubTask); assertTrue(filter.select(taskContainer, task)); assertTrue(filter.select(task, subTask)); assertTrue(filter.select(task, matchingSubTask)); assertTrue(filter.select(subTaskContainer, matchingSubTask)); filter.setFilterNonMatching(true); assertTrue(filter.select(taskContainer, task)); assertFalse(filter.select(task, subTask)); assertEquals(subTaskVisibleInTask, filter.select(task, matchingSubTask)); assertEquals(subTasksVisibleInContainer, filter.select(subTaskContainer, matchingSubTask)); } private void addChild(AbstractTaskContainer container, AbstractTask task) { container.internalAddChild(task); task.getParentContainers().add(container); } }