MYFACESTEST-39 MockApplication20 should traverse view SystemEventListeners
diff --git a/test20/src/main/java/org/apache/myfaces/test/mock/MockApplication20.java b/test20/src/main/java/org/apache/myfaces/test/mock/MockApplication20.java
index b3ecb2e..e3fe3f8 100644
--- a/test20/src/main/java/org/apache/myfaces/test/mock/MockApplication20.java
+++ b/test20/src/main/java/org/apache/myfaces/test/mock/MockApplication20.java
@@ -24,6 +24,7 @@
 import javax.faces.FacesException;
 import javax.faces.application.ProjectStage;
 import javax.faces.application.ResourceHandler;
+import javax.faces.component.UIViewRoot;
 import javax.faces.component.behavior.Behavior;
 import javax.faces.context.FacesContext;
 import javax.faces.event.AbortProcessingException;
@@ -289,6 +290,12 @@
     {
         checkNull(systemEventClass, "systemEventClass");
         checkNull(source, "source");
+        
+        //Call events only if event processing is enabled.
+        if (!facesContext.isProcessingEvents())
+        {
+            return;
+        }
 
         try
         {
@@ -304,6 +311,14 @@
                         .getListenersForEventClass(systemEventClass),
                         systemEventClass, source, event);
             }
+            
+            UIViewRoot uiViewRoot = facesContext.getViewRoot();
+            if (uiViewRoot != null)
+            {
+                //Call listeners on view level
+                event = _traverseListenerList(uiViewRoot.getViewListenersForEventClass(systemEventClass), 
+                        systemEventClass, source, event);
+            }
 
             SystemListenerEntry systemListenerEntry = _systemEventListenerClassMap
                     .get(systemEventClass);