You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by ja...@apache.org on 2010/08/24 15:10:18 UTC

svn commit: r988522 - in /myfaces/core/trunk/api/src: main/java/javax/faces/component/UIData.java test/java/javax/faces/component/UIDataTest.java

Author: jakobk
Date: Tue Aug 24 13:10:17 2010
New Revision: 988522

URL: http://svn.apache.org/viewvc?rev=988522&view=rev
Log:
MYFACES-2886 UIData: push and pop row component to and from EL during broadcast() (test case + minor change)

Modified:
    myfaces/core/trunk/api/src/main/java/javax/faces/component/UIData.java
    myfaces/core/trunk/api/src/test/java/javax/faces/component/UIDataTest.java

Modified: myfaces/core/trunk/api/src/main/java/javax/faces/component/UIData.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/api/src/main/java/javax/faces/component/UIData.java?rev=988522&r1=988521&r2=988522&view=diff
==============================================================================
--- myfaces/core/trunk/api/src/main/java/javax/faces/component/UIData.java (original)
+++ myfaces/core/trunk/api/src/main/java/javax/faces/component/UIData.java Tue Aug 24 13:10:17 2010
@@ -751,14 +751,14 @@ public class UIData extends UIComponentB
             UIComponent source = originalEvent.getComponent();
             
             setRowIndex(eventRowIndex);
-            source.pushComponentToEL(getFacesContext(), source);
+            pushComponentToEL(getFacesContext(), source);
             try
             {
                 source.broadcast(originalEvent);
             }
             finally
             {
-                source.popComponentFromEL(getFacesContext());
+                popComponentFromEL(getFacesContext());
                 setRowIndex(currentRowIndex);
             }
         }

Modified: myfaces/core/trunk/api/src/test/java/javax/faces/component/UIDataTest.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/api/src/test/java/javax/faces/component/UIDataTest.java?rev=988522&r1=988521&r2=988522&view=diff
==============================================================================
--- myfaces/core/trunk/api/src/test/java/javax/faces/component/UIDataTest.java (original)
+++ myfaces/core/trunk/api/src/test/java/javax/faces/component/UIDataTest.java Tue Aug 24 13:10:17 2010
@@ -27,9 +27,10 @@ import javax.faces.component.visit.Visit
 import javax.faces.component.visit.VisitContext;
 import javax.faces.component.visit.VisitHint;
 import javax.faces.component.visit.VisitResult;
-import javax.faces.render.Renderer;
-
 import javax.faces.context.FacesContext;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.FacesEvent;
+import javax.faces.event.PhaseId;
 import javax.faces.render.Renderer;
 
 import org.apache.myfaces.Assert;
@@ -140,7 +141,64 @@ public class UIDataTest extends Abstract
      */
     public void testBroadcastFacesEvent()
     {
-        // TODO
+        // create event mock
+        final FacesEvent originalEvent = _mocksControl.createMock(FacesEvent.class);
+        
+        // create the component for the event
+        UIComponent eventComponent = new UICommand()
+        {
+
+            @Override
+            public void broadcast(FacesEvent event)
+                    throws AbortProcessingException
+            {
+                // the event must be the originalEvent
+                assertEquals(originalEvent, event);
+                
+                // the current row index must be the row index from the time the event was queued
+                assertEquals(5, _testImpl.getRowIndex());
+                
+                // the current component must be this (pushComponentToEL() must have happened)
+                assertEquals(this, UIComponent.getCurrentComponent(facesContext));
+                
+                // to be able to verify that broadcast() really has been called
+                getAttributes().put("broadcastCalled", Boolean.TRUE);
+            }
+            
+        };
+        
+        // set component on event
+        EasyMock.expect(originalEvent.getComponent()).andReturn(eventComponent).anyTimes();
+        // set phase on event
+        EasyMock.expect(originalEvent.getPhaseId()).andReturn(PhaseId.INVOKE_APPLICATION).anyTimes();
+        _mocksControl.replay();
+        
+        // set PhaseId for event processing
+        facesContext.setCurrentPhaseId(PhaseId.INVOKE_APPLICATION);
+        // set row index for event
+        _testImpl.setRowIndex(5);
+        // UIData must be a child of UIViewRoot to queue and event
+        facesContext.getViewRoot().getChildren().add(_testImpl);
+        // queue event (this will create a FacesEventWrapper with the current row index)
+        _testImpl.queueEvent(originalEvent);
+        // change the current row index
+        _testImpl.setRowIndex(0);
+        // now broadcast the event (this will call UIData.broadcast())
+        facesContext.getViewRoot().broadcastEvents(facesContext, PhaseId.INVOKE_APPLICATION);
+        
+        // -= Assertions =-
+        
+        // the current component must be null (popComponentFromEL() must have happened)
+        assertNull(UIComponent.getCurrentComponent(facesContext));
+        
+        // the row index must now be 0 (at broadcast() it must be 5)
+        assertEquals(0, _testImpl.getRowIndex());
+        
+        // verify mock behavior
+        _mocksControl.verify();
+        
+        // verify that broadcast() really has been called
+        assertEquals(Boolean.TRUE, eventComponent.getAttributes().get("broadcastCalled"));
     }
 
     /**