You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@click.apache.org by sa...@apache.org on 2010/06/26 19:49:36 UTC

svn commit: r958256 - /click/trunk/click/mock/test/org/apache/click/MockContextTest.java

Author: sabob
Date: Sat Jun 26 17:49:36 2010
New Revision: 958256

URL: http://svn.apache.org/viewvc?rev=958256&view=rev
Log:
added MockContext tests for ajax behaviors

Modified:
    click/trunk/click/mock/test/org/apache/click/MockContextTest.java

Modified: click/trunk/click/mock/test/org/apache/click/MockContextTest.java
URL: http://svn.apache.org/viewvc/click/trunk/click/mock/test/org/apache/click/MockContextTest.java?rev=958256&r1=958255&r2=958256&view=diff
==============================================================================
--- click/trunk/click/mock/test/org/apache/click/MockContextTest.java (original)
+++ click/trunk/click/mock/test/org/apache/click/MockContextTest.java Sat Jun 26 17:49:36 2010
@@ -19,6 +19,8 @@
 package org.apache.click;
 
 import junit.framework.TestCase;
+import org.apache.click.ajax.AjaxBehavior;
+import org.apache.click.control.Submit;
 import org.apache.click.servlet.MockServletConfig;
 import org.apache.click.servlet.MockServletContext;
 import org.apache.click.servlet.MockRequest;
@@ -29,6 +31,16 @@ import org.apache.click.servlet.MockResp
  */
 public class MockContextTest extends TestCase {
 
+    // Variables --------------------------------------------------------------
+
+    /** Indicates that an actionListener was invoked. */
+    private boolean submitCalled = false;
+
+    /** Indicators that callback events was invoked. */
+    private boolean preGetHeadElementsCalled = false;
+    private boolean preResponseCalled = false;
+    private boolean preDestroyCalled = false;
+
     /**
      * Test MockContext.
      */
@@ -37,4 +49,324 @@ public class MockContextTest extends Tes
         MockContext.initContext(new MockServletConfig(servletContext), 
             new MockRequest(), new MockResponse(), new ClickServlet());
     }
