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

com.github.dakusui.scriptiveunit.exceptions.FacadeException Maven / Gradle / Ivy

package com.github.dakusui.scriptiveunit.exceptions;

import com.github.dakusui.scriptiveunit.ScriptiveSuiteSet;
import com.github.dakusui.scriptiveunit.ScriptiveSuiteSet.SuiteScripts;
import com.github.dakusui.scriptiveunit.ScriptiveUnit;
import org.junit.runner.RunWith;

import java.util.Objects;
import java.util.function.Predicate;

import static com.github.dakusui.scriptiveunit.core.Utils.prettify;

public class FacadeException extends ScriptiveUnitException {
  private FacadeException(String message) {
    super(message);
  }

  public static Class validateDriverClass(Class driverClass) {
    return validate(
        "Validates '%s' as a driver class.",
        FacadeException::new,
        driverClass,
        Objects::nonNull,
        aClass -> driverClass.isAnnotationPresent(RunWith.class),
        (Predicate>) aClass -> driverClass.getAnnotation(RunWith.class).value().equals(ScriptiveUnit.class),
        (Predicate>) FacadeException::hasPublicConstructor,
        (Predicate>) FacadeException::constructorHasNoParameter
    );
  }

  public static Class validateSuiteSetClass(Class suiteSetClass) {
    return validate(
        "Validates '%s' as a suite set class.",
        FacadeException::new,
        suiteSetClass,
        prettify("is non-null", (Predicate) Objects::nonNull),
        prettify("has @RunWith", (Class aClass) -> suiteSetClass.isAnnotationPresent(RunWith.class)),
        prettify("has ScriptiveSuiteSet.class as value of @RunWith", (Class aClass) -> suiteSetClass.getAnnotation(RunWith.class).value().equals(ScriptiveSuiteSet.class)),
        prettify("has @SuiteScripts", (Class aClass) -> aClass.isAnnotationPresent(SuiteScripts.class)),
        prettify("has one and only one public constructor", FacadeException::hasPublicConstructor),
        prettify("only one constructor has no parameter", FacadeException::constructorHasNoParameter)
    );
  }


  private static boolean hasPublicConstructor(Class driverClass) {
    return driverClass.getConstructors().length == 1;
  }

  private static boolean constructorHasNoParameter(Class driverClass) {
    return driverClass.getConstructors()[0].getParameterTypes().length == 0;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy