You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltaspike.apache.org by gp...@apache.org on 2013/12/15 20:46:31 UTC

[1/2] git commit: DELTASPIKE-468 optional integration with myfaces-test (first draft)

Updated Branches:
  refs/heads/master 7f14a66a3 -> fc03723bb


DELTASPIKE-468 optional integration with myfaces-test (first draft)


Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/fc03723b
Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/fc03723b
Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/fc03723b

Branch: refs/heads/master
Commit: fc03723bb17eaf846a8090f93f5059df27524c19
Parents: 7ec889f
Author: gpetracek <gp...@apache.org>
Authored: Sun Dec 15 20:21:49 2013 +0100
Committer: gpetracek <gp...@apache.org>
Committed: Sun Dec 15 20:44:09 2013 +0100

----------------------------------------------------------------------
 deltaspike/modules/jsf/pom.xml                  |  11 -
 deltaspike/modules/test-control/impl/pom.xml    |  36 +++
 .../impl/jsf/MockedJsf2TestContainer.java       | 230 +++++++++++++++++++
 .../testcontrol/uc005/JsfContainerTest.java     | 114 +++++++++
 .../uc006/SkipExternalContainerTest.java        |  45 ++++
 ...deltaspike.testcontrol.spi.ExternalContainer |  18 ++
 deltaspike/parent/pom.xml                       |  27 +++
 7 files changed, 470 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/deltaspike/blob/fc03723b/deltaspike/modules/jsf/pom.xml
----------------------------------------------------------------------
diff --git a/deltaspike/modules/jsf/pom.xml b/deltaspike/modules/jsf/pom.xml
index 06a79b3..8f8c53f 100644
--- a/deltaspike/modules/jsf/pom.xml
+++ b/deltaspike/modules/jsf/pom.xml
@@ -39,17 +39,6 @@
         <module>impl</module>
     </modules>
 
-    <dependencyManagement>
-        <dependencies>
-            <dependency>
-                <groupId>org.apache.myfaces.core</groupId>
-                <artifactId>myfaces-api</artifactId>
-                <version>${myfaces2.version}</version>
-                <scope>provided</scope>
-            </dependency>
-        </dependencies>
-    </dependencyManagement>
-
     <dependencies>
         <!-- JSF API, just for compiling -->
         <dependency>

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/fc03723b/deltaspike/modules/test-control/impl/pom.xml
----------------------------------------------------------------------
diff --git a/deltaspike/modules/test-control/impl/pom.xml b/deltaspike/modules/test-control/impl/pom.xml
index 2b6c0fe..4197e63 100644
--- a/deltaspike/modules/test-control/impl/pom.xml
+++ b/deltaspike/modules/test-control/impl/pom.xml
@@ -65,6 +65,42 @@
             <artifactId>junit</artifactId>
             <scope>provided</scope>
         </dependency>
