You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lu...@apache.org on 2013/02/08 01:02:04 UTC

svn commit: r1443801 - in /myfaces/core/branches/2.2.x/impl/src/test: java/org/apache/myfaces/config/impl/digister/ resources/org/apache/myfaces/config/impl/digister/ resources/org/apache/myfaces/view/facelets/tag/jsf/html/

Author: lu4242
Date: Fri Feb  8 00:02:04 2013
New Revision: 1443801

URL: http://svn.apache.org/r1443801
Log:
MYFACES-3691 Implement Faces Flows (faces-config.xml support)

Added:
    myfaces/core/branches/2.2.x/impl/src/test/resources/org/apache/myfaces/config/impl/digister/faces-flow.xml
      - copied, changed from r1441198, myfaces/core/branches/2.2.x/impl/src/test/resources/org/apache/myfaces/config/impl/digister/ordering-config.xml
    myfaces/core/branches/2.2.x/impl/src/test/resources/org/apache/myfaces/view/facelets/tag/jsf/html/testHtmlPassthrough1.xhtml
      - copied, changed from r1433611, myfaces/core/branches/2.2.x/impl/src/test/resources/org/apache/myfaces/view/facelets/tag/jsf/html/testOutputLabelEscape.xhtml
Modified:
    myfaces/core/branches/2.2.x/impl/src/test/java/org/apache/myfaces/config/impl/digister/DigesterFacesConfigUnmarshallerImplTest.java

Modified: myfaces/core/branches/2.2.x/impl/src/test/java/org/apache/myfaces/config/impl/digister/DigesterFacesConfigUnmarshallerImplTest.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.2.x/impl/src/test/java/org/apache/myfaces/config/impl/digister/DigesterFacesConfigUnmarshallerImplTest.java?rev=1443801&r1=1443800&r2=1443801&view=diff
==============================================================================
--- myfaces/core/branches/2.2.x/impl/src/test/java/org/apache/myfaces/config/impl/digister/DigesterFacesConfigUnmarshallerImplTest.java (original)
+++ myfaces/core/branches/2.2.x/impl/src/test/java/org/apache/myfaces/config/impl/digister/DigesterFacesConfigUnmarshallerImplTest.java Fri Feb  8 00:02:04 2013
@@ -21,9 +21,19 @@ import junit.framework.TestCase;
 
 import org.apache.myfaces.config.impl.digester.DigesterFacesConfigUnmarshallerImpl;
 import org.apache.myfaces.config.element.Application;
+import org.apache.myfaces.config.element.ContractMapping;
 import org.apache.myfaces.config.element.FacesConfig;
 import org.apache.myfaces.config.element.FacesConfigNameSlot;
+import org.apache.myfaces.config.element.FacesFlowCall;
+import org.apache.myfaces.config.element.FacesFlowDefinition;
+import org.apache.myfaces.config.element.FacesFlowMethodCall;
+import org.apache.myfaces.config.element.FacesFlowParameter;
+import org.apache.myfaces.config.element.FacesFlowReturn;
+import org.apache.myfaces.config.element.FacesFlowSwitch;
+import org.apache.myfaces.config.element.FacesFlowView;
 import org.apache.myfaces.config.element.LocaleConfig;
