aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/junitparams/internal/parameters/ParametersReader.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/junitparams/internal/parameters/ParametersReader.java')
-rw-r--r--src/main/java/junitparams/internal/parameters/ParametersReader.java55
1 files changed, 55 insertions, 0 deletions
diff --git a/src/main/java/junitparams/internal/parameters/ParametersReader.java b/src/main/java/junitparams/internal/parameters/ParametersReader.java
new file mode 100644
index 0000000..b0f5ec3
--- /dev/null
+++ b/src/main/java/junitparams/internal/parameters/ParametersReader.java
@@ -0,0 +1,55 @@
+package junitparams.internal.parameters;
+
+import java.util.List;
+
+import org.junit.runners.model.FrameworkMethod;
+
+import junitparams.FileParameters;
+import junitparams.Parameters;
+
+import static java.lang.String.*;
+import static java.util.Arrays.*;
+
+public class ParametersReader {
+
+ public static final String ILLEGAL_STATE_EXCEPTION_MESSAGE
+ = format("Illegal usage of JUnitParams in method %s. " +
+ "Check that you have only used one supported parameters evaluation strategy. " +
+ "Common case is to use both %s and %s annotations.",
+ "%s", Parameters.class, FileParameters.class);
+
+ private final FrameworkMethod frameworkMethod;
+ private final List<ParametrizationStrategy> strategies;
+
+ public ParametersReader(Class<?> testClass, FrameworkMethod frameworkMethod) {
+ this.frameworkMethod = frameworkMethod;
+
+ strategies = asList(
+ new ParametersFromCustomProvider(frameworkMethod),
+ new ParametersFromValue(frameworkMethod),
+ new ParametersFromExternalClassProvideMethod(frameworkMethod),
+ new ParametersFromExternalClassMethod(frameworkMethod),
+ new ParametersFromTestClassMethod(frameworkMethod, testClass)
+ );
+ }
+
+ public Object[] read() {
+ boolean strategyAlreadyFound = false;
+ Object[] parameters = new Object[]{};
+
+ for (ParametrizationStrategy strategy : strategies) {
+ if (strategy.isApplicable()) {
+ if (strategyAlreadyFound) {
+ illegalState();
+ }
+ parameters = strategy.getParameters();
+ strategyAlreadyFound = true;
+ }
+ }
+ return parameters;
+ }
+
+ private void illegalState() {
+ throw new IllegalStateException(format(ILLEGAL_STATE_EXCEPTION_MESSAGE, frameworkMethod.getName()));
+ }
+}