+
+        <dependency>
+            <groupId>org.apache.myfaces.test</groupId>
+            <artifactId>myfaces-test20</artifactId>
+            <scope>provided</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.myfaces.core</groupId>
+            <artifactId>myfaces-api</artifactId>
+            <scope>provided</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.myfaces.core</groupId>
+            <artifactId>myfaces-impl</artifactId>
+            <scope>provided</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.geronimo.specs</groupId>
+            <artifactId>geronimo-el_2.2_spec</artifactId>
+            <scope>provided</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.geronimo.specs</groupId>
+            <artifactId>geronimo-servlet_2.5_spec</artifactId>
+            <scope>provided</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>commons-logging</groupId>
+            <artifactId>commons-logging</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <build>

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/fc03723b/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
new file mode 100644
index 0000000..e6e2b2b
--- /dev/null
+++ b/deltaspike/modules/test-control/impl/src/main/java/org/apache/deltaspike/testcontrol/impl/jsf/MockedJsf2TestContainer.java
@@ -0,0 +1,230 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.deltaspike.testcontrol.impl.jsf;
+
+import org.apache.deltaspike.testcontrol.spi.ExternalContainer;
+import org.apache.myfaces.test.mock.MockApplicationFactory;
+import org.apache.myfaces.test.mock.MockExceptionHandlerFactory;
+import org.apache.myfaces.test.mock.MockExternalContext;
+import org.apache.myfaces.test.mock.MockFacesContext;
+import org.apache.myfaces.test.mock.MockFacesContextFactory;
+import org.apache.myfaces.test.mock.MockHttpServletRequest;
+import org.apache.myfaces.test.mock.MockHttpServletResponse;
+import org.apache.myfaces.test.mock.MockHttpSession;
+import org.apache.myfaces.test.mock.MockPartialViewContextFactory;
+import org.apache.myfaces.test.mock.MockRenderKit;
+import org.apache.myfaces.test.mock.MockRenderKitFactory;
+import org.apache.myfaces.test.mock.MockServletConfig;
+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.enterprise.context.RequestScoped;
+import javax.enterprise.context.SessionScoped;
+import javax.faces.FactoryFinder;
+import javax.faces.application.Application;
+import javax.faces.application.ApplicationFactory;
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.ExceptionHandler;
+import javax.faces.context.ExceptionHandlerFactory;
+import javax.faces.context.FacesContext;
+import javax.faces.context.FacesContextFactory;
+import javax.faces.lifecycle.Lifecycle;
+import javax.faces.lifecycle.LifecycleFactory;
+import javax.faces.render.RenderKit;
+import javax.faces.render.RenderKitFactory;
+import java.lang.annotation.Annotation;
+import java.util.Locale;
+
+public class MockedJsf2TestContainer implements ExternalContainer
+{
+    protected MockServletConfig config = null;
+    protected MockServletContext servletContext = null;
+
+    protected Lifecycle lifecycle = null;
+    protected RenderKit renderKit = null;
+    protected Application application = null;
+
+    protected FacesContext facesContext = null;
+    protected MockHttpServletRequest request = null;
+    protected MockHttpServletResponse response = null;
+    protected MockHttpSession session = null;
+
+    public void boot()
+    {
+        initServletObjects();
+        initJsf();
+    }
+
+    protected void initServletObjects()
+    {
+        this.servletContext = new MockServletContext();
+        this.config = new MockServletConfig(this.servletContext);
+    }
+
+    protected void initJsf()
+    {
+        initJsfFactories();
+
+        initLifecycle();
+        initApplication();
+        initRenderKit();
+    }
+
+    protected void initJsfFactories()
+    {
+        FactoryFinder.releaseFactories();
+
+        addFactory(FactoryFinder.APPLICATION_FACTORY, MockApplicationFactory.class.getName());
+        addFactory(FactoryFinder.FACES_CONTEXT_FACTORY, MockFacesContextFactory.class.getName());
+        addFactory(FactoryFinder.LIFECYCLE_FACTORY, MockLifecycleFactory.class.getName());
+        addFactory(FactoryFinder.RENDER_KIT_FACTORY, MockRenderKitFactory.class.getName());
+        addFactory(FactoryFinder.EXCEPTION_HANDLER_FACTORY, MockExceptionHandlerFactory.class.getName());
+        addFactory(FactoryFinder.PARTIAL_VIEW_CONTEXT_FACTORY, MockPartialViewContextFactory.class.getName());
+        addFactory(FactoryFinder.VISIT_CONTEXT_FACTORY, MockVisitContextFactory.class.getName());
+    }
+
+    protected void addFactory(String factoryName, String className)
+    {
+        FactoryFinder.setFactory(factoryName, className);
+    }
+
+    protected void initLifecycle()
+    {
+        LifecycleFactory lifecycleFactory =
+                (LifecycleFactory) FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
+        this.lifecycle = lifecycleFactory.getLifecycle(LifecycleFactory.DEFAULT_LIFECYCLE);
+    }
+
+    protected void initApplication()
+    {
+        ApplicationFactory applicationFactory =
+                (ApplicationFactory) FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
+        this.application = applicationFactory.getApplication();
+    }
+
+    protected void initRenderKit()
+    {
+        RenderKitFactory renderKitFactory = (RenderKitFactory) FactoryFinder
+                .getFactory(FactoryFinder.RENDER_KIT_FACTORY);
+        this.renderKit = new MockRenderKit();
+        renderKitFactory.addRenderKit(RenderKitFactory.HTML_BASIC_RENDER_KIT, this.renderKit);
+    }
+
+    @Override
+    public void startScope(Class<? extends Annotation> scopeClass)
+    {
+        if (RequestScoped.class.equals(scopeClass))
+        {
+            initRequest();
+            initResponse();
+
+            initFacesContext();
+
+            initDefaultView();
+        }
+        else if (SessionScoped.class.equals(scopeClass))
+        {
+            initSession();
+        }
+    }
+
+    protected void initRequest()
+    {
+        this.request = new MockHttpServletRequest(this.session);
+        this.request.setServletContext(this.servletContext);
+    }
+
+    private void initResponse()
+    {
+        this.response = new MockHttpServletResponse();
+    }
+
+    protected void initFacesContext()
+    {
+        FacesContextFactory facesContextFactory =
+                (FacesContextFactory) FactoryFinder.getFactory(FactoryFinder.FACES_CONTEXT_FACTORY);
+        this.facesContext = facesContextFactory.getFacesContext(
+                this.servletContext, this.request, this.response, this.lifecycle);
+
+        ((MockFacesContext) this.facesContext).setApplication(this.application);
+        ExceptionHandler exceptionHandler = ((ExceptionHandlerFactory)
+                FactoryFinder.getFactory(FactoryFinder.EXCEPTION_HANDLER_FACTORY)).getExceptionHandler();
+        this.facesContext.setExceptionHandler(exceptionHandler);
+
+        ((MockFacesContext) this.facesContext).setExternalContext(
+                new MockExternalContext(this.servletContext, this.request, this.response));
+    }
+
+    protected void initDefaultView()
+    {
+        UIViewRoot root = new UIViewRoot();
+        root.setViewId("/viewId");
+        root.setLocale(getLocale());
+        root.setRenderKitId(RenderKitFactory.HTML_BASIC_RENDER_KIT);
+        this.facesContext.setViewRoot(root);
+    }
+
+    protected void initSession()
+    {
+        this.session = new MockHttpSession();
+        this.session.setServletContext(this.servletContext);
+    }
+
+    @Override
+    public void stopScope(Class<? extends Annotation> scopeClass)
+    {
+        if (RequestScoped.class.equals(scopeClass))
+        {
+            if (this.facesContext != null)
+            {
+                this.facesContext.release();
+            }
+            this.facesContext = null;
+            this.request = null;
+            this.response = null;
+        }
+        else if (SessionScoped.class.equals(scopeClass))
+        {
+            this.session = null;
+        }
+    }
+
+    protected Locale getLocale()
+    {
+        return Locale.getDefault();
+    }
+
+    public void shutdown()
+    {
+        this.application = null;
+        this.config = null;
+        this.lifecycle = null;
+        this.renderKit = null;
+        this.servletContext = null;
+
+        FactoryFinder.releaseFactories();
+    }
+
+    @Override
+    public int getOrdinal()
+    {
+        return 1000; //default in ds
+    }
+}

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/fc03723b/deltaspike/modules/test-control/impl/src/test/java/org/apache/deltaspike/test/testcontrol/uc005/JsfContainerTest.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/test-control/impl/src/test/java/org/apache/deltaspike/test/testcontrol/uc005/JsfContainerTest.java b/deltaspike/modules/test-control/impl/src/test/java/org/apache/deltaspike/test/testcontrol/uc005/JsfContainerTest.java
new file mode 100644
index 0000000..caebfa7
--- /dev/null
+++ b/deltaspike/modules/test-control/impl/src/test/java/org/apache/deltaspike/test/testcontrol/uc005/JsfContainerTest.java
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.deltaspike.test.testcontrol.uc005;
+
+import org.apache.deltaspike.test.category.SeCategory;
+import org.apache.deltaspike.test.testcontrol.shared.RequestScopedBean;
+import org.apache.deltaspike.test.testcontrol.shared.SessionScopedBean;
+import org.apache.deltaspike.testcontrol.api.TestControl;
+import org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.runner.RunWith;
+
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.FacesContext;
+import javax.faces.render.RenderKitFactory;
+import javax.inject.Inject;
+
+//Usually NOT needed! Currently only needed due to our arquillian-setup
+@Category(SeCategory.class)
+
+
+
+@RunWith(CdiTestRunner.class)
+@TestControl(startExternalContainers = true)
+public class JsfContainerTest
+{
+    @Inject
+    private SessionScopedBean sessionScopedBean;
+
+    @Inject
+    private RequestScopedBean requestScopedBean;
+
+    @Test
+    public void firstTest()
+    {
+        Assert.assertEquals(0, requestScopedBean.getCount());
+        requestScopedBean.increaseCount();
+        Assert.assertEquals(1, requestScopedBean.getCount());
+
+        Assert.assertEquals(0, sessionScopedBean.getCount());
+        sessionScopedBean.increaseCount();
+        Assert.assertEquals(1, sessionScopedBean.getCount());
+
+        Assert.assertNotNull(FacesContext.getCurrentInstance().getViewRoot());
+        Assert.assertEquals("/viewId", FacesContext.getCurrentInstance().getViewRoot().getViewId());
+
+        UIViewRoot uiViewRoot = new UIViewRoot();
+        uiViewRoot.setViewId("/test1.xhtml");
+        uiViewRoot.setRenderKitId(RenderKitFactory.HTML_BASIC_RENDER_KIT);
+        FacesContext.getCurrentInstance().setViewRoot(uiViewRoot);
+        Assert.assertEquals("/test1.xhtml", FacesContext.getCurrentInstance().getViewRoot().getViewId());
+
+        Assert.assertNotNull(FacesContext.getCurrentInstance().getExternalContext());
+        Assert.assertNotNull(FacesContext.getCurrentInstance().getApplication());
+        Assert.assertNotNull(FacesContext.getCurrentInstance().getELContext());
+        Assert.assertNotNull(FacesContext.getCurrentInstance().getPartialViewContext());
+        Assert.assertNotNull(FacesContext.getCurrentInstance().getRenderKit());
+        Assert.assertNotNull(FacesContext.getCurrentInstance().getExceptionHandler());
+
+        Assert.assertNull(FacesContext.getCurrentInstance().getExternalContext().getRequestMap().get("test"));
+        FacesContext.getCurrentInstance().getExternalContext().getRequestMap().put("test", "1");
+        Assert.assertEquals("1", FacesContext.getCurrentInstance().getExternalContext().getRequestMap().get("test"));
+    }
+
+    @Test
+    public void secondTest()
+    {
+        Assert.assertEquals(0, requestScopedBean.getCount());
+        requestScopedBean.increaseCount();
+        Assert.assertEquals(1, requestScopedBean.getCount());
+
+        Assert.assertEquals(0, sessionScopedBean.getCount());
+        sessionScopedBean.increaseCount();
+        Assert.assertEquals(1, sessionScopedBean.getCount());
+
+        Assert.assertNotNull(FacesContext.getCurrentInstance().getViewRoot());
+        Assert.assertEquals("/viewId", FacesContext.getCurrentInstance().getViewRoot().getViewId());
+
+        UIViewRoot uiViewRoot = new UIViewRoot();
+        uiViewRoot.setViewId("/test2.xhtml");
+        uiViewRoot.setRenderKitId(RenderKitFactory.HTML_BASIC_RENDER_KIT);
+        FacesContext.getCurrentInstance().setViewRoot(uiViewRoot);
+        Assert.assertEquals("/test2.xhtml", FacesContext.getCurrentInstance().getViewRoot().getViewId());
+
+        Assert.assertNotNull(FacesContext.getCurrentInstance().getExternalContext());
+        Assert.assertNotNull(FacesContext.getCurrentInstance().getApplication());
+        Assert.assertNotNull(FacesContext.getCurrentInstance().getELContext());
+        Assert.assertNotNull(FacesContext.getCurrentInstance().getPartialViewContext());
+        Assert.assertNotNull(FacesContext.getCurrentInstance().getRenderKit());
+        Assert.assertNotNull(FacesContext.getCurrentInstance().getExceptionHandler());
+
+        Assert.assertNull(FacesContext.getCurrentInstance().getExternalContext().getRequestMap().get("test"));
+        FacesContext.getCurrentInstance().getExternalContext().getRequestMap().put("test", "2");
+        Assert.assertEquals("2", FacesContext.getCurrentInstance().getExternalContext().getRequestMap().get("test"));
+    }
+}

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/fc03723b/deltaspike/modules/test-control/impl/src/test/java/org/apache/deltaspike/test/testcontrol/uc006/SkipExternalContainerTest.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/test-control/impl/src/test/java/org/apache/deltaspike/test/testcontrol/uc006/SkipExternalContainerTest.java b/deltaspike/modules/test-control/impl/src/test/java/org/apache/deltaspike/test/testcontrol/uc006/SkipExternalContainerTest.java
new file mode 100644
index 0000000..c908a8f
--- /dev/null
+++ b/deltaspike/modules/test-control/impl/src/test/java/org/apache/deltaspike/test/testcontrol/uc006/SkipExternalContainerTest.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.deltaspike.test.testcontrol.uc006;
+
+import org.apache.deltaspike.test.category.SeCategory;
+import org.apache.deltaspike.testcontrol.api.TestControl;
+import org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.runner.RunWith;
+
+import javax.faces.context.FacesContext;
+
+//Usually NOT needed! Currently only needed due to our arquillian-setup
+@Category(SeCategory.class)
+
+
+
+@RunWith(CdiTestRunner.class)
+@TestControl(startExternalContainers = false)
+public class SkipExternalContainerTest
+{
+    @Test
+    public void skippedSetupTest()
+    {
+        Assert.assertNull(FacesContext.getCurrentInstance());
+    }
+}

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/fc03723b/deltaspike/modules/test-control/impl/src/test/resources/META-INF/services/org.apache.deltaspike.testcontrol.spi.ExternalContainer
----------------------------------------------------------------------
diff --git a/deltaspike/modules/test-control/impl/src/test/resources/META-INF/services/org.apache.deltaspike.testcontrol.spi.ExternalContainer b/deltaspike/modules/test-control/impl/src/test/resources/META-INF/services/org.apache.deltaspike.testcontrol.spi.ExternalContainer
new file mode 100644
index 0000000..5aff81b
--- /dev/null
+++ b/deltaspike/modules/test-control/impl/src/test/resources/META-INF/services/org.apache.deltaspike.testcontrol.spi.ExternalContainer
@@ -0,0 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+org.apache.deltaspike.testcontrol.impl.jsf.MockedJsf2TestContainer
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/fc03723b/deltaspike/parent/pom.xml
----------------------------------------------------------------------
diff --git a/deltaspike/parent/pom.xml b/deltaspike/parent/pom.xml
index d91db0c..d105ab9 100644
--- a/deltaspike/parent/pom.xml
+++ b/deltaspike/parent/pom.xml
@@ -613,6 +613,33 @@
                 <scope>test</scope>
             </dependency>
 
