DELTASPIKE-468 improved support for custom configs
Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/9367a51f Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/9367a51f Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/9367a51f Branch: refs/heads/master Commit: 9367a51fdaef6f5b0cba9ceca4d7153bb9fbfe26 Parents: 2bfcd31 Author: gpetracek <[email protected]> Authored: Wed Jan 29 19:20:23 2014 +0100 Committer: gpetracek <[email protected]> Committed: Thu Jan 30 11:09:21 2014 +0100 ---------------------------------------------------------------------- .../impl/jsf/MockedJsf2TestContainer.java | 85 ++++++++++++++++---- 1 file changed, 68 insertions(+), 17 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/deltaspike/blob/9367a51f/deltaspike/modules/test-control/impl/src/main/java/org/apache/deltaspike/testcontrol/impl/jsf/MockedJsf2TestContainer.java ---------------------------------------------------------------------- diff --git a/deltaspike/modules/test-control/impl/src/main/java/org/apache/deltaspike/testcontrol/impl/jsf/MockedJsf2TestContainer.java b/deltaspike/modules/test-control/impl/src/main/java/org/apache/deltaspike/testcontrol/impl/jsf/MockedJsf2TestContainer.java index e6e2b2b..c8952c3 100644 --- a/deltaspike/modules/test-control/impl/src/main/java/org/apache/deltaspike/testcontrol/impl/jsf/MockedJsf2TestContainer.java +++ b/deltaspike/modules/test-control/impl/src/main/java/org/apache/deltaspike/testcontrol/impl/jsf/MockedJsf2TestContainer.java @@ -18,6 +18,7 @@ */ package org.apache.deltaspike.testcontrol.impl.jsf; +import org.apache.deltaspike.core.api.config.ConfigResolver; import org.apache.deltaspike.testcontrol.spi.ExternalContainer; import org.apache.myfaces.test.mock.MockApplicationFactory; import org.apache.myfaces.test.mock.MockExceptionHandlerFactory; @@ -35,6 +36,7 @@ import org.apache.myfaces.test.mock.MockServletContext; import org.apache.myfaces.test.mock.lifecycle.MockLifecycleFactory; import org.apache.myfaces.test.mock.visit.MockVisitContextFactory; +import javax.el.ExpressionFactory; import javax.enterprise.context.RequestScoped; import javax.enterprise.context.SessionScoped; import javax.faces.FactoryFinder; @@ -50,47 +52,90 @@ import javax.faces.lifecycle.LifecycleFactory; import javax.faces.render.RenderKit; import javax.faces.render.RenderKitFactory; import java.lang.annotation.Annotation; +import java.util.HashMap; import java.util.Locale; +import java.util.Map; +//known restriction: faces-config.xml files are ignored public class MockedJsf2TestContainer implements ExternalContainer { - protected MockServletConfig config = null; - protected MockServletContext servletContext = null; + protected MockServletConfig servletConfig; + protected MockServletContext servletContext; - protected Lifecycle lifecycle = null; - protected RenderKit renderKit = null; - protected Application application = null; + protected Lifecycle lifecycle; + protected RenderKit renderKit; + protected Application application; - protected FacesContext facesContext = null; - protected MockHttpServletRequest request = null; - protected MockHttpServletResponse response = null; - protected MockHttpSession session = null; + protected FacesContext facesContext; + protected MockHttpServletRequest request; + protected MockHttpServletResponse response; + protected MockHttpSession session; + + protected Map<String, String> containerConfig; public void boot() { + initContainerConfig(); initServletObjects(); initJsf(); } + protected void initContainerConfig() + { + containerConfig = new HashMap<String, String>(); + for (Map.Entry<String, String> entry : ConfigResolver.getAllProperties().entrySet()) + { + if (entry.getKey().startsWith("org.apache.myfaces.") || entry.getKey().startsWith("javax.faces.") || + entry.getKey().startsWith("facelets.")) + { + containerConfig.put(entry.getKey(), entry.getValue()); + } + } + } + protected void initServletObjects() { this.servletContext = new MockServletContext(); - this.config = new MockServletConfig(this.servletContext); + this.servletConfig = new MockServletConfig(this.servletContext); + applyContainerConfig(); + } + + protected void applyContainerConfig() + { + //add the default values + servletContext.addInitParameter("javax.faces.PROJECT_STAGE", "UnitTest"); + servletContext.addInitParameter("javax.faces.PARTIAL_STATE_SAVING", "true"); + servletContext.addInitParameter("javax.faces.FACELETS_REFRESH_PERIOD", "-1"); + + servletContext.addInitParameter("org.apache.myfaces.INITIALIZE_ALWAYS_STANDALONE", "true"); + servletContext.addInitParameter("org.apache.myfaces.spi.InjectionProvider", + "org.apache.myfaces.spi.impl.NoInjectionAnnotationInjectionProvider"); + servletContext.addInitParameter("org.apache.myfaces.config.annotation.LifecycleProvider", + "org.apache.myfaces.config.annotation.NoInjectionAnnotationLifecycleProvider"); + servletConfig.addInitParameter("org.apache.myfaces.CHECKED_VIEWID_CACHE_ENABLED", "false"); + + servletContext.addInitParameter(ExpressionFactory.class.getName(), "org.apache.el.ExpressionFactoryImpl"); + //add custom values (might replace the default values) + for (Map.Entry<String, String> entry : containerConfig.entrySet()) + { + servletContext.addInitParameter(entry.getKey(), entry.getValue()); + } } protected void initJsf() { - initJsfFactories(); + FactoryFinder.releaseFactories(); + + onPreInitJsf(); initLifecycle(); initApplication(); initRenderKit(); } - protected void initJsfFactories() + protected void onPreInitJsf() { - FactoryFinder.releaseFactories(); - + //init mocked jsf factories addFactory(FactoryFinder.APPLICATION_FACTORY, MockApplicationFactory.class.getName()); addFactory(FactoryFinder.FACES_CONTEXT_FACTORY, MockFacesContextFactory.class.getName()); addFactory(FactoryFinder.LIFECYCLE_FACTORY, MockLifecycleFactory.class.getName()); @@ -109,7 +154,7 @@ public class MockedJsf2TestContainer implements ExternalContainer { LifecycleFactory lifecycleFactory = (LifecycleFactory) FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY); - this.lifecycle = lifecycleFactory.getLifecycle(LifecycleFactory.DEFAULT_LIFECYCLE); + this.lifecycle = lifecycleFactory.getLifecycle(getLifecycleId()); } protected void initApplication() @@ -151,7 +196,7 @@ public class MockedJsf2TestContainer implements ExternalContainer this.request.setServletContext(this.servletContext); } - private void initResponse() + protected void initResponse() { this.response = new MockHttpServletResponse(); } @@ -214,7 +259,8 @@ public class MockedJsf2TestContainer implements ExternalContainer public void shutdown() { this.application = null; - this.config = null; + this.servletConfig = null; + this.containerConfig = null; this.lifecycle = null; this.renderKit = null; this.servletContext = null; @@ -227,4 +273,9 @@ public class MockedJsf2TestContainer implements ExternalContainer { return 1000; //default in ds } + + protected String getLifecycleId() + { + return LifecycleFactory.DEFAULT_LIFECYCLE; + } }
