package test.configuration;

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

/**
 * afterGroups test with more than one group
 * 
 * @author cbeust
 * @date Mar 7, 2006
 */
public class ConfigurationGroups5SampleTest {

  private boolean m_after = false;
  private boolean m_run1 = false;
  private boolean m_run2 = false;
  private int m_afterCount = 0;

  @Test
  public void f() {
    log("f");
  }
  
  @Test(groups = "cg5-1")
  public void run1() {
    log("run1");
    if (m_afterCount == 0) Assert.assertFalse(m_after);
    m_run1 = true;
  }

  @Test(groups = "cg5-2")
  public void run2() {
    log("run2");
    if (m_afterCount == 0) Assert.assertFalse(m_after);
    m_run2 = true;
  }

  @AfterGroups({ "cg5-1", "cg5-2"})
  public void after() {
    log("after");
    m_afterCount++;
    Assert.assertTrue(m_run1 || m_run2);
    if (m_afterCount == 0) Assert.assertFalse(m_after);
    m_after = true;
  }
  
  @Test(dependsOnGroups = { "cg5-1", "cg5-2" })
  public void verify() {
    log("verify");
    Assert.assertTrue(m_run1, "run1() wasn't run");
    Assert.assertTrue(m_run2, "run2() wasn't run");
    Assert.assertTrue(m_after, "after1() wasn't run");
    Assert.assertEquals(2, m_afterCount);
  }
  
  private void log(String string) {
    ppp(string);
  }

  private void ppp(String s) {
    if (false) {
      System.out.println("[ConfigurationGroups5SampleTest] " + s);
    }
  }

}
