package org.jboss.seam.test.unit; import org.jboss.seam.Component; import org.jboss.seam.Seam; import org.jboss.seam.contexts.ApplicationContext; import org.jboss.seam.contexts.Context; import org.jboss.seam.contexts.Lifecycle; import org.jboss.seam.contexts.ServletLifecycle; import org.jboss.seam.core.Init; import org.jboss.seam.core.Manager; import org.jboss.seam.mock.MockExternalContext; import org.jboss.seam.mock.MockServletContext; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; /** * A simple base test class that registers components according to class so that * they can be looked up successfully using ComponentClass.instance(), as * required by much of Seam's internal API. */ public abstract class MockContainerTest { @BeforeMethod protected void setUp() { MockServletContext servletContext = new MockServletContext(); ServletLifecycle.beginApplication(servletContext); MockExternalContext externalContext = new MockExternalContext(servletContext); Context appContext = new ApplicationContext(externalContext.getApplicationMap()); installComponent(appContext, Manager.class); for (Class c : getComponentsToInstall()) { installComponent(appContext, c); } appContext.set(Seam.getComponentName(Init.class), new Init()); Lifecycle.beginCall(); } protected Class[] getComponentsToInstall() { return new Class[] {}; } @AfterMethod protected void tearDown() { Lifecycle.endCall(); } protected void installComponent(Context appContext, Class clazz) { appContext.set(Seam.getComponentName(clazz) + ".component", new Component(clazz)); } }