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

com.github.dakusui.jcunit.plugins.constraints.SmartConstraintChecker Maven / Gradle / Ivy

package com.github.dakusui.jcunit.plugins.constraints;

import com.github.dakusui.jcunit.core.Checks;
import com.github.dakusui.jcunit.core.Utils;
import com.github.dakusui.jcunit.core.factor.Factors;
import com.github.dakusui.jcunit.core.tuples.Tuple;
import com.github.dakusui.jcunit.exceptions.UndefinedSymbol;
import com.github.dakusui.jcunit.runners.core.RunnerContext;
import com.github.dakusui.jcunit.runners.standard.TestCaseUtils;
import com.github.dakusui.jcunit.runners.standard.annotations.Condition;
import org.junit.runners.model.FrameworkMethod;
import org.junit.runners.model.TestClass;

import java.util.List;

public class SmartConstraintChecker extends SmartConstraintCheckerBase {
  private final List constraints;

  public SmartConstraintChecker(
      @Param(source = Param.Source.CONTEXT, contextKey = RunnerContext.Key.TEST_CLASS) final Class testClass,
      @Param(source = Param.Source.CONTEXT, contextKey = RunnerContext.Key.FACTORS) Factors factors
  ) {
    super(factors);
    this.constraints = Utils.transform(new TestClass(testClass).getAnnotatedMethods(Condition.class), new Utils.Form() {
      @Override
      public Constraint apply(final FrameworkMethod in) {
        return new Constraint() {
          @Override
          public boolean check(Tuple tuple) throws UndefinedSymbol {
            try {
              return (Boolean) in.invokeExplosively(TestCaseUtils.toTestObject(testClass, tuple));
            } catch (Throwable throwable) {
              throw Checks.wrap(throwable);
            }
          }

          @Override
          public String tag() {
            return in.getName();
          }
        };
      }
    });
  }

  @Override
  protected List getConstraints() {
    return this.constraints;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy