blob: 6e35cb4b555cd39ba3effadc0556f3fcea716294 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2015 IBM Corporation 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.ua.tests.cheatsheet.composite;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Dictionary;
import junit.framework.TestCase;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.ua.tests.cheatsheet.util.StatusCheck;
import org.eclipse.ua.tests.plugin.UserAssistanceTestPlugin;
import org.eclipse.ua.tests.util.ResourceFinder;
import org.eclipse.ui.internal.cheatsheets.composite.model.AbstractTask;
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.parser.CompositeCheatSheetParser;
public class TestCompositeParser extends TestCase {
private static final String COMPOSITES_FOLDER = "data/cheatsheet/composite/";
private CompositeCheatSheetParser parser;
@Override
protected void setUp() throws Exception {
parser = new CompositeCheatSheetParser();
}
private CompositeCheatSheetModel parseTestFile(String path) {
URL testURL = ResourceFinder.findFile(UserAssistanceTestPlugin.getDefault(),
COMPOSITES_FOLDER + path);
return parser.parseGuide(testURL);
}
public void testNullInput() {
assertNull(parser.parseGuide(null));
assertEquals(IStatus.ERROR, parser.getStatus().getSeverity());
StatusCheck.assertStatusContains(parser.getStatus(), "Could not open");
}
public void testBadURL() {
try {
assertNull(parser.parseGuide(new URL("file:/nonexistent")));
} catch (MalformedURLException e) {
fail("Exception thrown");
}
assertEquals(IStatus.ERROR, parser.getStatus().getSeverity());
StatusCheck.assertStatusContains(parser.getStatus(), "Could not open");
}
public void testSimpleGuide() {
CompositeCheatSheetModel model = parseTestFile("SingleTask.xml");
assertNotNull(model);
assertTrue(parser.getStatus().isOK());
assertFalse(((EditableTask)model.getRootTask()).isSkippable());
}
public void testNoTasks() {
CompositeCheatSheetModel model = parseTestFile("GuideWithoutTasks.xml");
assertNull(model);
assertEquals(IStatus.ERROR, parser.getStatus().getSeverity());
StatusCheck.assertStatusContains(parser.getStatus(), "Missing root task");
}
public void testInvalidRoot() {
assertNull(parseTestFile("InvalidRoot.xml"));
assertEquals(IStatus.ERROR, parser.getStatus().getSeverity());
StatusCheck.assertStatusContains(parser.getStatus(), "Root node is not");
}
public void testTwoRootTasksGuide() {
assertNull(parseTestFile("TwoRootTasks.xml"));
assertEquals(IStatus.ERROR, parser.getStatus().getSeverity());
StatusCheck.assertStatusContains(parser.getStatus(), "more than one root task");
}
public void testParamNoName() {
assertNotNull(parseTestFile("ParamNoName.xml"));
assertEquals(IStatus.WARNING, parser.getStatus().getSeverity());
StatusCheck.assertStatusContains(parser.getStatus(), "Parameter has no name");
}
public void testParamNoValue() {
assertNotNull(parseTestFile("ParamNoValue.xml"));
assertEquals(IStatus.WARNING, parser.getStatus().getSeverity());
StatusCheck.assertStatusContains(parser.getStatus(), "Parameter has no value");
}
public void testValidParameters() {
CompositeCheatSheetModel model = parseTestFile("ValidParameter.xml");
assertNotNull(model);
assertTrue(parser.getStatus().isOK());
Dictionary<String, String> params = model.getRootTask().getParameters();
assertEquals(1, params.size());
assertEquals("b", params.get("a"));
}
public void testDependency() {
CompositeCheatSheetModel model = parseTestFile("TaskDependency.xml");
assertNotNull(model);
assertTrue(parser.getStatus().isOK());
AbstractTask task1 = model.getDependencies().getTask("task1");
AbstractTask task2 = model.getDependencies().getTask("task2");
assertTrue(task1.getRequiredTasks().length == 0);
assertTrue(task1.getSuccessorTasks().length == 1);
assertEquals(task2, task1.getSuccessorTasks()[0]);
assertTrue(task2.getSuccessorTasks().length == 0);
assertTrue(task2.getRequiredTasks().length == 1);
assertEquals(task1, task2.getRequiredTasks()[0]);
assertTrue(task1.isSkippable());
assertFalse(task2.isSkippable());
}
public void testBackwardDependency() {
CompositeCheatSheetModel model = parseTestFile("BackwardDependency.xml");
assertNotNull(model);
assertTrue(parser.getStatus().isOK());
AbstractTask task1 = model.getDependencies().getTask("task1");
AbstractTask task2 = model.getDependencies().getTask("task2");
assertTrue(task1.getRequiredTasks().length == 0);
assertTrue(task1.getSuccessorTasks().length == 1);
assertEquals(task2, task1.getSuccessorTasks()[0]);
assertTrue(task2.getSuccessorTasks().length == 0);
assertTrue(task2.getRequiredTasks().length == 1);
assertEquals(task1, task2.getRequiredTasks()[0]);
}
public void testDependencyWithoutId() {
assertNull(parseTestFile("DependencyWithoutId.xml"));
assertEquals(IStatus.ERROR, parser.getStatus().getSeverity());
StatusCheck.assertStatusContains(parser.getStatus(), "Missing task id");
}
public void testDependencyWithInvalidId() {
assertNull(parseTestFile("DependencyInvalidId.xml"));
assertEquals(IStatus.ERROR, parser.getStatus().getSeverity());
StatusCheck.assertStatusContains(parser.getStatus(), "Invalid id");
}
public void testCircularDependency() {
assertNull(parseTestFile("CircularDependency.xml"));
assertEquals(IStatus.ERROR, parser.getStatus().getSeverity());
StatusCheck.assertMultiStatusContains(parser.getStatus(), "Cycle detected");
}
public void testSelfDependency() {
assertNull(parseTestFile("SelfDependency.xml"));
assertEquals(IStatus.ERROR, parser.getStatus().getSeverity());
StatusCheck.assertMultiStatusContains(parser.getStatus(), "Cycle detected");
}
public void testDuplicateId() {
assertNull(parseTestFile("DuplicateTaskId.xml"));
assertEquals(IStatus.ERROR, parser.getStatus().getSeverity());
StatusCheck.assertStatusContains(parser.getStatus(), "Duplicate task id");
}
public void testNoTaskKind() {
assertNull(parseTestFile("LeafTaskWithoutKind.xml"));
assertEquals(IStatus.ERROR, parser.getStatus().getSeverity());
StatusCheck.assertStatusContains(parser.getStatus(), "Missing kind attribute in task");
}
public void testLeafTaskInvalidKind() {
assertNull(parseTestFile("LeafTaskInvalidKind.xml"));
assertEquals(IStatus.ERROR, parser.getStatus().getSeverity());
StatusCheck.assertStatusContains(parser.getStatus(), "Invalid kind");
}
public void testLeafTaskNoName() {
assertNull(parseTestFile("TaskNoName.xml"));
assertEquals(IStatus.ERROR, parser.getStatus().getSeverity());
StatusCheck.assertStatusContains(parser.getStatus(), "Missing name attribute in task");
}
public void testCompositeNoName() {
assertNull(parseTestFile("CompositeNoName.xml"));
assertEquals(IStatus.ERROR, parser.getStatus().getSeverity());
StatusCheck.assertStatusContains(parser.getStatus(), "Missing name attribute in composite");
}
public void testTaskGroupInvalidKind() {
assertNull(parseTestFile("InvalidTaskGroupKind.xml"));
assertEquals(IStatus.ERROR, parser.getStatus().getSeverity());
StatusCheck.assertStatusContains(parser.getStatus(), "Invalid kind");
}
public void testSetNoChild() {
assertNull(parseTestFile("SetWithNoChildren.xml"));
assertEquals(IStatus.ERROR, parser.getStatus().getSeverity());
StatusCheck.assertStatusContains(parser.getStatus(), "Task group");
StatusCheck.assertStatusContains(parser.getStatus(), "has no children");
}
public void testChoiceNoChild() {
assertNull(parseTestFile("EmptyChoice.xml"));
assertEquals(IStatus.ERROR, parser.getStatus().getSeverity());
StatusCheck.assertStatusContains(parser.getStatus(), "has no children");
}
}