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

com.kidsoncoffee.cheesecakes.runner.validator.AllParametersAreAnnotatedValidator Maven / Gradle / Ivy

package com.kidsoncoffee.cheesecakes.runner.validator;

import com.kidsoncoffee.cheesecakes.Parameter;
import org.junit.Test;
import org.junit.runners.model.FrameworkMethod;
import org.junit.runners.model.TestClass;
import org.junit.validator.TestClassValidator;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @author fernando.chovich
 * @since 1.0
 */
public class AllParametersAreAnnotatedValidator implements TestClassValidator {
  @Override
  public List validateTestClass(TestClass testClass) {
    return testClass.getAnnotatedMethods(Test.class).stream()
        .filter(AllParametersAreAnnotatedValidator::parametersAreMissingAnnotation)
        .map(AllParametersAreAnnotatedValidator::parameterMissingException)
        .collect(Collectors.toList());
  }

  private static boolean parametersAreMissingAnnotation(final FrameworkMethod method) {
    return Arrays.stream(method.getMethod().getParameters())
        .anyMatch(parameter -> notRequisite(parameter) && notExpectation(parameter));
  }

  private static boolean notRequisite(java.lang.reflect.Parameter parameter) {
    return !parameter.isAnnotationPresent(Parameter.Requisite.class);
  }

  private static boolean notExpectation(java.lang.reflect.Parameter parameter) {
    return !parameter.isAnnotationPresent(Parameter.Expectation.class);
  }

  private static Exception parameterMissingException(FrameworkMethod method) {
    return new Exception(
        String.format(
            "The method '%s' does not have all parameters annotated with '%s' or '%s'.",
            method.getName(), Parameter.Requisite.class, Parameter.Expectation.class));
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy