defined recipe annotations to do declarative test case set up

git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main@11508 71c3de6d-444a-0410-be80-ed276b4c234a
This commit is contained in:
kohsuke 2008-08-15 21:53:08 +00:00
parent 1a2168f614
commit dc7f18fb34
3 changed files with 90 additions and 3 deletions

View File

@ -105,12 +105,12 @@ public abstract class HudsonTestCase extends TestCase {
withNewHome();
}
protected HudsonTestCase withNewHome() {
public HudsonTestCase withNewHome() {
homeLoader = HudsonHomeLoader.NEW;
return this;
}
protected HudsonTestCase withExistingHome(File source) {
public HudsonTestCase withExistingHome(File source) {
homeLoader = new CopyExisting(source);
return this;
}
@ -120,7 +120,7 @@ public abstract class HudsonTestCase extends TestCase {
* See https://svn.dev.java.net/svn/hudson/trunk/hudson/main/test/src/main/preset-data/
* for available datasets and what they mean.
*/
protected HudsonTestCase withPresetData(String name) {
public HudsonTestCase withPresetData(String name) {
name = "/" + name + ".zip";
URL res = getClass().getResource(name);
if(res==null) throw new IllegalArgumentException("No such data set found: "+name);

View File

@ -0,0 +1,39 @@
package org.jvnet.hudson.test.recipes;
import org.jvnet.hudson.test.HudsonTestCase;
import java.lang.annotation.Documented;
import static java.lang.annotation.ElementType.METHOD;
import java.lang.annotation.Retention;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Target;
/**
* Runs a test case with one of the preset HUDSON_HOME data set.
*
* @author Kohsuke Kawaguchi
*/
@Documented
@Recipe(@PresetData.RunnerImpl.class)
@Target(METHOD)
@Retention(RUNTIME)
public @interface PresetData {
/**
* One of the preset data to choose from.
*/
DataSet value();
public enum DataSet {
/**
* Secured Hudson that has no anonymous read access.
* Any logged in user can do anything.
*/
NO_ANONYMOUS_READACCESS
}
public class RunnerImpl extends Recipe.Runner<PresetData> {
public void setup(HudsonTestCase testCase, PresetData recipe) {
testCase.withPresetData(recipe.value().name().toLowerCase().replace('_','-'));
}
}
}

View File

@ -0,0 +1,48 @@
package org.jvnet.hudson.test.recipes;
import org.jvnet.hudson.test.HudsonTestCase;
import java.lang.annotation.Documented;
import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
import java.lang.annotation.Retention;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Target;
import java.lang.annotation.Annotation;
import junit.framework.TestCase;
/**
* Meta-annotation for recipe annotations, which controls
* the test environment set up.
*
* @author Kohsuke Kawaguchi
*/
@Retention(RUNTIME)
@Documented
@Target(ANNOTATION_TYPE)
public @interface Recipe {
/**
* Specifies the class that sets up the test environment.
*
* <p>
* When a recipe annotation is placed on a test method,
*/
Class<? extends Runner> value();
/**
* The code that implements the recipe semantics.
*
* @param <T>
* The recipe annotation associated with this runner.
*/
public abstract class Runner<T extends Annotation> {
/**
* Called during {@link TestCase#setUp()} to prepare the test environment.
*/
public void setup(HudsonTestCase testCase, T recipe) {}
/**
* Called during {@link TestCase#tearDown()} to shut down the test environment.
*/
public void tearDown(HudsonTestCase testCase, T recipe) {}
}
}