+
+    // Test ActionListeners ---------------------------------------------------
+
+    /**
+     * Test that context can properly fire action listeners.
+     */
+    public void testFireActionListeners() {
+        MockContext context = MockContext.initContext();
+        MockRequest request = (MockRequest) context.getMockRequest();
+        request.setParameter("save", "save");
+
+        submitCalled = false;
+        Submit submit = new Submit("save");
+        // Registry a listener which must be invoked
+        submit.setActionListener(new ActionListener() {
+            public boolean onAction(Control source) {
+                // When action is invoked, set flag to true
+                return submitCalled = true;
+            }
+        });
+        assertTrue(submit.onProcess());
+
+        ActionEventDispatcher dispatcher = ActionEventDispatcher.getThreadLocalDispatcher();
+
+        // Assert there is only one event listener and event source registered
+        assertEquals(1, dispatcher.getEventListenerList().size());
+        assertEquals(1, dispatcher.getEventSourceList().size());
+
+        // Fire all action events that was registered in the onProcess method
+        context.executeActionListeners();
+
+        assertTrue("Submit action was not invoked", submitCalled);
+
+        // Assert that after invoking executeActionListeners there are no event
+        // listeners and event sources registered
+        assertEquals(0, dispatcher.getEventListenerList().size());
+        assertEquals(0, dispatcher.getEventSourceList().size());
+    }
+
+    /**
+     * Test that registered action listeners are removed through the method
+     * MockContext.reset().
+     */
+    public void testResetActionListeners() {
+        MockContext context = MockContext.initContext();
+        MockRequest request = (MockRequest) context.getMockRequest();
+        request.setParameter("save", "save");
+
+        Submit submit = new Submit("save");
+        // Registry a listener which must be invoked
+        submit.setActionListener(new ActionListener() {
+            public boolean onAction(Control source) {
+                // When action is invoked, set flag to true
+                return true;
+            }
+        });
+        assertTrue(submit.onProcess());
+
+        ActionEventDispatcher dispatcher = ActionEventDispatcher.getThreadLocalDispatcher();
+
+        // Assert there is only one event listener and event source registered
+        assertEquals(1, dispatcher.getEventListenerList().size());
+        assertEquals(1, dispatcher.getEventSourceList().size());
+
+        // Context reset should clear the dispatcher
+        context.reset();
+
+        // Assert there are no event listener and event source registered after invoking reset
+        assertEquals(0, dispatcher.getEventListenerList().size());
+        assertEquals(0, dispatcher.getEventSourceList().size());
+    }
+
+    // Test Behaviors ---------------------------------------------------------
+
+    /**
+     * Test that context can properly fire behaviors.
+     */
+    public void testFireBehaviors() {
+        MockContext context = MockContext.initContext();
+        MockRequest request = (MockRequest) context.getMockRequest();
+        request.setParameter("save", "save");
+
+        submitCalled = false;
+
+        Submit submit = new Submit("save");
+        // Register an ajax behavior
+        submit.addBehavior(new AjaxBehavior() {
+            public Partial onAction(Control source) {
+                // When action is invoked, set flag to true
+                submitCalled = true;
+                return new Partial();
+            }
+        });
+        assertTrue(submit.onProcess());
+
+        ActionEventDispatcher dispatcher = ActionEventDispatcher.getThreadLocalDispatcher();
+
+        // Assert there is one behavior registered
+        assertEquals(1, dispatcher.getBehaviorSourceSet().size());
+
+        // Fire all behaviors registered in the onProcess method
+        context.executeBehaviors();
+
+        assertTrue("Submit behavior was not invoked", submitCalled);
+
+        // Assert there are no behaviors registered after reset is invoked
+        assertEquals(0, dispatcher.getBehaviorSourceSet().size());
+    }
+
+    /**
+     * Test that registered behaviors are removed through the method
+     * MockContext.reset().
+     */
+    public void testResetBehaviors() {
+        MockContext context = MockContext.initContext();
+        MockRequest request = (MockRequest) context.getMockRequest();
+        request.setParameter("save", "save");
+
+        Submit submit = new Submit("save");
+        // Register an ajax behavior
+        submit.addBehavior(new AjaxBehavior() {
+            public Partial onAction(Control source) {
+                // When action is invoked, set flag to true
+                return new Partial();
+            }
+        });
+        assertTrue(submit.onProcess());
+
+        ActionEventDispatcher dispatcher = ActionEventDispatcher.getThreadLocalDispatcher();
+
+        // Assert there is one behavior registered
+        assertEquals(1, dispatcher.getBehaviorSourceSet().size());
+
+        // Context reset should clear the dispatcher
+        context.reset();
+
+        // Assert there are no behaviors registered after reset is invoked
+        assertEquals(0, dispatcher.getBehaviorSourceSet().size());
+    }
+
+    // Test Callbacks ---------------------------------------------------------
+
+    /**
+     * Test that context can properly process callbacks.
+     */
+    public void testProcessCallbacks() {
+        MockContext context = MockContext.initContext();
+
+        Submit submit = new Submit("save");
+
+        preGetHeadElementsCalled = false;
+        preResponseCalled = false;
+        preDestroyCalled = false;
+
+        CallbackDispatcher.registerCallback(submit, new Callback() {
+
+            public void preDestroy(Control source) {
+                preDestroyCalled = true;
+            }
+
+            public void preGetHeadElements(Control source) {
+                preGetHeadElementsCalled = true;
+            }
+
+            public void preResponse(Control source) {
+                preResponseCalled = true;
+            }
+        });
+
+        CallbackDispatcher dispatcher = CallbackDispatcher.getThreadLocalDispatcher();
+
+        // Assert there is one callback registered
+        assertEquals(1, dispatcher.getCallbacks().size());
+
+        // Process the preResponse callback event
+        context.executePreResponseCallbackEvent();
+        assertTrue("preResponse callback event was not processed", preResponseCalled);
+
+        // Process the preGetHeadElements callback event
+        context.executePreGetHeadElementsCallbackEvent();
+        assertTrue("preGetHeadElements callback event was not processed", preGetHeadElementsCalled);
+
+        // Process the preGetHeadElements callback event
+        context.executePreDestroyCallbackEvent();
+        assertTrue("preDestroy callback event was not processed", preDestroyCalled);
+
+        // Assert that the callback was not removed after all events was processed
+        // The reason the callbacks are not automatically removed is because the
+        // last callback is onDestroy, which is right before the request goes out
+        // of scope
+        assertEquals(1, dispatcher.getCallbacks().size());
+    }
+
+    /**
+     * Test that context can properly fire callbacks.
+     */
+    public void testResetCallbacks() {
+        MockContext context = MockContext.initContext();
+
+        Submit submit = new Submit("save");
+
+        preGetHeadElementsCalled = false;
+        preResponseCalled = false;
+        preDestroyCalled = false;
+
+        CallbackDispatcher.registerCallback(submit, new Callback() {
+
+            public void preDestroy(Control source) {
+                preDestroyCalled = true;
+            }
+
+            public void preGetHeadElements(Control source) {
+                preGetHeadElementsCalled = true;
+            }
+
+            public void preResponse(Control source) {
+                preResponseCalled = true;
+            }
+        });
+
+        CallbackDispatcher dispatcher = CallbackDispatcher.getThreadLocalDispatcher();
+
+        // Assert there is one callback registered
+        assertEquals(1, dispatcher.getCallbacks().size());
+
+        // Context reset should clear the dispatcher
+        context.reset();
+
+        // Assert that the callback was not removed after all events was processed
+        // The reason the callbacks are not automatically removed is because the
+        // last callback is onDestroy, which is right before the request goes out
+        // of scope
+        assertEquals(0, dispatcher.getCallbacks().size());
+    }
+
+    // Callback + Behavior tests ----------------------------------------------
+
+    /**
+     * Test that context can properly process callbacks and behaviors.
+     */
+    public void testProcessBehaviorAndCallbacks() {
+        MockContext context = MockContext.initContext();
+        MockRequest request = (MockRequest) context.getMockRequest();
+        request.setParameter("save", "save");
+
+        Submit submit = new Submit("save");
+
+        submitCalled = false;
+        preGetHeadElementsCalled = false;
+        preResponseCalled = false;
+        preDestroyCalled = false;
+
+        submit.addBehavior(new AjaxBehavior() {
+
+            @Override
+            public Partial onAction(Control source) {
+                // When action is invoked, set flag to true
+                submitCalled = true;
+                return new Partial();
+            }
+
+            @Override
+            public void preDestroy(Control source) {
+                preDestroyCalled = true;
+            }
+
+            @Override
+            public void preGetHeadElements(Control source) {
+                preGetHeadElementsCalled = true;
+            }
+
+            @Override
+            public void preResponse(Control source) {
+                preResponseCalled = true;
+            }
+        });
+        assertTrue(submit.onProcess());
+
+        submit.onProcess();
+
+        ActionEventDispatcher eventDispatcher = ActionEventDispatcher.getThreadLocalDispatcher();
+
+        // Assert there is one behavior registered
+        assertEquals(1, eventDispatcher.getBehaviorSourceSet().size());
+
+        // Fire all behaviors registered in the onProcess method
+        context.executeBehaviors();
+
+        assertTrue("Submit behavior was not invoked", submitCalled);
+
+        // Assert there are no behaviors registered after reset is invoked
+        assertEquals(0, eventDispatcher.getBehaviorSourceSet().size());
+
+        CallbackDispatcher callbackDispatcher = CallbackDispatcher.getThreadLocalDispatcher();
+
+        // Assert that the submit control is registered as a callback
+        assertEquals(1, callbackDispatcher.getBehaviorEnabledControls().size());
+        assertSame(submit, callbackDispatcher.getBehaviorEnabledControls().iterator().next());
+
+        // Process the preResponse callback event
+        context.executePreResponseCallbackEvent();
+        assertTrue("preResponse callback event was not processed", preResponseCalled);
+
+        // Process the preGetHeadElements callback event
+        context.executePreGetHeadElementsCallbackEvent();
+        assertTrue("preGetHeadElements callback event was not processed", preGetHeadElementsCalled);
+
+        // Process the preGetHeadElements callback event
+        context.executePreDestroyCallbackEvent();
+        assertTrue("preDestroy callback event was not processed", preDestroyCalled);
+
+        // Assert that the callback was not removed after all events was processed
+        assertEquals(1, callbackDispatcher.getBehaviorEnabledControls().size());
+
+        // Test that reset will clear the callback dispatcher
+        context.reset();
+
+        // Assert that the callback was removed after reset
+        assertEquals(0, callbackDispatcher.getBehaviorEnabledControls().size());
+    }
 }