// Copyright � 2002-2005 Canoo Engineering AG, Switzerland. package com.canoo.webtest.steps.store; import java.io.File; import java.io.FileNotFoundException; import org.apache.commons.io.FileUtils; import org.apache.tools.ant.BuildException; import com.canoo.webtest.engine.StepExecutionException; import com.canoo.webtest.engine.StepFailedException; import com.canoo.webtest.self.TestBlock; import com.canoo.webtest.self.ThrowAssert; import com.canoo.webtest.steps.BaseStepTestCase; import com.canoo.webtest.steps.Step; /** * Test for {@link StorePropertyStep}. * * @author Paul King * @author Marc Guillemot */ public class StorePropertyStepTest extends BaseStepTestCase { private StorePropertyStep fStep; protected void setUp() throws Exception { super.setUp(); fStep = (StorePropertyStep) getStep(); } protected Step createStep() { return new StorePropertyStep(); } // <storeProperty name="MyName" value="MyValue" /> public void testExecute() { fStep.setName("MyName"); fStep.setValue("MyValue"); fStep.execute(); assertEquals("MyValue", fStep.getWebtestProperty("MyName")); } // <storeProperty name="MyName" value="MyValue" propertyType="ant" /> public void testExecuteAnt() { fStep.setName("MyName"); fStep.setValue("MyValue"); fStep.setPropertyType(Step.PROPERTY_TYPE_ANT); fStep.execute(); assertEquals("MyValue", fStep.getWebtestProperty("MyName", Step.PROPERTY_TYPE_ANT)); } // <storeProperty name="MyName" value="MyValue" propertyType="dynamic" /> public void testExecuteDynamic() { fStep.setName("MyName"); fStep.setValue("MyValue"); fStep.setPropertyType(Step.PROPERTY_TYPE_DYNAMIC); fStep.execute(); assertEquals("MyValue", fStep.getWebtestProperty("MyName", Step.PROPERTY_TYPE_DYNAMIC)); } // <storeProperty name="MyName" value="3+4" eval="true" /> public void testEval() { fStep.setName("MyName"); fStep.setValue("3+4"); fStep.setEval("true"); fStep.execute(); assertEquals("7", fStep.getWebtestProperty("MyName")); } public void testEvalDirect() { assertEquals("7", fStep.doEvaluate("3+4")); assertEquals("14", fStep.doEvaluate("3.5 * 4")); assertEquals("4.5", fStep.doEvaluate("14 / 4 + 1")); assertEquals("8", fStep.doEvaluate("199 % 5 * 2")); assertEquals("9", fStep.doEvaluate("199 % (5 * 2)")); assertEquals("2.5", fStep.doEvaluate("(20 - 6) / 4 - 1")); fStep.setWebtestProperty("six", "6"); assertEquals("2.5", fStep.doEvaluate("(20 - #{six}) / 4 - 1")); fStep.setWebtestProperty("eight", "8"); assertEquals("48", fStep.doEvaluate("#{eight} * #{six}")); fStep.setWebtestProperty("six", "six"); String message = ThrowAssert.assertThrows(StepFailedException.class, new TestBlock() { public void call() throws Throwable { assertEquals("2.5", fStep.doEvaluate("(20 - #{six}) / 4 - 1")); } }); assertEquals("Attempted to evaluate non-numeric property '#{six}': For input string: \"six\"", message); } // <storeProperty name="MyName" /> public void testNoNameAttribute() throws Exception { fStep.setName("MyName"); assertStepRejectsNullParam("value", getExecuteStepTestBlock()); } // <storeProperty name="MyName" value="MyValue" propertyType="unknown"/> public void testUnknownPropertyType() { fStep.setName("MyName"); fStep.setValue("MyValue"); fStep.setPropertyType("unknown"); String msg = ThrowAssert.assertThrows(StepExecutionException.class, getExecuteStepTestBlock()); assertTrue(msg.indexOf("Unknown propertyType") != -1); } // <storeProperty value="MyValue" /> public void testNoValueAttribute() throws Exception { fStep.setValue("MyValue"); assertStepRejectsNullParam("name", getExecuteStepTestBlock()); } // <storeProperty file="myPropertyFile" /> with not existing file public void testFileNotExisting() throws Exception { final File tmpFile = File.createTempFile("foo", "foo"); tmpFile.delete(); assertFalse(tmpFile.exists()); fStep.setFile(tmpFile); final Throwable t = ThrowAssert.assertThrows("", BuildException.class, getExecuteStepTestBlock()); assertInstanceOf(FileNotFoundException.class, t.getCause()); } // <storeProperty file="myPropertyFile" /> public void testFile() throws Exception { // ensure that the properties don't exist assertNull(fStep.getWebtestProperty("prop1")); assertNull(fStep.getWebtestProperty("prop2")); final File tmpFile = File.createTempFile("foo", "foo"); tmpFile.deleteOnExit(); FileUtils.writeStringToFile(tmpFile, "prop1=hello\nprop2=bye bye"); assertTrue(tmpFile.exists()); fStep.setFile(tmpFile); fStep.execute(); assertEquals("hello", fStep.getWebtestProperty("prop1")); assertEquals("bye bye", fStep.getWebtestProperty("prop2")); } }