001: // Copyright © 2002-2005 Canoo Engineering AG, Switzerland.
002: package com.canoo.webtest.steps.store;
003:
004: import com.canoo.webtest.engine.StepExecutionException;
005: import com.canoo.webtest.engine.StepFailedException;
006: import com.canoo.webtest.self.TestBlock;
007: import com.canoo.webtest.self.ThrowAssert;
008: import com.canoo.webtest.steps.BaseStepTestCase;
009: import com.canoo.webtest.steps.Step;
010:
011: /**
012: * Test for {@link StorePropertyStep}.
013: *
014: * @author Paul King
015: */
016: public class StorePropertyStepTest extends BaseStepTestCase {
017: private StorePropertyStep fStep;
018:
019: protected void setUp() throws Exception {
020: super .setUp();
021: fStep = (StorePropertyStep) getStep();
022: }
023:
024: protected Step createStep() {
025: return new StorePropertyStep();
026: }
027:
028: // <storeProperty name="MyName" value="MyValue" />
029: public void testExecute() {
030: fStep.setName("MyName");
031: fStep.setValue("MyValue");
032: fStep.execute();
033: assertEquals("MyValue", fStep.getWebtestProperty("MyName"));
034: }
035:
036: // <storeProperty name="MyName" value="MyValue" propertyType="ant" />
037: public void testExecuteAnt() {
038: fStep.setName("MyName");
039: fStep.setValue("MyValue");
040: fStep.setPropertyType(Step.PROPERTY_TYPE_ANT);
041: fStep.execute();
042: assertEquals("MyValue", fStep.getWebtestProperty("MyName",
043: Step.PROPERTY_TYPE_ANT));
044: }
045:
046: // <storeProperty name="MyName" value="MyValue" propertyType="dynamic" />
047: public void testExecuteDynamic() {
048: fStep.setName("MyName");
049: fStep.setValue("MyValue");
050: fStep.setPropertyType(Step.PROPERTY_TYPE_DYNAMIC);
051: fStep.execute();
052: assertEquals("MyValue", fStep.getWebtestProperty("MyName",
053: Step.PROPERTY_TYPE_DYNAMIC));
054: }
055:
056: // <storeProperty name="MyName" value="3+4" eval="true" />
057: public void testEval() {
058: fStep.setName("MyName");
059: fStep.setValue("3+4");
060: fStep.setEval("true");
061: fStep.execute();
062: assertEquals("7", fStep.getWebtestProperty("MyName"));
063: }
064:
065: public void testEvalDirect() {
066: assertEquals("7", fStep.doEvaluate("3+4"));
067: assertEquals("14", fStep.doEvaluate("3.5 * 4"));
068: assertEquals("4.5", fStep.doEvaluate("14 / 4 + 1"));
069: assertEquals("8", fStep.doEvaluate("199 % 5 * 2"));
070: assertEquals("9", fStep.doEvaluate("199 % (5 * 2)"));
071: assertEquals("2.5", fStep.doEvaluate("(20 - 6) / 4 - 1"));
072: fStep.setWebtestProperty("six", "6");
073: assertEquals("2.5", fStep.doEvaluate("(20 - #{six}) / 4 - 1"));
074: fStep.setWebtestProperty("eight", "8");
075: assertEquals("48", fStep.doEvaluate("#{eight} * #{six}"));
076: fStep.setWebtestProperty("six", "six");
077: String message = ThrowAssert.assertThrows(
078: StepFailedException.class, new TestBlock() {
079: public void call() throws Throwable {
080: assertEquals("2.5", fStep
081: .doEvaluate("(20 - #{six}) / 4 - 1"));
082: }
083: });
084: assertEquals(
085: "Attempted to evaluate non-numeric property '#{six}': For input string: \"six\"",
086: message);
087: }
088:
089: // <storeProperty name="MyName" />
090: public void testNoNameAttribute() throws Exception {
091: fStep.setName("MyName");
092: assertStepRejectsNullParam("value", getExecuteStepTestBlock());
093: }
094:
095: // <storeProperty name="MyName" value="MyValue" propertyType="unknown"/>
096: public void testUnknownPropertyType() {
097: fStep.setName("MyName");
098: fStep.setValue("MyValue");
099: fStep.setPropertyType("unknown");
100: String msg = ThrowAssert
101: .assertThrows(StepExecutionException.class,
102: getExecuteStepTestBlock());
103: assertTrue(msg.indexOf("Unknown propertyType") != -1);
104: }
105:
106: // <storeProperty value="MyValue" />
107: public void testNoValueAttribute() throws Exception {
108: fStep.setValue("MyValue");
109: assertStepRejectsNullParam("name", getExecuteStepTestBlock());
110: }
111:
112: }
|