+import org.apache.myfaces.config.element.NavigationCase;
+import org.apache.myfaces.config.element.NavigationRule;
 import org.apache.myfaces.config.element.OrderSlot;
 
 /**
@@ -156,5 +166,103 @@ public class DigesterFacesConfigUnmarsha
         assertTrue(cfg.getNavigationRules().isEmpty());
         assertTrue(cfg.getRenderKits().isEmpty());
         assertTrue(cfg.getValidators().isEmpty());
-    }    
+    }
+    
+    public void testFacesFlowConfig() throws Exception
+    {
+        FacesConfig cfg = _impl.getFacesConfig(getClass().getResourceAsStream(
+                "faces-flow.xml"), "faces-flow.xml");
+
+        assertNotNull(cfg);
+        assertEquals(1, cfg.getFacesFlowDefinitions().size());
+        FacesFlowDefinition facesFlowDefinition = cfg.getFacesFlowDefinitions().get(0);
+        
+        assertEquals("flow1", facesFlowDefinition.getId());
+        assertEquals("node1", facesFlowDefinition.getStartNode());
+        assertEquals("#{flowBean.init}", facesFlowDefinition.getInitializer());
+        assertEquals("#{flowBean.finalize}", facesFlowDefinition.getFinalizer());
+        
+        //view
+        assertEquals(1, facesFlowDefinition.getViewList().size());
+        FacesFlowView facesFlowView = facesFlowDefinition.getViewList().get(0);
+        assertEquals("outcome2", facesFlowView.getId());
+        assertEquals("outcome-to-2.xhtml", facesFlowView.getVdlDocument());
+
+        //switch
+        assertEquals(1, facesFlowDefinition.getSwitchList().size());
+        FacesFlowSwitch facesFlowSwitch = facesFlowDefinition.getSwitchList().get(0);
+        assertEquals("switch1", facesFlowSwitch.getId());
+        assertEquals("outcome2", facesFlowSwitch.getDefaultOutcome().getFromOutcome());
+        NavigationCase swNavigationCase = facesFlowSwitch.getNavigationCaseList().get(0);
+        assertEquals("#{flowBean.token > 0}", swNavigationCase.getIf());
+        assertEquals("outcome2", swNavigationCase.getFromOutcome());
+
+        //flow return
+        assertEquals(1, facesFlowDefinition.getReturnList().size());
+        FacesFlowReturn facesFlowReturn = facesFlowDefinition.getReturnList().get(0);
+        assertEquals("flowReturn1", facesFlowReturn.getId());
+        assertEquals("/outcome1", facesFlowReturn.getNavigationCase().getFromOutcome());
+        
+        //navigation rule
+        assertEquals(1, facesFlowDefinition.getNavigationRuleList().size());
+        NavigationRule navigationRule = facesFlowDefinition.getNavigationRuleList().get(0);
+        assertEquals("/x.xhtml", navigationRule.getFromViewId());
+        assertEquals(1, navigationRule.getNavigationCases().size());
+        NavigationCase navigationCase = navigationRule.getNavigationCases().get(0);
+        assertEquals("go", navigationCase.getFromOutcome());
+        assertEquals("#{test.true}", navigationCase.getIf());
+        assertEquals("/y.xhtml", navigationCase.getToViewId());
+
+        //flow call
+        assertEquals(1, facesFlowDefinition.getFlowCallList().size());
+        FacesFlowCall facesFlowCall = facesFlowDefinition.getFlowCallList().get(0);
+        assertEquals("flowCall", facesFlowCall.getId());
+        assertEquals("flow2", facesFlowCall.getCalledFlowId());
+        assertEquals(1, facesFlowCall.getOutboundParameterList().size());
+        FacesFlowParameter facesFlowOutboundParameter = facesFlowCall.getOutboundParameterList().get(0);
+        assertEquals("name1", facesFlowOutboundParameter.getName());
+        assertEquals("value1", facesFlowOutboundParameter.getValue());
+        
+        //method call
+        assertEquals(1, facesFlowDefinition.getMethodCallList().size());
+        FacesFlowMethodCall facesFlowMethodCall = facesFlowDefinition.getMethodCallList().get(0);
+        assertEquals("method1", facesFlowMethodCall.getId());
+        assertEquals("#{flowBean.doSomething}", facesFlowMethodCall.getMethod());
+        assertEquals("outcome2", facesFlowMethodCall.getDefaultOutcome());
+        
+        //inbound param
+        assertEquals(1, facesFlowDefinition.getInboundParameterList().size());
+        FacesFlowParameter facesFlowParameter = facesFlowDefinition.getInboundParameterList().get(0);
+        assertEquals("name1", facesFlowParameter.getName());
+        assertEquals("value1", facesFlowParameter.getValue());
+    }
+    
+    public void testCsrf() throws Exception
+    {
+        FacesConfig cfg = _impl.getFacesConfig(getClass().getResourceAsStream(
+                "csrf-and-contracts.xml"), "csrf-and-contracts.xml");
+        
+        assertNotNull(cfg);
+        assertEquals(2, cfg.getProtectedViewsUrlPatternList().size());
+        assertEquals("/files/*.xhtml", cfg.getProtectedViewsUrlPatternList().get(0));
+        assertEquals("/files2/*.xhtml", cfg.getProtectedViewsUrlPatternList().get(1));
+        
+        
+    }
+    
+    public void testContracts() throws Exception
+    {
+        FacesConfig cfg = _impl.getFacesConfig(getClass().getResourceAsStream(
+                "csrf-and-contracts.xml"), "csrf-and-contracts.xml");
+        
+        assertNotNull(cfg);
+
+        Application app = cfg.getApplications().get(0);
+        assertNotNull(app);
+        assertEquals(1, app.getResourceLibraryContractMappings().size());
+        
+        ContractMapping mapping = app.getResourceLibraryContractMappings().get(0);
+        assertEquals("/files/*.xhtml", mapping.getUrlPattern());
+        assertEquals("contractA contractB", mapping.getContracts());
+    }
 }

Copied: myfaces/core/branches/2.2.x/impl/src/test/resources/org/apache/myfaces/config/impl/digister/faces-flow.xml (from r1441198, myfaces/core/branches/2.2.x/impl/src/test/resources/org/apache/myfaces/config/impl/digister/ordering-config.xml)
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.2.x/impl/src/test/resources/org/apache/myfaces/config/impl/digister/faces-flow.xml?p2=myfaces/core/branches/2.2.x/impl/src/test/resources/org/apache/myfaces/config/impl/digister/faces-flow.xml&p1=myfaces/core/branches/2.2.x/impl/src/test/resources/org/apache/myfaces/config/impl/digister/ordering-config.xml&r1=1441198&r2=1443801&rev=1443801&view=diff
==============================================================================
--- myfaces/core/branches/2.2.x/impl/src/test/resources/org/apache/myfaces/config/impl/digister/ordering-config.xml (original)
+++ myfaces/core/branches/2.2.x/impl/src/test/resources/org/apache/myfaces/config/impl/digister/faces-flow.xml Fri Feb  8 00:02:04 2013
@@ -19,15 +19,51 @@
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
               xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd" 
               version="2.0">
-  <name>a</name>
-  <ordering>
-      <after>
-         <name>d</name>
-      </after>      
-      <before>
-         <name>b</name>
-         <name>c</name>
-         <others/>
-      </before>
-  </ordering>
+    <faces-flow-definition id="flow1">
+        <start-node>node1</start-node>
+        <view id="outcome2">
+            <vdl-document>outcome-to-2.xhtml</vdl-document>
+        </view>
+        <switch id="switch1">
+            <navigation-case>
+                <if>#{flowBean.token > 0}</if>
+                <from-outcome>outcome2</from-outcome>
+            </navigation-case>
+            <default-outcome>
+                <from-outcome>outcome2</from-outcome>
+            </default-outcome>
+        </switch>
+        <flow-return id="flowReturn1">
+            <navigation-case>
+                <from-outcome>/outcome1</from-outcome>
+            </navigation-case>
+        </flow-return>
+        <navigation-rule>
+          <from-view-id>/x.xhtml</from-view-id>
+          <navigation-case>
+              <from-outcome>go</from-outcome>
+              <if>#{test.true}</if>
+              <to-view-id>/y.xhtml</to-view-id>
+          </navigation-case>
+        </navigation-rule>
+        <flow-call id="flowCall">
+            <faces-flow-reference>
+                <faces-flow-id>flow2</faces-flow-id>
+            </faces-flow-reference>
+            <outbound-parameter>
+                <name>name1</name>
+                <value>value1</value>
+            </outbound-parameter>
+        </flow-call>
+        <method-call>
+            <method id="method1">#{flowBean.doSomething}</method>
+            <default-outcome>outcome2</default-outcome>
+        </method-call>
+        <initializer>#{flowBean.init}</initializer>
+        <finalizer>#{flowBean.finalize}</finalizer>
+        <inbound-parameter>
+            <name>name1</name>
+            <value>value1</value>
+        </inbound-parameter>
+    </faces-flow-definition>
 </faces-config>

Copied: myfaces/core/branches/2.2.x/impl/src/test/resources/org/apache/myfaces/view/facelets/tag/jsf/html/testHtmlPassthrough1.xhtml (from r1433611, myfaces/core/branches/2.2.x/impl/src/test/resources/org/apache/myfaces/view/facelets/tag/jsf/html/testOutputLabelEscape.xhtml)
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.2.x/impl/src/test/resources/org/apache/myfaces/view/facelets/tag/jsf/html/testHtmlPassthrough1.xhtml?p2=myfaces/core/branches/2.2.x/impl/src/test/resources/org/apache/myfaces/view/facelets/tag/jsf/html/testHtmlPassthrough1.xhtml&p1=myfaces/core/branches/2.2.x/impl/src/test/resources/org/apache/myfaces/view/facelets/tag/jsf/html/testOutputLabelEscape.xhtml&r1=1433611&r2=1443801&rev=1443801&view=diff
==============================================================================
--- myfaces/core/branches/2.2.x/impl/src/test/resources/org/apache/myfaces/view/facelets/tag/jsf/html/testOutputLabelEscape.xhtml (original)
+++ myfaces/core/branches/2.2.x/impl/src/test/resources/org/apache/myfaces/view/facelets/tag/jsf/html/testHtmlPassthrough1.xhtml Fri Feb  8 00:02:04 2013
@@ -16,13 +16,13 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml"
 	xmlns:h="http://java.sun.com/jsf/html"
-	xmlns:f="http://java.sun.com/jsf/core">
+	xmlns:f="http://java.sun.com/jsf/core"
+    xmlns:jsf="http://java.sun.com/jsf">
 <head>
 </head>
-<body>
-<h:panelGroup id="testGroup1">
-<h:outputText id="testOut"/>
-<h:outputLabel id="testLabel" for="testOut" value="&amp;foo"/>
-</h:panelGroup>
+<body jsf:id="idBody">
+    <form jsf:id="myForm">
+        <button jsf:id="submit" jsf:action="#{test.testAction}"/>
+    </form>
 </body>
 </html>
\ No newline at end of file