All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.dakusui.jcunit8.runners.junit4.annotations.ConfigureWith Maven / Gradle / Ivy

package com.github.dakusui.jcunit8.runners.junit4.annotations;

import com.github.dakusui.jcunit8.pipeline.Config;
import com.github.dakusui.jcunit8.pipeline.Requirement;
import com.github.dakusui.jcunit8.pipeline.stages.Generator;

import java.lang.annotation.Annotation;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;

import static java.lang.annotation.RetentionPolicy.RUNTIME;

@Retention(RUNTIME)
@Inherited
public @interface ConfigureWith {
  ConfigureWith DEFAULT_INSTANCE = new ConfigureWith() {

    @Override
    public Class annotationType() {
      return ConfigureWith.class;
    }

    @Override
    public Class value() {
      return ConfigFactory.Default.class;
    }

    @Override
    public Class parameterSpace() {
      return Object.class;
    }
  };

  Class value() default ConfigFactory.Default.class;

  /**
   * Specifies a class to define a parameter space, which has parameters, constraints
   * and non-constraint conditions. If this value is not used, (or {@code Object.class}
   * is specified, ) the same class to which {@code CondigureWith} annotation is
   * attached is used to create a parameter space Object.
   *
   * @see com.github.dakusui.jcunit8.factorspace.ParameterSpace
   * @see ParameterSource
   * @see Condition
   */
  Class parameterSpace() default Object.class;

  interface ConfigFactory {
    Config create();

    abstract class Base implements ConfigFactory {
      abstract protected Requirement requirement();

      abstract protected Generator.Factory generatorFactory();

      @Override
      public Config create() {
        return Config.Builder.forTuple(requirement()).withGeneratorFactory(generatorFactory()).build();
      }
    }

    class Default extends Base {
      @SuppressWarnings("WeakerAccess")
      protected Requirement requirement() {
        return new Requirement.Builder()
            .withStrength(2)
            .withNegativeTestGeneration(false)
            .build();
      }

      @Override
      protected Generator.Factory generatorFactory() {
        return new Generator.Factory.Standard();
      }
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy