// Copyright � 2002-2007 Canoo Engineering AG, Switzerland. package com.canoo.webtest.ant; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.apache.tools.ant.Project; import com.canoo.webtest.engine.Configuration; import com.canoo.webtest.engine.StepExecutionException; import com.canoo.webtest.reporting.RootStepResult; import com.canoo.webtest.self.ErrorStepStub; import com.canoo.webtest.self.FailStepStub; import com.canoo.webtest.self.StepStub; import com.canoo.webtest.self.TestBlock; import com.canoo.webtest.self.ThrowAssert; import com.canoo.webtest.steps.BaseStepTestCase; import com.canoo.webtest.steps.Step; import com.canoo.webtest.steps.request.InvokePage; /** * Unit tests for {@link TestStepSequence}. * @author Unknown * @author Marc Guillemot */ public class TestStepSequenceTest extends BaseStepTestCase { public void testCreation() { final TestStepSequence sequence = new TestStepSequence(); assertNotNull(sequence); try { sequence.doExecute(); // coverage } catch (Exception ex) { // ignore } } protected Step createStep() { final Project project = new Project(); final WebtestTask webtest = new WebtestTask(); webtest.setProject(project); final TestStepSequence step = new TestStepSequence(); step.setProject(project); webtest.addSteps(step); return step; } public void testAddStep() { final TestStepSequence steps = (TestStepSequence) getStep(); final InvokePage step = new InvokePage(); step.setDescription("aStepName"); step.setUrl("aRelativeUrl"); steps.addStep(step); assertEquals("#steps", 1, steps.getSteps().size()); } /** * Creates a dummy step * @return the initialized step */ protected StepStub createStepStub() { final StepStub step = new StepStub(); configureStep(step); return step; } public void testNoSteps() { final StepExecutionException exception = (StepExecutionException) ThrowAssert.assertThrows("", StepExecutionException.class, new TestBlock() { public void call() throws Exception { getStep().execute(); } }); assertInstanceOf(IllegalArgumentException.class, exception.getCause()); } public void testExecutionOneEntry() throws IOException { final List<Step> testSteps = new ArrayList<Step>(); testSteps.add(createStepStub()); final RootStepResult result = executeStepList(testSteps); checkResult(result, true, false, false); final StepStub step = (StepStub) testSteps.get(0); assertOneExecution(step); assertEquals("context step counter", 1 + 1, step.getContext().getCurrentStepNumber()); } public void testExecutionMultipleEntries() throws IOException { final List<Step> testSteps = new ArrayList<Step>(); testSteps.add(createStepStub()); testSteps.add(createStepStub()); final RootStepResult result = executeStepList(testSteps); checkResult(result, true, false, false); final StepStub step0 = (StepStub) testSteps.get(0); assertOneExecution(step0); assertOneExecution((StepStub) testSteps.get(1)); assertEquals("context step counter", 2 + 1, step0.getContext().getCurrentStepNumber()); } public void testFailure() throws IOException { final StepStub failStep = new FailStepStub(); configureStep(failStep); final RootStepResult result = executeAndAssertNoSuccess(failStep); checkResult(result, false, true, false); } public void testError() throws IOException { final StepStub errorStep = new ErrorStepStub(); configureStep(errorStep); final RootStepResult result = executeAndAssertNoSuccess(errorStep); checkResult(result, false, false, true); } private static void checkResult(final RootStepResult result, final boolean success, final boolean failure, final boolean error) { assertEquals("success", success, result.isSuccessful()); assertEquals("failure", failure, result.isFailure()); assertEquals("error", error, result.isError()); } private RootStepResult executeAndAssertNoSuccess(final StepStub unsuccessfulStep) throws IOException { final List<Step> testSteps = new ArrayList<Step>(); testSteps.add(unsuccessfulStep); final StepStub goodStep = createStepStub(); testSteps.add(goodStep); final RootStepResult result = executeStepList(testSteps); assertNotExecuted(goodStep); // assertSame(unsuccessfulStep, result.getStep()); // FIXME: needed? assertNotNull("exception not null", result.getException()); return result; } private RootStepResult executeStepList(final List testSteps) throws IOException { final WebtestTask webtest = new WebtestTask(); webtest.setName("my simple test"); configureTask(webtest); registerDummyResultReporter(getProject()); webtest.addConfig(getConfigurationStub()); webtest.getConfig().setHaltonerror(false); webtest.getConfig().setHaltonfailure(false); webtest.getConfig().setResultpath(getTemporaryResultPathFolder()); final TestStepSequence steps = (TestStepSequence) getStep(); webtest.addSteps(steps); for (final Iterator iter = testSteps.iterator(); iter.hasNext();) { steps.addStep((Step) iter.next()); } webtest.execute(); final RootStepResult result = webtest.getResultBuilderListener().getRootResult(); assertNotNull(result); return result; } private static void assertOneExecution(final StepStub step) { assertEquals("Execution counter", 1, step.getCallCount()); } private static void assertNotExecuted(StepStub step) { assertEquals("Execution counter", 0, step.getCallCount()); } private Configuration getConfigurationStub() { final Configuration config = new Configuration(); configureTask(config); return config; } }