/*
* WorkflowDefinitionImplTest.java
*
* Version 1.0 Jul 3, 2008
*
* Copyright notice
*
* Brief description
*
* (c) 2008 by dbreuer
*/
package de.fhkoeln.cosima.workflow;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.util.NoSuchElementException;
import org.junit.Before;
import org.junit.Test;
import de.fhkoeln.cosima.components.AddMusicToMovie;
import de.fhkoeln.cosima.components.PlayMovieFile;
public class WorkflowDefinitionImplTest {
String abstractDefinition;
@Before
public void setUp() {
abstractDefinition = "1,de.fhkoeln.cosima.components.PlayMovieFile";
}
@Test(expected=IllegalArgumentException.class)
public void testShouldNotAcceptEmptyAbstractDefinition() throws Exception {
SimpleWorkflowDefinition definition = new SimpleWorkflowDefinition("");
}
@Test(expected=IllegalArgumentException.class)
public void testShouldVerifyFormatOfAbstractDefinition() throws Exception {
SimpleWorkflowDefinition definition = new SimpleWorkflowDefinition("t,34");
}
@Test
public void testShouldAcceptAbstractDefinitionInCorrectFormat() throws Exception {
SimpleWorkflowDefinition definition = new SimpleWorkflowDefinition("1,de.fhkoeln.cosima.components.PlayMovieFile");
assertNotNull(definition);
}
@Test(expected=ClassNotFoundException.class)
public void testShouldThrowExceptionIfClassInDefinitionWasNotFound() throws Exception {
SimpleWorkflowDefinition definition = new SimpleWorkflowDefinition("1,de.fhkoeln.cosima.NonExistingClass");
}
@Test(expected=NoSuchElementException.class)
public void testShouldRaiseNoSuchElementExceptionIfAllElementsHaveBeenRead() throws Exception {
SimpleWorkflowDefinition definition = new SimpleWorkflowDefinition(abstractDefinition);
definition.getNextWorkflowElement();
definition.getNextWorkflowElement();
}
@Test
public void testShouldBeAskIfAnyElementsLeft() throws Exception {
SimpleWorkflowDefinition definition = new SimpleWorkflowDefinition(abstractDefinition);
assertTrue(definition.hasNextElements());
definition.getNextWorkflowElement();
assertFalse(definition.hasNextElements());
}
@Test
public void testShouldRewindDefinition() throws Exception {
SimpleWorkflowDefinition definition = new SimpleWorkflowDefinition(abstractDefinition);
assertNotNull(definition.getNextWorkflowElement());
definition.rewind();
assertNotNull(definition.getNextWorkflowElement());
}
/**
* Test method for {@link de.fhkoeln.cosima.workflow.SimpleWorkflowDefinition#getNextWorkflowElement()}.
*/
@Test
public void testShouldGetNextWorkflowElement() {
// First we add some more to the abstract definition.
abstractDefinition += ";2,de.fhkoeln.cosima.components.AddMusicToMovie";
SimpleWorkflowDefinition definition;
try {
definition = new SimpleWorkflowDefinition(abstractDefinition);
assertEquals(2, definition.size());
Object[] workflowElement = definition.getNextWorkflowElement();
assertNotNull(workflowElement);
assertEquals(1, workflowElement[0]);
assertEquals(PlayMovieFile.class, workflowElement[1]);
workflowElement = definition.getNextWorkflowElement();
assertNotNull(workflowElement);
assertEquals(2, workflowElement[0]);
assertEquals(AddMusicToMovie.class, workflowElement[1]);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
@Test
public void testShouldInitializeWithAbstractRepresentationOfWorkflow() throws Exception {
SimpleWorkflowDefinition definition = new SimpleWorkflowDefinition(abstractDefinition);
assertNotNull(definition.getNextWorkflowElement());
}
@Test
public void testShouldReturnRealWorkflowElementObjectEvenForSimpleWorkflowDefinition() throws Exception {
SimpleWorkflowDefinition definition = new SimpleWorkflowDefinition(abstractDefinition);
WorkflowElement element = definition.getNextElements().iterator().next();
assertNotNull(element);
assertEquals("1", element.getUri());
assertEquals(PlayMovieFile.class, element.getElementClass());
}
}