Home | History | Annotate | Download | only in parameters
      1 package junitparams.internal.parameters;
      2 
      3 import org.junit.runners.model.FrameworkMethod;
      4 
      5 import junitparams.custom.ParametersProvider;
      6 import junitparams.internal.annotation.CustomParametersDescriptor;
      7 import junitparams.internal.annotation.FrameworkMethodAnnotations;
      8 
      9 public class ParametersFromCustomProvider implements ParametrizationStrategy {
     10 
     11     private final FrameworkMethodAnnotations frameworkMethodAnnotations;
     12 
     13     public ParametersFromCustomProvider(FrameworkMethod frameworkMethod) {
     14         frameworkMethodAnnotations = new FrameworkMethodAnnotations(frameworkMethod);
     15     }
     16 
     17     @Override
     18     public boolean isApplicable() {
     19         return frameworkMethodAnnotations.hasCustomParameters();
     20     }
     21 
     22     @Override
     23     public Object[] getParameters() {
     24         CustomParametersDescriptor parameters = frameworkMethodAnnotations.getCustomParameters();
     25         ParametersProvider provider = instantiate(parameters.provider());
     26         provider.initialize(parameters.annotation());
     27         return provider.getParameters();
     28     }
     29 
     30     private ParametersProvider instantiate(Class<? extends ParametersProvider> providerClass) {
     31         try {
     32             return providerClass.newInstance();
     33         } catch (Exception e) {
     34             throw new RuntimeException("Your Provider class must have a public no-arg constructor!", e);
     35         }
     36     }
     37 
     38 }
     39