blob: a26c4d75eeb7d240f48487aaebfe4c977d8f15e4 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2016 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.ua.tests.cheatsheet.composite;
import static org.junit.Assert.assertEquals;
import org.eclipse.ui.internal.cheatsheets.composite.model.CompositeCheatSheetModel;
import org.eclipse.ui.internal.cheatsheets.composite.model.EditableTask;
import org.eclipse.ui.internal.cheatsheets.composite.model.SuccesorTaskFinder;
import org.eclipse.ui.internal.cheatsheets.composite.model.TaskGroup;
import org.eclipse.ui.internal.provisional.cheatsheets.ICompositeCheatSheetTask;
import org.junit.Test;
/**
* Tests the computation of task successors, which will be shown
* as "Go To" links after a task is complete or for a task group.
* All tasks use the same base model
*/
public class TestSuccessors {
private CompositeCheatSheetModel model;
private TaskGroup rootTask;
private TaskGroup subGroup;
private EditableTask task1;
private EditableTask task2;
private EditableTask task3;
private EditableTask task4;
/**
* Initialize a composite cheatsheet whose root task is the parent of
* subGroup and task4. subGroup is the parent of task1, task2 and task3
*/
private void setupModel(boolean subGroupIsChoice) {
model = new CompositeCheatSheetModel("name", "description", "explorerId");
model.setId("org.eclipse.ua.tests.testPersistence");
rootTask = new TaskGroup(model, "root", "name", "set");
String subgroupKind = "set";
if (subGroupIsChoice) {
subgroupKind = "choice";
}
subGroup = new TaskGroup(model, "subGroup", "name", subgroupKind);
task1 = new EditableTask(model, "task1", "name", "ua.junit");
task2 = new EditableTask(model, "task2", "name", "ua.junit");
task3 = new EditableTask(model, "task3", "name", "ua.junit");
task4 = new EditableTask(model, "task4", "name", "ua.junit");
model.setRootTask(rootTask);
rootTask.addSubtask(subGroup);
rootTask.addSubtask(task4);
subGroup.addSubtask(task1);
subGroup.addSubtask(task2);
subGroup.addSubtask(task3);
}
/*
* Assert that a task has one successor and it matches the expected value
*/
private void assertSingleSuccessor(ICompositeCheatSheetTask task, ICompositeCheatSheetTask expectedSuccessor) {
SuccesorTaskFinder finder = new SuccesorTaskFinder(task);
ICompositeCheatSheetTask[] successors = finder.getRecommendedSuccessors();
assertEquals(1, successors.length);
assertEquals(expectedSuccessor, successors[0]);
}
private void assertNoSuccessors(ICompositeCheatSheetTask task) {
SuccesorTaskFinder finder = new SuccesorTaskFinder(task);
ICompositeCheatSheetTask[] successors = finder.getRecommendedSuccessors();
assertEquals(0, successors.length);
}
@Test
public void testSuccessorsCleanModel() {
setupModel(false);
assertSingleSuccessor(rootTask, subGroup);
assertSingleSuccessor(subGroup, task1);
}
@Test
public void testSuccessorsFirstTaskInProgress() {
setupModel(false);
task1.setState(ICompositeCheatSheetTask.IN_PROGRESS);
assertSingleSuccessor(rootTask, subGroup);
assertSingleSuccessor(subGroup, task1);
}
@Test
public void testSuccessorsFirstTaskSkipped() {
setupModel(false);
task1.setState(ICompositeCheatSheetTask.SKIPPED);
assertSingleSuccessor(rootTask, subGroup);
assertSingleSuccessor(subGroup, task2);
assertSingleSuccessor(task1, task2);
}
@Test
public void testSuccessorsFirstTaskCompleted() {
setupModel(false);
task1.complete();
assertSingleSuccessor(rootTask, subGroup);
assertSingleSuccessor(subGroup, task2);
assertSingleSuccessor(task1, task2);
}
@Test
public void testSuccessorsWithBackwardDependency() {
setupModel(false);
task1.addRequiredTask(task3);
assertSingleSuccessor(subGroup, task2);
task2.complete();
assertSingleSuccessor(subGroup, task3);
assertSingleSuccessor(task2, task3);
}
@Test
public void testCompleteGroup() {
setupModel(false);
task1.complete();
task2.complete();
task3.complete();
assertEquals(ICompositeCheatSheetTask.COMPLETED, subGroup.getState());
assertSingleSuccessor(rootTask, task4);
assertSingleSuccessor(subGroup, task4);
assertSingleSuccessor(task1, task4);
assertSingleSuccessor(task2, task4);
assertSingleSuccessor(task3, task4);
}
@Test
public void testAllTasksComplete() {
setupModel(false);
task1.complete();
task2.complete();
task3.complete();
task4.complete();
assertNoSuccessors(rootTask);
assertNoSuccessors(subGroup);
assertNoSuccessors(task1);
assertNoSuccessors(task4);
}
@Test
public void testUnstartedChoice() {
setupModel(true);
SuccesorTaskFinder finder = new SuccesorTaskFinder(subGroup);
ICompositeCheatSheetTask[] successors = finder.getRecommendedSuccessors();
assertEquals(3, successors.length);
// The successors should be in task order
assertEquals(task1, successors[0]);
assertEquals(task2, successors[1]);
assertEquals(task3, successors[2]);
}
@Test
public void testCompletedChoice() {
setupModel(true);
task1.complete();
assertSingleSuccessor(rootTask, task4);
assertSingleSuccessor(subGroup, task4);
assertSingleSuccessor(task1, task4);
assertSingleSuccessor(task2, task4);
assertSingleSuccessor(task3, task4);
}
@Test
public void testSkippedGroup() {
setupModel(false);
task1.complete();
subGroup.setSkippable(true);
subGroup.setState(ICompositeCheatSheetTask.SKIPPED);
assertSingleSuccessor(rootTask, task4);
assertSingleSuccessor(subGroup, task4);
assertSingleSuccessor(task1, task4);
assertSingleSuccessor(task2, task4);
assertSingleSuccessor(task3, task4);
}
}