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

com.kidsoncoffee.cheesecakes.runner.parameter.converter.ParameterConverterResolver Maven / Gradle / Ivy

package com.kidsoncoffee.cheesecakes.runner.parameter.converter;

import com.kidsoncoffee.cheesecakes.Example;
import com.kidsoncoffee.cheesecakes.Parameter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.lang.reflect.Method;
import java.util.List;
import java.util.Optional;
import java.util.stream.IntStream;

/**
 * Resolves the parameter converters for a {@link Method}.
 *
 * @author fernando.chovich
 * @since 1.0
 */
public class ParameterConverterResolver {

  /** Logger for this factory. */
  private static final Logger LOGGER = LoggerFactory.getLogger(ParameterConverterResolver.class);

  /**
   * The custom converter extractor. These are converters explicitly indicate on a scenario method.
   */
  private final ParameterConverterExtractor customConverterExtractor;

  /** The default converter extractor. These are converters that matches Java common types. */
  private final ParameterConverterExtractor> defaultConverterExtractor;

  public ParameterConverterResolver(
      final ParameterConverterExtractor customConverterExtractor,
      final ParameterConverterExtractor> defaultConverterExtractor) {
    this.customConverterExtractor = customConverterExtractor;
    this.defaultConverterExtractor = defaultConverterExtractor;
  }

  /**
   * Extracts converters for the given example and test method. It will extract the default and
   * custom converters, expecting they will return arrays of the same size and return a merged array
   * of instantiated resolvers giving higher priority to custom over default.
   *
   * 

It will return an optional of an array the same size of the method's parameters. It will as * well follow the signature order. * * @param testMethod The test method. * @param example The example to be run. * @return An optional of an array of parameter converters. */ public Optional resolveConverters( final Method testMethod, final Example.Builder example) { final Optional[] defaultConverters = this.defaultConverterExtractor.extract(example.getSchema()); final Optional[] customConverters = this.customConverterExtractor.extract(testMethod); if (defaultConverters.length != customConverters.length) { LOGGER.error( "The size of the default converters ({}) and custom converters ({}) does not match for {} in {}.", defaultConverters.length, customConverters.length, testMethod.getName(), testMethod.getDeclaringClass()); return Optional.empty(); } return Optional.of( IntStream.range(0, defaultConverters.length) .sequential() .filter(i -> customConverters[i].isPresent() || defaultConverters[i].isPresent()) .mapToObj(i -> customConverters[i].orElseGet(() -> defaultConverters[i].get())) .toArray(Parameter.Converter[]::new)); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy