package org.testng;

import java.io.Serializable;
import java.util.List;

/**
 * This interface is used to augment or replace TestNG's algorithm to 
 * decide whether a test method should be included in a test run.
 * 
 * Created on Sep 26, 2005
 * @author cbeust
 */
public interface IMethodSelector extends Serializable {
  
  /**
   * @param context The selector context.  The implementation of this method
   * can invoke setHalted(true) to indicate that no other Method Selector
   * should be invoked by TestNG after this one.  Additionally, this
   * implementation can manipulate the Map object returned by
   * getUserData().
   * @param method The test method
   * @param isTestMethod true if this is a @Test method, false if it's a 
   * configuration method
   * @return true if this method should be included in the test run, false
   * otherwise
   */
  public boolean includeMethod(IMethodSelectorContext context,
      ITestNGMethod method, boolean isTestMethod);

  /**
   * Invoked when all the test methods are known so that the method selector
   * can perform additional work, such as adding the transitive closure of
   * all the groups being included and depended upon.
   */
  public void setTestMethods(List<ITestNGMethod> testMethods);
  
}
