package org.jvnet.hudson.test; import org.kohsuke.stapler.StaplerRequest; import org.kohsuke.stapler.StaplerResponse; import groovy.lang.Closure; import hudson.model.AbstractBuild; import hudson.model.BuildListener; import hudson.tasks.Builder; import hudson.Launcher; import java.util.concurrent.Callable; import java.io.IOException; /** * {@link HudsonTestCase} with more convenience methods for Groovy. * * @author Kohsuke Kawaguchi */ public abstract class GroovyHudsonTestCase extends HudsonTestCase { /** * Executes the given closure on the server, in the context of an HTTP request. * This is useful for testing some methods that require {@link StaplerRequest} and {@link StaplerResponse}. * * <p> * The closure will get the request and response as parameters. */ public Object executeOnServer(final Closure c) throws Exception { return executeOnServer(new Callable<Object>() { public Object call() throws Exception { return c.call(); } }); } /** * Wraps a closure as a {@link Builder}. */ public Builder builder(final Closure c) { return new TestBuilder() { public boolean perform(AbstractBuild<?,?> build, Launcher launcher, BuildListener listener) throws InterruptedException, IOException { Object r = c.call(new Object[]{build,launcher,listener}); if (r instanceof Boolean) return (Boolean)r; return true; } }; } }