package com.canoo.webtest.extension.groovy;
import groovy.lang.GroovyRuntimeException;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.codehaus.groovy.control.CompilationFailedException;
import com.canoo.webtest.self.BufferingAppender;
import com.canoo.webtest.steps.BaseStepTestCase;
import com.canoo.webtest.steps.Step;
import com.canoo.webtest.steps.request.InvokePage;
import com.canoo.webtest.steps.verify.VerifyXPath;
/**
* Tests for {@link GroovyStep}.
*
* @author Marc Guillemot
* @author Denis N. Antonioli
*/
public class GroovyStepTest extends BaseStepTestCase {
protected Step createStep() {
return new GroovyStep();
}
public void testInvocationException() {
final GroovyStep step = (GroovyStep) getStep();
step.addText("something invalid");
final Throwable t = assertErrorOnExecute(step, "should not compile", "Error invoking groovy");
final Throwable cause = t.getCause();
assertInstanceOf(GroovyRuntimeException.class, cause);
}
public void testCompilationException() {
final GroovyStep step = (GroovyStep) getStep();
step.addText("(");
final Throwable t = assertErrorOnExecute(step, "should not compile", "Cannot compile groovy code: (");
final Throwable cause = t.getCause();
assertInstanceOf(CompilationFailedException.class, cause);
}
/**
* Test that print(ln) done in Groovy is correctly "forwarded" to the step's log
*/
public void testPrint() {
final GroovyStep step = (GroovyStep) getStep();
step.addText("println 1234; print 'a'; println 'b'; print 'c'");
final Logger logger = Logger.getRootLogger();
final BufferingAppender spoofAppender = new BufferingAppender();
final Level originalLogLevel = logger.getLevel();
logger.addAppender(spoofAppender);
logger.setLevel(Level.DEBUG);
step.execute();
assertTrue(spoofAppender.containsMessage("1234"));
assertTrue(spoofAppender.containsMessage("ab"));
assertTrue(spoofAppender.containsMessage("c"));
Logger.getRootLogger().removeAppender(spoofAppender);
Logger.getRootLogger().setLevel(originalLogLevel);
}
public void testMacroStepBuilder()
{
final String script =
"def ant = new com.canoo.webtest.extension.groovy.MacroStepBuilder(step)\n"
+ "ant.invoke(url: 'about:blank')\n"
+ "ant.verifyXPath(xpath: 'true()', description: 'bla')";
final GroovyStep step = (GroovyStep) getStep();
step.getProject().addTaskDefinition("invoke", InvokePage.class);
step.getProject().addTaskDefinition("verifyXPath", VerifyXPath.class);
step.addText(script);
step.execute();
}
}