Project

General

Profile

Download (2.86 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
 *
3
 */
4
package eu.etaxonomy.dataportal.junit;
5

    
6
import java.util.ArrayList;
7
import java.util.Collections;
8
import java.util.List;
9

    
10
import org.junit.runner.Runner;
11
import org.junit.runner.notification.RunNotifier;
12
import org.junit.runners.BlockJUnit4ClassRunner;
13
import org.junit.runners.Suite;
14
import org.junit.runners.model.FrameworkMethod;
15
import org.junit.runners.model.InitializationError;
16
import org.junit.runners.model.Statement;
17
import org.junit.runners.model.TestClass;
18

    
19
import eu.etaxonomy.dataportal.DataPortalContext;
20
import eu.etaxonomy.dataportal.DataPortalContexts;
21
import eu.etaxonomy.dataportal.selenium.CdmDataPortalTestBase;
22

    
23

    
24
/**
25
 * @author a.kohlbecker
26
 *
27
 */
28
public class DataPortalContextSuite extends Suite{
29

    
30
	private final List<Runner> runners = new ArrayList<Runner>();
31

    
32

    
33
	private class TestClassRunnerWithDataPortalContext extends
34
	BlockJUnit4ClassRunner {
35

    
36
		private final DataPortalContext context;
37

    
38
		/**
39
		 * @param klass
40
		 * @throws InitializationError
41
		 */
42
		public TestClassRunnerWithDataPortalContext(Class<?> klass, DataPortalContext context) throws InitializationError {
43
			super(klass);
44
			this.context = context;
45
		}
46

    
47
		@Override
48
		public Object createTest() throws Exception {
49
			Object testClass = getTestClass().getOnlyConstructor().newInstance();
50
			((CdmDataPortalTestBase)testClass).setContext(context);
51
			return testClass;
52
		}
53

    
54
		@Override
55
		protected String getName() {
56
			return String.format("%s@%s", getTestClass().getName(), context.name());
57
		}
58

    
59
		@Override
60
		protected String testName(final FrameworkMethod method) {
61
			return String.format("%s@%s", method.getName(), context.name());
62

    
63
		}
64

    
65
		@Override
66
		protected Statement classBlock(RunNotifier notifier) {
67
			return childrenInvoker(notifier);
68
		}
69

    
70
		@Override
71
		protected void validateZeroArgConstructor(List<Throwable> errors) {
72
			super.validateZeroArgConstructor(errors);
73
			validateCdmDataPortalTestBase(errors);
74
		}
75

    
76
		protected void validateCdmDataPortalTestBase(List<Throwable> errors) {
77
			// constructor should have exactly one arg
78
			if ( ! CdmDataPortalTestBase.class.isAssignableFrom(getTestClass().getJavaClass()) ){
79
				String gripe= "Test class must be a subclass of " + CdmDataPortalTestBase.class.getName();
80
				errors.add(new Exception(gripe));
81
			}
82
		}
83
	}
84

    
85
	/**
86
	 * Only called reflectively. Do not use programmatically.
87
	 */
88
	public DataPortalContextSuite(Class<?> klass) throws InitializationError {
89
		super(klass, Collections.<Runner>emptyList());
90
		DataPortalContexts dataPortalContextsAnotation = getTestClass().getJavaClass().getAnnotation(DataPortalContexts.class);
91
		for (DataPortalContext cntxt : dataPortalContextsAnotation.value()) {
92
			runners.add(new TestClassRunnerWithDataPortalContext(klass, cntxt));
93
		}
94
	}
95

    
96
	@Override
97
	protected List<Runner> getChildren() {
98
		return runners;
99
	}
100

    
101
}
    (1-1/1)