+            <dependency>
+                <groupId>org.apache.myfaces.core</groupId>
+                <artifactId>myfaces-api</artifactId>
+                <version>${myfaces2.version}</version>
+                <scope>provided</scope>
+            </dependency>
+
+            <dependency>
+                <groupId>org.apache.myfaces.core</groupId>
+                <artifactId>myfaces-impl</artifactId>
+                <version>${myfaces2.version}</version>
+                <scope>provided</scope>
+            </dependency>
+
+            <dependency>
+                <groupId>org.apache.myfaces.test</groupId>
+                <artifactId>myfaces-test20</artifactId>
+                <version>1.0.5</version>
+                <scope>provided</scope>
+            </dependency>
+
+            <dependency>
+                <groupId>commons-logging</groupId>
+                <artifactId>commons-logging</artifactId>
+                <version>1.1.1</version>
+                <scope>provided</scope>
+            </dependency>
         </dependencies>
 
     </dependencyManagement>


[2/2] git commit: DELTASPIKE-466 improved external-container handling

Posted by gp...@apache.org.
DELTASPIKE-466 improved external-container handling


Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/7ec889fe
Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/7ec889fe
Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/7ec889fe

Branch: refs/heads/master
Commit: 7ec889fe2e6085fc03b96ec491da3a89376dc6c4
Parents: 7f14a66
Author: gpetracek <gp...@apache.org>
Authored: Sun Dec 15 20:25:15 2013 +0100
Committer: gpetracek <gp...@apache.org>
Committed: Sun Dec 15 20:44:09 2013 +0100

