1package test.hook;
2
3import org.testng.Assert;
4import org.testng.annotations.BeforeMethod;
5import org.testng.annotations.Test;
6
7import test.BaseTest;
8
9/**
10 * Because IHookable and IConfigurable are global, it's safer to run them in a
11 * sub-TestNG object, otherwise they will be run for your entire test suite...
12 *
13 * @author cbeust
14 */
15public class HookableTest extends BaseTest {
16
17  @BeforeMethod
18  public void bm() {
19    HookSuccessTest.m_hook = false;
20    HookSuccessTest.m_testWasRun = false;
21    HookSuccessTest.m_parameter = null;
22    HookSuccess599Test.m_hook = false;
23    HookSuccess599Test.m_testWasRun = false;
24    HookSuccess599Test.m_parameter = null;
25    HookFailureTest.m_hook = false;
26    HookFailureTest.m_testWasRun = false;
27    HookListener.m_hook = false;
28    BaseConfigurable.m_hookCount = 0;
29    BaseConfigurable.m_bc = false;
30    BaseConfigurable.m_bm = false;
31    BaseConfigurable.m_bs = false;
32    BaseConfigurable.m_bt = false;
33    BaseConfigurable.m_methodName = null;
34    ConfigurableListener.m_hookCount = 0;
35    ConfigurableListener.m_methodName = null;
36    ConfigurableSuccessWithListenerTest.m_bc = false;
37    ConfigurableSuccessWithListenerTest.m_bm = false;
38  }
39
40  @Test
41  public void hookSuccess() {
42    addClass(HookSuccessTest.class);
43    run();
44
45    verifyTests("Passed", new String[] { "verify" }, getPassedTests());
46    Assert.assertTrue(HookSuccessTest.m_hook);
47    Assert.assertTrue(HookSuccessTest.m_testWasRun);
48    Assert.assertEquals(HookSuccessTest.m_parameter, "foo");
49  }
50
51  @Test(description = "https://github.com/cbeust/testng/issues/599")
52  public void issue599() {
53    addClass(HookSuccess599Test.class);
54    run();
55
56    verifyTests("Passed", new String[] { "verify" }, getPassedTests());
57    Assert.assertTrue(HookSuccess599Test.m_hook);
58    Assert.assertTrue(HookSuccess599Test.m_testWasRun);
59    Assert.assertEquals(HookSuccess599Test.m_parameter, "foo");
60  }
61
62  @Test(description = "https://github.com/cbeust/testng/pull/862")
63  public void issue862() {
64    addClass(HookSuccess862Test.class);
65    run();
66
67    verifyTests("Passed", new String[] { "verify" }, getPassedTests());
68  }
69
70  @Test
71  public void hookSuccessWithListener() {
72    addClass(HookSuccessWithListenerTest.class);
73    run();
74
75    verifyTests("Passed", new String[] { "verify" }, getPassedTests());
76    Assert.assertTrue(HookListener.m_hook);
77  }
78
79  @Test
80  public void hookFailure() {
81    addClass(HookFailureTest.class);
82    run();
83
84    // To investigate: TestNG still thinks the test passed since it can't know whether
85    // the hook ended up invoking the test or not.
86//    verifyTests("Passed", new String[] { }, getPassedTests());
87    Assert.assertTrue(HookFailureTest.m_hook);
88    Assert.assertFalse(HookFailureTest.m_testWasRun);
89  }
90
91  @Test
92  public void configurableSuccess() {
93    addClass(ConfigurableSuccessTest.class);
94    run();
95
96    Assert.assertEquals(BaseConfigurable.m_hookCount, 4);
97    Assert.assertTrue(BaseConfigurable.m_bc);
98    Assert.assertTrue(BaseConfigurable.m_bm);
99    Assert.assertTrue(BaseConfigurable.m_bs);
100    Assert.assertTrue(BaseConfigurable.m_bt);
101    Assert.assertEquals(BaseConfigurable.m_methodName, "hookWasRun");
102  }
103
104  @Test
105  public void configurableSuccessWithListener() {
106    addClass(ConfigurableSuccessWithListenerTest.class);
107    run();
108
109    Assert.assertEquals(ConfigurableListener.m_hookCount, 4);
110    Assert.assertTrue(ConfigurableSuccessWithListenerTest.m_bs);
111    Assert.assertTrue(ConfigurableSuccessWithListenerTest.m_bt);
112    Assert.assertTrue(ConfigurableSuccessWithListenerTest.m_bc);
113    Assert.assertTrue(ConfigurableSuccessWithListenerTest.m_bm);
114    Assert.assertEquals(ConfigurableListener.m_methodName, "hookWasRun");
115  }
116
117  @Test
118  public void configurableFailure() {
119    addClass(ConfigurableFailureTest.class);
120    run();
121
122    Assert.assertEquals(BaseConfigurable.m_hookCount, 4);
123    Assert.assertFalse(BaseConfigurable.m_bc);
124    Assert.assertFalse(BaseConfigurable.m_bm);
125    Assert.assertFalse(BaseConfigurable.m_bs);
126    Assert.assertFalse(BaseConfigurable.m_bt);
127  }
128
129}
130