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

org.testng.internal.reflect.AbstractNodeMethodMatcher Maven / Gradle / Ivy

There is a newer version: 7.10.1
Show newest version
package org.testng.internal.reflect;

import java.util.List;
import java.util.Set;

public abstract class AbstractNodeMethodMatcher extends AbstractMethodMatcher {

  private Parameter[] conformingParameters = null;

  public AbstractNodeMethodMatcher(final MethodMatcherContext context) {
    super(context);
  }

  protected Parameter[] getConformingParameters() {
    return conformingParameters;
  }

  /**
   * {@inheritDoc}
   */
  @Override
  protected boolean hasConformance() {
    boolean matching = false;
    for (final Set injects : getConformanceInjectsOrder()) {
      final Parameter[] parameters = ReflectionRecipes.filter(getContext().getMethodParameter(), injects);
      matching = match(parameters, getContext().getArguments());
      if (matching) {
        conformingParameters = parameters;
        break;
      }
    }
    return matching;
  }

  /**
   * @return injects to check against.
   */
  protected abstract List> getConformanceInjectsOrder();

  /**
   * Checks if its possible to gives an array consumable by java method invoker.
   *
   * @param parameters array of parameter instances under question.
   * @param arguments  instances to be verified.
   * @return matches or not
   */
  protected abstract boolean match(final Parameter[] parameters, final Object[] arguments);

  /**
   * {@inheritDoc}
   */
  @Override
  public Object[] getConformingArguments() {
    if (getConforms() == null) {
      conforms();
    }
    if (getConformingParameters() == null) {
      throw new MethodMatcherException(this.getClass().getSimpleName() + " mismatch", getContext().getMethod(),
        getContext().getArguments());
    }

    return ReflectionRecipes.inject(
      getContext().getMethodParameter(),
      InjectableParameter.Assistant.ALL_INJECTS,
      matchingArguments(getConformingParameters(), getContext().getArguments()),
      getContext().getMethod(),
      getContext().getTestContext(),
      getContext().getTestResult()
    );
  }

  /**
   * If possible gives an array consumable by java method invoker.
   *
   * @param parameters array of parameter instances under question.
   * @param arguments  instances to conform.
   * @return conforming argument array
   */
  protected abstract Object[] matchingArguments(final Parameter[] parameters, final Object[] arguments);
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy