package test.dataprovider;

import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

import java.lang.reflect.Method;

public class MethodSample {

  @DataProvider(name = "dp1")
  public Object[][] createData(Method m) {
    Assert.assertEquals(m.getName(), "test1");
    Assert.assertEquals(m.getDeclaringClass(), MethodSample.class);

    return new Object[][]{{"Cedric"}, {"Alois"}};
  }

  @Test(dataProvider = "dp1")
  public void test1(String s) {
  }

  public static int m_test2 = 0;
  public static int m_test3 = 0;

  @DataProvider(name = "dp2")
  public Object[][] createData2(Method m) {
    switch (m.getName()) {
      case "test2":
        m_test2++;
        break;
      case "test3":
        m_test3++;
        break;
      default:
        throw new RuntimeException("Received method " + m + ", expected test2 or test3");
    }
    Assert.assertEquals(m.getDeclaringClass(), MethodSample.class);

    return new Object[][]{{"Cedric"}};
  }

  @Test(dataProvider = "dp2")
  public void test2(String s) {
  }

  @Test(dataProvider = "dp2")
  public void test3(String s) {
  }
}