----------------------------------------------------------------------
 .../deltaspike/testcontrol/api/TestControl.java |  1 +
 .../testcontrol/api/junit/CdiTestRunner.java    | 34 ++++++++++++++------
 2 files changed, 25 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/deltaspike/blob/7ec889fe/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/TestControl.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/TestControl.java b/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/TestControl.java
index c492c97..baba3cb 100644
--- a/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/TestControl.java
+++ b/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/TestControl.java
@@ -55,6 +55,7 @@ public @interface TestControl
 
     /**
      * Requires additional service-loader config
+     * Currently only supported on class-level
      */
     boolean startExternalContainers() default true;
 }

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/7ec889fe/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/junit/CdiTestRunner.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/junit/CdiTestRunner.java b/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/junit/CdiTestRunner.java
index 9b331a9..af9d560 100644
--- a/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/junit/CdiTestRunner.java
+++ b/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/junit/CdiTestRunner.java
@@ -632,24 +632,38 @@ public class CdiTestRunner extends BlockJUnit4ClassRunner
 
         private void onScopeStarted(Class<? extends Annotation> scopeClass)
         {
-            if (this.externalContainers != null)
+            List<ExternalContainer> externalContainerList = collectExternalContainers(this);
+
+            for (ExternalContainer externalContainer : externalContainerList)
             {
-                for (ExternalContainer externalContainer : this.externalContainers)
-                {
-                    externalContainer.startScope(scopeClass);
-                }
+                externalContainer.startScope(scopeClass);
             }
         }
 
         private void onScopeStopped(Class<? extends Annotation> scopeClass)
         {
-            if (this.externalContainers != null)
+            List<ExternalContainer> externalContainerList = collectExternalContainers(this);
+
+            for (ExternalContainer externalContainer : externalContainerList)
             {
-                for (ExternalContainer externalContainer : this.externalContainers)
-                {
-                    externalContainer.stopScope(scopeClass);
-                }
+                externalContainer.stopScope(scopeClass);
+            }
+        }
+
+        private static List<ExternalContainer> collectExternalContainers(ContainerAwareTestContext testContext)
+        {
+            List<ExternalContainer> result = new ArrayList<ExternalContainer>();
+
+            if (testContext.externalContainers != null)
+            {
+                result.addAll(testContext.externalContainers);
+            }
+
+            if (testContext.parent != null)
+            {
+                result.addAll(collectExternalContainers(testContext.parent));
             }
+            return result;
         }
     }
 }