01: package com.canoo.webtest.extension.groovy;
02:
03: import groovy.lang.GroovyRuntimeException;
04:
05: import org.apache.log4j.Level;
06: import org.apache.log4j.Logger;
07: import org.codehaus.groovy.control.CompilationFailedException;
08:
09: import com.canoo.webtest.self.BufferingAppender;
10: import com.canoo.webtest.steps.BaseStepTestCase;
11: import com.canoo.webtest.steps.Step;
12: import com.canoo.webtest.steps.request.InvokePage;
13: import com.canoo.webtest.steps.verify.VerifyXPath;
14:
15: /**
16: * Tests for {@link GroovyStep}.
17: *
18: * @author Marc Guillemot
19: * @author Denis N. Antonioli
20: */
21: public class GroovyStepTest extends BaseStepTestCase {
22:
23: protected Step createStep() {
24: return new GroovyStep();
25: }
26:
27: public void testInvocationException() {
28: final GroovyStep step = (GroovyStep) getStep();
29:
30: step.addText("something invalid");
31:
32: final Throwable t = assertErrorOnExecute(step,
33: "should not compile", "Error invoking groovy");
34: final Throwable cause = t.getCause();
35: assertInstanceOf(GroovyRuntimeException.class, cause);
36: }
37:
38: public void testCompilationException() {
39: final GroovyStep step = (GroovyStep) getStep();
40:
41: step.addText("(");
42:
43: final Throwable t = assertErrorOnExecute(step,
44: "should not compile", "Cannot compile groovy code: (");
45: final Throwable cause = t.getCause();
46: assertInstanceOf(CompilationFailedException.class, cause);
47: }
48:
49: /**
50: * Test that print(ln) done in Groovy is correctly "forwarded" to the step's log
51: */
52: public void testPrint() {
53: final GroovyStep step = (GroovyStep) getStep();
54:
55: step.addText("println 1234; print 'a'; println 'b'; print 'c'");
56:
57: final Logger logger = Logger.getRootLogger();
58: final BufferingAppender spoofAppender = new BufferingAppender();
59: final Level originalLogLevel = logger.getLevel();
60: logger.addAppender(spoofAppender);
61: logger.setLevel(Level.DEBUG);
62:
63: step.execute();
64:
65: assertTrue(spoofAppender.containsMessage("1234"));
66: assertTrue(spoofAppender.containsMessage("ab"));
67: assertTrue(spoofAppender.containsMessage("c"));
68:
69: Logger.getRootLogger().removeAppender(spoofAppender);
70: Logger.getRootLogger().setLevel(originalLogLevel);
71: }
72:
73: public void testMacroStepBuilder() {
74: final String script = "def ant = new com.canoo.webtest.extension.groovy.MacroStepBuilder(step)\n"
75: + "ant.invoke(url: 'about:blank')\n"
76: + "ant.verifyXPath(xpath: 'true()', description: 'bla')";
77:
78: final GroovyStep step = (GroovyStep) getStep();
79: step.getProject().addTaskDefinition("invoke", InvokePage.class);
80: step.getProject().addTaskDefinition("verifyXPath",
81: VerifyXPath.class);
82: step.addText(script);
83: step.execute();
84: }
85: }
|