mirror of https://github.com/jenkinsci/jenkins.git
				
				
				
			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:
		
							parent
							
								
									1a2168f614
								
							
						
					
					
						commit
						dc7f18fb34
					
				|  | @ -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); | ||||
|  |  | |||
|  | @ -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('_','-')); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | @ -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) {} | ||||
|     } | ||||
| } | ||||
		Loading…
	
		Reference in New Issue