package test.dependent;

import java.util.List;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Factory;
import org.testng.annotations.Test;
import org.testng.collections.Lists;

/**
 * Verify that only instances that fail cause dependency failures. In other words, when run, this
 * test should show: passed = [f#1 f#3 g#1 g#3], failed = [f#2], skipped = [g#2]
 *
 * @author Cedric Beust <cedric@beust.com>
 */
public class InstanceSkipSampleTest {

  private final int m_n;
  public static List<String> m_list = Lists.newArrayList();

  @Factory(dataProvider = "dp")
  public InstanceSkipSampleTest(int n) {
    m_n = n;
  }

  @DataProvider
  public static Object[][] dp() {
    return new Object[][] {
      new Object[] {1}, new Object[] {2}, new Object[] {3},
    };
  }

  @Test
  public void f() {
    if (m_n == 2) throw new RuntimeException();
    log("f");
  }

  @Test(dependsOnMethods = "f")
  public void g() {
    log("g");
  }

  private void log(String s) {
    m_list.add(s + "#" + m_n);
  }

  @Override
  public String toString() {
    return "" + m_n;
  }
}
