001: // Copyright © 2002-2007 Canoo Engineering AG, Switzerland.
002: package com.canoo.webtest.ant;
003:
004: import java.util.ArrayList;
005: import java.util.Iterator;
006: import java.util.List;
007:
008: import org.apache.tools.ant.Project;
009:
010: import com.canoo.webtest.engine.Configuration;
011: import com.canoo.webtest.engine.StepExecutionException;
012: import com.canoo.webtest.reporting.RootStepResult;
013: import com.canoo.webtest.self.ErrorStepStub;
014: import com.canoo.webtest.self.FailStepStub;
015: import com.canoo.webtest.self.StepStub;
016: import com.canoo.webtest.self.TestBlock;
017: import com.canoo.webtest.self.ThrowAssert;
018: import com.canoo.webtest.steps.BaseStepTestCase;
019: import com.canoo.webtest.steps.Step;
020: import com.canoo.webtest.steps.request.InvokePage;
021:
022: /**
023: * Unit tests for {@link TestStepSequence}.
024: * @author Unknown
025: * @author Marc Guillemot
026: */
027: public class TestStepSequenceTest extends BaseStepTestCase {
028: public void testCreation() {
029: final TestStepSequence sequence = new TestStepSequence();
030: assertNotNull(sequence);
031: try {
032: sequence.doExecute(); // coverage
033: } catch (Exception ex) {
034: // ignore
035: }
036: }
037:
038: protected Step createStep() {
039: final Project project = new Project();
040: final WebtestTask webtest = new WebtestTask();
041: webtest.setProject(project);
042: final TestStepSequence step = new TestStepSequence();
043: step.setProject(project);
044: webtest.addSteps(step);
045: return step;
046: }
047:
048: public void testAddStep() {
049: final TestStepSequence steps = (TestStepSequence) getStep();
050:
051: final InvokePage step = new InvokePage();
052: step.setDescription("aStepName");
053: step.setUrl("aRelativeUrl");
054: steps.addStep(step);
055: assertEquals("#steps", 1, steps.getSteps().size());
056: }
057:
058: /**
059: * Creates a dummy step
060: * @return the initialized step
061: */
062: protected StepStub createStepStub() {
063: final StepStub step = new StepStub();
064: configureStep(step);
065: return step;
066: }
067:
068: public void testNoSteps() {
069: final StepExecutionException exception = (StepExecutionException) ThrowAssert
070: .assertThrows("", StepExecutionException.class,
071: new TestBlock() {
072: public void call() throws Exception {
073: getStep().execute();
074: }
075: });
076:
077: assertInstanceOf(IllegalArgumentException.class, exception
078: .getCause());
079: }
080:
081: public void testExecutionOneEntry() {
082: final List testSteps = new ArrayList();
083: testSteps.add(createStepStub());
084: final RootStepResult result = executeStepList(testSteps);
085: checkResult(result, true, false, false);
086: final StepStub step = (StepStub) testSteps.get(0);
087: assertOneExecution(step);
088: assertEquals("context step counter", 1 + 1, step.getContext()
089: .getCurrentStepNumber());
090: }
091:
092: public void testExecutionMultipleEntries() {
093: final List testSteps = new ArrayList();
094: testSteps.add(createStepStub());
095: testSteps.add(createStepStub());
096: final RootStepResult result = executeStepList(testSteps);
097: checkResult(result, true, false, false);
098: final StepStub step0 = (StepStub) testSteps.get(0);
099: assertOneExecution(step0);
100: assertOneExecution((StepStub) testSteps.get(1));
101: assertEquals("context step counter", 2 + 1, step0.getContext()
102: .getCurrentStepNumber());
103: }
104:
105: public void testFailure() {
106: final StepStub failStep = new FailStepStub();
107: configureStep(failStep);
108: final RootStepResult result = executeAndAssertNoSuccess(failStep);
109: checkResult(result, false, true, false);
110: }
111:
112: public void testError() {
113: final StepStub errorStep = new ErrorStepStub();
114: configureStep(errorStep);
115: final RootStepResult result = executeAndAssertNoSuccess(errorStep);
116: checkResult(result, false, false, true);
117: }
118:
119: private static void checkResult(final RootStepResult result,
120: final boolean success, final boolean failure,
121: final boolean error) {
122: assertEquals("success", success, result.isSuccessful());
123: assertEquals("failure", failure, result.isFailure());
124: assertEquals("error", error, result.isError());
125: }
126:
127: private RootStepResult executeAndAssertNoSuccess(
128: final StepStub unsuccessfulStep) {
129: final List testSteps = new ArrayList();
130: testSteps.add(unsuccessfulStep);
131: final StepStub goodStep = createStepStub();
132: testSteps.add(goodStep);
133: final RootStepResult result = executeStepList(testSteps);
134: assertNotExecuted(goodStep);
135: // assertSame(unsuccessfulStep, result.getStep()); // FIXME: needed?
136: assertNotNull("exception not null", result.getException());
137: return result;
138: }
139:
140: private RootStepResult executeStepList(final List testSteps) {
141: final WebtestTask webtest = new WebtestTask();
142: webtest.setName("my simple test");
143: configureTask(webtest);
144: webtest.addConfig(getConfigurationStub());
145: webtest.getConfig().setHaltonerror(false);
146: webtest.getConfig().setHaltonfailure(false);
147: final TestStepSequence steps = (TestStepSequence) getStep();
148: webtest.addSteps(steps);
149: for (final Iterator iter = testSteps.iterator(); iter.hasNext();) {
150: steps.addStep((Step) iter.next());
151: }
152: webtest.execute();
153: final RootStepResult result = webtest
154: .getResultBuilderListener().getRootResult();
155: assertNotNull(result);
156: return result;
157: }
158:
159: private static void assertOneExecution(final StepStub step) {
160: assertEquals("Execution counter", 1, step.getCallCount());
161: }
162:
163: private static void assertNotExecuted(StepStub step) {
164: assertEquals("Execution counter", 0, step.getCallCount());
165: }
166:
167: private Configuration getConfigurationStub() {
168: final Configuration config = new Configuration();
169: configureTask(config);
170: return config;
171: }
172: }
|