// Copyright � 2004-2005 ASERT. Released under the Canoo Webtest license. package com.canoo.webtest.extension; import java.io.File; import org.apache.tools.ant.Project; import com.canoo.webtest.boundary.ResetScriptRunner; import com.canoo.webtest.steps.BaseStepTestCase; import com.canoo.webtest.steps.Step; /** * Test class for {@link ScriptStep}.<p> * * @author Paul King, ASERT */ public class ScriptStepTest extends BaseStepTestCase { private ScriptStep fStep; protected Step createStep() { return new ScriptStep(); } protected void setUp() throws Exception { super.setUp(); fStep = (ScriptStep) getStep(); } public void testVerifyParameterUsage() { assertStepRejectsEmptyParam("language", getExecuteStepTestBlock()); fStep.setLanguage("javascript"); final Throwable t = assertErrorOnExecute(fStep, "", ""); assertEquals("Either \"src\" attribute or nested script text must be given.", t.getMessage()); } public void testInvalidUsageBadFile() throws Exception { fStep.setLanguage("groovy"); final File notExisting = new File("WillNotBeFound.groovy") { public boolean exists() { return false; } }; fStep.setSrc(notExisting); final Throwable t = assertErrorOnExecute(fStep, "", ""); assertTrue(t.getMessage().indexOf("Could not find") != -1); } public void testInvalidUsageBadLanguage() throws Exception { fStep.setLanguage("cobol"); fStep.setSrc(new File("selftests/tests/GMacroSteps.groovy")); final Throwable t = assertErrorOnExecute(fStep, "", ""); assertTrue(t.getMessage().indexOf("unsupported language") != -1); } private static final class ResetScriptRunnerStub extends ResetScriptRunner { private final String fLanguage; private ResetScriptRunnerStub(String language) { fLanguage = language; } public String getLanguage() { return fLanguage; } } public void testInvalidUsageSwapLanguageWithKeep() throws Exception { checkLanguageSwap("groovy", "javascript"); checkLanguageSwap("ruby", "java"); } private void checkLanguageSwap(String lang1, String lang2) { getContext().setRunner(new ResetScriptRunnerStub(lang1)); fStep.setProject(new Project()); fStep.setLanguage(lang2); fStep.setKeep("true"); final Throwable t = assertErrorOnExecute(fStep, "", ""); assertEquals("You may not change 'language' to '" + lang2 + "' after previously using the 'keep' attribute (was: " + lang1 + ")", t.getMessage()); } }