1package test.objectfactory;
2
3import org.testng.TestNG;
4import org.testng.TestNGException;
5import org.testng.annotations.AfterMethod;
6import org.testng.annotations.Test;
7import org.testng.xml.XmlClass;
8import org.testng.xml.XmlSuite;
9import test.TestHelper;
10
11/**
12 * @author Hani Suleiman Date: Mar 6, 2007 Time: 3:52:19 PM
13 */
14public class CustomFactoryTest {
15  @Test
16  public void setFactoryOnTestNG() {
17    XmlSuite suite = TestHelper.createSuite("test.objectfactory.Simple", "objectfactory");
18    // suite.setObjectFactory(new LoggingObjectFactory());
19    TestNG tng = TestHelper.createTestNG(suite);
20    tng.setObjectFactory(LoggingObjectFactory.class);
21    tng.run();
22    assert LoggingObjectFactory.invoked == 1 : "Logging factory invoked "
23        + LoggingObjectFactory.invoked + " times";
24  }
25
26  @AfterMethod
27  public void resetCount() {
28    LoggingObjectFactory.invoked = 0;
29  }
30
31  @Test
32  public void setFactoryOnSuite() {
33    XmlSuite suite = TestHelper.createSuite("test.objectfactory.Simple", "objectfactory");
34    suite.setObjectFactory(new LoggingObjectFactory());
35    TestNG tng = TestHelper.createTestNG(suite);
36    tng.run();
37    assert LoggingObjectFactory.invoked == 1 : "Logging factory invoked "
38        + LoggingObjectFactory.invoked + " times";
39  }
40
41  @Test(enabled = false, description = "This broke after I made the change to enable AbstractTest")
42  public void setFactoryByAnnotation() {
43    XmlSuite suite = TestHelper.createSuite("test.objectfactory.Simple", "objectfactory");
44    suite.getTests().get(0).getXmlClasses()
45        .add(new XmlClass("test.objectfactory.MyFactoryFactory"));
46    TestNG tng = TestHelper.createTestNG(suite);
47    tng.run();
48    assert LoggingObjectFactory.invoked == 1 : "Logging factory invoked "
49        + LoggingObjectFactory.invoked + " times";
50  }
51
52  @Test
53  public void factoryReceivesContext() {
54    XmlSuite suite = TestHelper.createSuite("test.objectfactory.Simple", "objectfactory");
55    suite.getTests().get(0).getXmlClasses()
56        .add(new XmlClass("test.objectfactory.ContextAwareFactoryFactory"));
57    TestNG tng = TestHelper.createTestNG(suite);
58    tng.run();
59  }
60
61  @Test(expectedExceptions = TestNGException.class)
62  public void setInvalidMethodFactoryByAnnotation() {
63    XmlSuite suite = TestHelper.createSuite("test.objectfactory.Simple", "objectfactory");
64    suite.getTests().get(0).getXmlClasses()
65        .add(new XmlClass("test.objectfactory.BadMethodFactoryFactory"));
66    TestNG tng = TestHelper.createTestNG(suite);
67    tng.run();
68  }
69}
70