blob: 8009691f01dae439a0bcb8d053aa5298c20f0be8 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 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.assertFalse;
import static org.junit.Assert.assertTrue;
/**
* Test that dependencies get satisfied when the required tasks are completed
*/
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.TaskGroup;
import org.eclipse.ui.internal.provisional.cheatsheets.ICompositeCheatSheetTask;
import org.junit.Test;
public class TestDependency {
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() {
model = new CompositeCheatSheetModel("name", "description", "explorerId");
model.setId("org.eclipse.ua.tests.testPersistence");
rootTask = new TaskGroup(model, "root", "name", "set");
subGroup = new TaskGroup(model, "subGroup", "name", "set");
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);
}
/**
* Create a task that depends on two other tasks. The task is not runnable
* until both of its dependencies have been satisfied.
*/
@Test
public void testDualDependency() {
setupModel();
task3.addRequiredTask(task1);
task3.addRequiredTask(task2);
assertTrue(task1.requiredTasksCompleted());
assertTrue(task2.requiredTasksCompleted());
assertFalse(task3.requiredTasksCompleted());
task1.complete();
assertFalse(task3.requiredTasksCompleted());
task2.complete();
assertTrue(task3.requiredTasksCompleted());
}
/**
* Verify that skipping a task satisfies the dependency
*/
@Test
public void testSkippedDependency() {
setupModel();
task3.addRequiredTask(task1);
task3.addRequiredTask(task2);
assertFalse(task3.requiredTasksCompleted());
task1.complete();
assertFalse(task3.requiredTasksCompleted());
task2.setState(ICompositeCheatSheetTask.SKIPPED);
assertTrue(task3.requiredTasksCompleted());
}
/**
* Verify that if a task depends on a task group the dependency is satisfied when the group is completed
*/
@Test
public void testGroupDependency() {
setupModel();
task4.addRequiredTask(subGroup);
assertFalse(task4.requiredTasksCompleted());
task1.complete();
assertFalse(task4.requiredTasksCompleted());
task2.complete();
assertFalse(task4.requiredTasksCompleted());
task3.complete();
assertTrue(task4.requiredTasksCompleted());
}
}