package test.dataprovider;

import org.testng.Assert;
import org.testng.TestNG;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

import test.BaseTest;

public class FailedDataProviderTest extends BaseTest {
  static int m_total = 0;

  @BeforeMethod
  public void init() {
    m_total = 0;
  }

  /**
   * Make sure that if a test method fails in the middle of a data provider, the rest
   * of the data set is still run.
   */
  @Test
  public void allMethodsShouldBeInvoked() {
    TestNG tng = new TestNG();
    tng.setTestClasses(new Class[] { FailedDataProviderSample.class });
    tng.setVerbose(0);
    tng.run();

    Assert.assertEquals(m_total, 6);
  }

  @Test
  public void failedDataProviderShouldCauseSkip() {
    addClass("test.dataprovider.DependentSampleTest");
    
    run();
    String[] passed = {
      "method1"
    };
    String[] failed = {
      "method1"
    };
    String[] skipped = {
      "method2"
    };
    verifyTests("Failed", failed, getFailedTests());
    verifyTests("Passed", passed, getPassedTests());
    verifyTests("Skipped", skipped, getSkippedTests());
  }
}

