package org.richfaces.component.behavior; import static org.easymock.EasyMock.expect; import static org.junit.Assert.assertEquals; import javax.faces.FacesException; import javax.faces.component.UICommand; import javax.faces.component.UIComponent; import javax.faces.component.UIOutput; import javax.faces.component.behavior.ClientBehaviorContext; import javax.faces.render.RenderKit; import org.ajax4jsf.component.behavior.AjaxBehavior; import org.jboss.test.faces.mock.Mock; import org.jboss.test.faces.mock.MockTestRunner; import org.jboss.test.faces.mock.Stub; import org.junit.Test; import org.junit.runner.RunWith; import org.richfaces.renderkit.html.ClientValidatorRenderer; import org.richfaces.renderkit.html.FormClientValidatorRenderer; /** * <p class="changed_added_4_0"> * This class tests client validator behavior. as it described at https://community.jboss.org/wiki/ClientSideValidation # * Server-side rendering algorithm * </p> * * @author asmirnov@exadel.com * */ @RunWith(MockTestRunner.class) public class GetScriptTest extends BehaviorTestBase { private static final String CLIENT_VALIDATION_FUNCTION = "rf.csv.v"; @Stub protected UIOutput output; @Mock protected UICommand command; /** * <p class="changed_added_4_0"> * Server-side rendering algorithm .1 * </p> */ @Test(expected = FacesException.class) public void testGetScriptForIllegalComponent() { getScript(output); } /** * <p class="changed_added_4_0"> * Delegate getScript call to ClientValidatorRenderer * </p> * * @throws Exception */ @Test public void testGetScriptForInput() throws Exception { testGetScriptDelegate(ClientValidatorRenderer.RENDERER_TYPE, input); } /** * <p class="changed_added_4_0"> * Server-side rendering algorithm .3 * </p> * * @throws Exception */ @Test public void testGetScriptForAction() throws Exception { testGetScriptDelegate(FormClientValidatorRenderer.RENDERER_TYPE, command); } @Test public void testGetAjaxScript() throws Exception { setupRenderer(AjaxBehavior.BEHAVIOR_ID); ClientBehaviorContext clientBehaviorContext = setupBehaviorContext(input); controller.replay(); String script = behavior.getAjaxScript(clientBehaviorContext); controller.verify(); assertEquals(CLIENT_VALIDATION_FUNCTION, script); } private void testGetScriptDelegate(String rendererType, UIComponent component) { setupRenderer(rendererType); String script = getScript(component);// ajax-only validator. assertEquals(CLIENT_VALIDATION_FUNCTION, script); } private void setupRenderer(String rendererType) { RenderKit renderKit = environment.getRenderKit(); expect(renderKit.getClientBehaviorRenderer(rendererType)).andReturn(behaviorRenderer); expect(behaviorRenderer.getScript(behaviorContext, behavior)).andReturn(CLIENT_VALIDATION_FUNCTION); } private String getScript(UIComponent component) { ClientBehaviorContext clientBehaviorContext = setupBehaviorContext(component); controller.replay(); String script = behavior.getScript(clientBehaviorContext); controller.verify(); return script; } }