package junitparams.internal.parameters;
import org.junit.runners.model.FrameworkMethod;
import junitparams.custom.ParametersProvider;
import junitparams.internal.annotation.CustomParametersDescriptor;
import junitparams.internal.annotation.FrameworkMethodAnnotations;
public class ParametersFromCustomProvider implements ParametrizationStrategy {
private final FrameworkMethodAnnotations frameworkMethodAnnotations;
public ParametersFromCustomProvider(FrameworkMethod frameworkMethod) {
frameworkMethodAnnotations = new FrameworkMethodAnnotations(frameworkMethod);
}
@Override
public boolean isApplicable() {
return frameworkMethodAnnotations.hasCustomParameters();
}
@Override
public Object[] getParameters() {
CustomParametersDescriptor parameters = frameworkMethodAnnotations.getCustomParameters();
ParametersProvider provider = instantiate(parameters.provider());
provider.initialize(parameters.annotation());
return provider.getParameters();
}
private ParametersProvider instantiate(Class<? extends ParametersProvider> providerClass) {
try {
return providerClass.newInstance();
} catch (Exception e) {
throw new RuntimeException("Your Provider class must have a public no-arg constructor!", e);
}
}
}