Author: alexsmirnov
Date: 2010-10-19 19:53:42 -0400 (Tue, 19 Oct 2010)
New Revision: 19609
Added:
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/renderkit/html/RendererGetOrCreateResourceTest.java
Modified:
branches/RF-8742/ui/validator/ui/src/main/java/org/richfaces/component/UIValidatorScript.java
branches/RF-8742/ui/validator/ui/src/main/java/org/richfaces/renderkit/html/ClientValidatorRenderer.java
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/renderkit/html/RendererGetComponentScriptTest.java
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/renderkit/html/RendererTestBase.java
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/renderkit/html/ValidatorRendererGetScriptTest.java
Log:
OPEN - issue RF-9507: ClientValidatorRendererunit tests and implementation.
https://jira.jboss.org/browse/RF-9507
Modified:
branches/RF-8742/ui/validator/ui/src/main/java/org/richfaces/component/UIValidatorScript.java
===================================================================
---
branches/RF-8742/ui/validator/ui/src/main/java/org/richfaces/component/UIValidatorScript.java 2010-10-19
18:10:00 UTC (rev 19608)
+++
branches/RF-8742/ui/validator/ui/src/main/java/org/richfaces/component/UIValidatorScript.java 2010-10-19
23:53:42 UTC (rev 19609)
@@ -23,8 +23,13 @@
package org.richfaces.component;
+import java.util.List;
+
+import javax.faces.component.UIComponent;
import javax.faces.component.UIOutput;
+import org.richfaces.renderkit.html.ComponentValidatorScript;
+
/**
* <p class="changed_added_4_0">This component user to render Client
Validator scripts. Any ClientValidatorBehavior that requires additional scripts should put
them
* to this component, associated with "form" target in view
resources.</p>
@@ -33,4 +38,13 @@
*/
public class UIValidatorScript extends UIOutput {
+ public List<UIComponent> getScripts() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public String addScript(ComponentValidatorScript script){
+ return null;
+
+ }
}
Modified:
branches/RF-8742/ui/validator/ui/src/main/java/org/richfaces/renderkit/html/ClientValidatorRenderer.java
===================================================================
---
branches/RF-8742/ui/validator/ui/src/main/java/org/richfaces/renderkit/html/ClientValidatorRenderer.java 2010-10-19
18:10:00 UTC (rev 19608)
+++
branches/RF-8742/ui/validator/ui/src/main/java/org/richfaces/renderkit/html/ClientValidatorRenderer.java 2010-10-19
23:53:42 UTC (rev 19609)
@@ -6,6 +6,7 @@
import javax.faces.FacesException;
import javax.faces.component.behavior.ClientBehavior;
import javax.faces.component.behavior.ClientBehaviorContext;
+import javax.faces.context.FacesContext;
import javax.faces.render.ClientBehaviorRenderer;
import org.richfaces.component.UIValidatorScript;
@@ -51,7 +52,7 @@
return null;
}
- UIValidatorScript getOrCreateValidatorScriptResource(ClientBehaviorContext
behaviorContext, ClientValidatorBehavior behavior){
+ UIValidatorScript getOrCreateValidatorScriptResource(FacesContext facesContext){
return null;
}
Modified:
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/renderkit/html/RendererGetComponentScriptTest.java
===================================================================
---
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/renderkit/html/RendererGetComponentScriptTest.java 2010-10-19
18:10:00 UTC (rev 19608)
+++
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/renderkit/html/RendererGetComponentScriptTest.java 2010-10-19
23:53:42 UTC (rev 19609)
@@ -1,69 +1,197 @@
package org.richfaces.renderkit.html;
+import static org.easymock.EasyMock.*;
+import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;
+import static org.junit.matchers.JUnitMatchers.*;
+import java.util.ArrayList;
+import java.util.Map;
+
import javax.faces.component.behavior.ClientBehaviorContext;
+import javax.faces.convert.Converter;
+import javax.faces.convert.NumberConverter;
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
import org.ajax4jsf.javascript.JSLiteral;
+import org.hamcrest.BaseMatcher;
+import org.hamcrest.Description;
+import org.hamcrest.Matcher;
+import org.jboss.test.faces.mock.Mock;
+import org.jboss.test.faces.mock.MockTestRunner;
import org.junit.Test;
+import org.junit.runner.RunWith;
import org.richfaces.validator.ConverterDescriptor;
+import org.richfaces.validator.LibraryResource;
import org.richfaces.validator.LibraryScript;
import org.richfaces.validator.ScriptNotFoundException;
import org.richfaces.validator.ValidatorDescriptor;
+(a)RunWith(MockTestRunner.class)
public class RendererGetComponentScriptTest extends RendererTestBase {
+ private static final String JSF_AJAX_REQUEST =
"jsf.ajax.request(this,event)";
+
private static final String NUMBER_CONVERTER = "numConverter";
+ private static final Matcher<LibraryResource> CORE_LIBRARY_MATCHER = new
BaseMatcher<LibraryResource>() {
+
+ public boolean matches(Object arg0) {
+ if (arg0 instanceof LibraryResource) {
+ LibraryResource resource = (LibraryResource) arg0;
+ return ORG_RICHFACES.equals(resource.getLibrary())
+ && CLIENT_VALIDATORS_JS.equals(resource.getResourceName());
+ }
+ return false;
+ }
+
+ public void describeTo(Description arg0) {
+ arg0.appendText("Library is RichFaces core validators");
+ }
+ };
+
+ @Mock
+ private ConverterDescriptor converterDescription;
+
/**
- * <p class="changed_added_4_0">Test generated script for case there
is no client-side converter.</p>
+ * <p class="changed_added_4_0">
+ * Test generated script for case there is no client-side converter.
+ * </p>
+ *
+ * @throws Exception
*/
+ @SuppressWarnings("unchecked")
@Test
- public void testCreateValidatorScriptNoConverter() {
+ public void testCreateValidatorScriptNoConverter() throws Exception {
ClientValidatorRenderer renderer = createStubRenderer(null,
createValidatorFunction());
+ setupBehavior(NumberConverter.class, Min.class);
+ exceptGetAjaxScript();
+ ComponentValidatorScript validatorScript = callGetScript(renderer);
+ String script = validatorScript.toScript();
+ // check what generated script contains ajax call only.
+ assertThat(
+ script,
+ allOf(containsString(JSF_AJAX_REQUEST),
not(containsString(REGEX_VALIDATOR)),
+ not(containsString(NUMBER_CONVERTER))));
}
+ private void exceptGetAjaxScript() {
+ expect(mockBehavior.getAjaxScript(behaviorContext)).andReturn(JSF_AJAX_REQUEST);
+ }
/**
- * <p class="changed_added_4_0">Test generated script for case there
is no client-side validator scripts.</p>
+ * <p class="changed_added_4_0">
+ * </p>
+ *
+ * @param renderer
+ * @return
*/
+ private ComponentValidatorScript callGetScript(ClientValidatorRenderer renderer) {
+ controller.replay();
+ ComponentValidatorScript validatorScript =
renderer.createValidatorScript(behaviorContext, mockBehavior);
+ controller.verify();
+ return validatorScript;
+ }
+
+ /**
+ * <p class="changed_added_4_0">
+ * Test generated script for case there is no client-side validator scripts.
+ * </p>
+ *
+ * @throws Exception
+ */
@Test
- public void testCreateValidatorScriptNoValidator() {
+ public void testCreateValidatorScriptNoValidator() throws Exception {
ClientValidatorRenderer renderer =
createStubRenderer(createConverterFunction());
+ setupBehavior(NumberConverter.class, Min.class);
+ exceptGetAjaxScript();
+ ComponentValidatorScript validatorScript = callGetScript(renderer);
+ String script = validatorScript.toScript();
+ // check what generated script contains ajax call only.
+ assertThat(
+ script,
+ allOf(containsString(JSF_AJAX_REQUEST),
not(containsString(REGEX_VALIDATOR)),
+ not(containsString(NUMBER_CONVERTER))));
}
/**
- * <p class="changed_added_4_0">Test generated script for case there
is no client-side script for some validator, but exists for other</p>
+ * <p class="changed_added_4_0">
+ * Test generated script for case there is no client-side script for some validator,
but exists for other
+ * </p>
+ *
+ * @throws Exception
*/
@Test
- public void testCreateValidatorScriptPartialValidator() {
- fail("Not yet implemented");
+ public void testCreateValidatorScriptPartialValidator() throws Exception {
+ ClientValidatorRenderer renderer = createStubRenderer(createConverterFunction(),
createValidatorFunction());
+ setupBehavior(NumberConverter.class, Min.class, Max.class);
+ exceptGetAjaxScript();
+ ComponentValidatorScript validatorScript = callGetScript(renderer);
+ String script = validatorScript.toScript();
+ // check what generated script contains ajax and client side scripts.
+ assertThat(script,
+ allOf(containsString(JSF_AJAX_REQUEST), containsString(REGEX_VALIDATOR),
containsString(NUMBER_CONVERTER)));
+ assertThat(validatorScript.getResources(), hasItem(CORE_LIBRARY_MATCHER));
}
/**
- * <p class="changed_added_4_0">Test case when validation does not
required at all.</p>
+ * <p class="changed_added_4_0">
+ * Test case when validation does not required at all.
+ * </p>
+ *
+ * @throws Exception
*/
@Test
- public void testCreateValidatorScriptEmptyValidator() {
- fail("Not yet implemented");
+ public void testCreateValidatorScriptEmptyValidator() throws Exception {
+ ClientValidatorRenderer renderer =
createStubRenderer(createConverterFunction());
+ setupBehavior(NumberConverter.class);
+ ComponentValidatorScript validatorScript = callGetScript(renderer);
+ assertNull(validatorScript);
}
/**
- * <p class="changed_added_4_0">Test for case when client side
converter is not required.</p>
+ * <p class="changed_added_4_0">
+ * Test for case when client side converter is not required.
+ * </p>
+ *
+ * @throws Exception
*/
@Test
- public void testCreateValidatorScriptNullConverter() {
- fail("Not yet implemented");
+ public void testCreateValidatorScriptNullConverter() throws Exception {
+ ClientValidatorRenderer renderer = createStubRenderer(null,
createValidatorFunction());
+ setupBehavior(null, Min.class);
+ ComponentValidatorScript validatorScript = callGetScript(renderer);
+ String script = validatorScript.toScript();
+ // check what generated script contains ajax and client side scripts.
+ assertThat(
+ script,
+ allOf(not(containsString(JSF_AJAX_REQUEST)),
containsString(REGEX_VALIDATOR),
+ not(containsString(NUMBER_CONVERTER))));
+ assertThat(validatorScript.getResources(), hasItem(CORE_LIBRARY_MATCHER));
}
/**
- * <p class="changed_added_4_0">Test case when all converter and
validators available on client.</p>
+ * <p class="changed_added_4_0">
+ * Test case when all converter and validators available on client.
+ * </p>
+ *
+ * @throws Exception
*/
@Test
- public void testCreateValidatorScriptClientOnly() {
- fail("Not yet implemented");
+ public void testCreateValidatorScriptClientOnly() throws Exception {
+ ClientValidatorRenderer renderer = createStubRenderer(createConverterFunction(),
createValidatorFunction());
+ setupBehavior(NumberConverter.class, Min.class);
+ ComponentValidatorScript validatorScript = callGetScript(renderer);
+ String script = validatorScript.toScript();
+ // check what generated script contains ajax and client side scripts.
+ assertThat(
+ script,
+ allOf(not(containsString(JSF_AJAX_REQUEST)),
containsString(REGEX_VALIDATOR),
+ containsString(NUMBER_CONVERTER)));
+ assertThat(validatorScript.getResources(), hasItem(CORE_LIBRARY_MATCHER));
}
-
+
private LibraryScriptFunction createValidatorFunction() {
return createFunction(REGEX_VALIDATOR,
ClientValidatorRenderer.CONVERTED_VALUE_VAR, VALIDATOR_MESSAGE);
}
@@ -72,45 +200,70 @@
return createFunction(NUMBER_CONVERTER, ClientValidatorRenderer.VALUE_VAR,
VALIDATOR_MESSAGE);
}
- private LibraryScriptFunction createFunction(final String name,String var,String
message) {
+ private LibraryScriptFunction createFunction(final String name, String var, String
message) {
LibraryScript libraryScript = new LibraryScript() {
-
+
public String getResourceName() {
return CLIENT_VALIDATORS_JS;
}
-
+
public String getLibrary() {
return ORG_RICHFACES;
}
-
+
public String getName() {
return name;
}
};
- return new LibraryScriptFunction(libraryScript,new
JSLiteral(var),message,VALIDATOR_PARAMS);
+ return new LibraryScriptFunction(libraryScript, new JSLiteral(var), message,
VALIDATOR_PARAMS);
}
-
- private ClientValidatorRenderer createStubRenderer(final LibraryScriptFunction
converterFunction, final LibraryScriptFunction ...validatorFunctions){
- return new ClientValidatorRenderer(){
-
+
+ private ClientValidatorRenderer createStubRenderer(final LibraryScriptFunction
converterFunction,
+ final LibraryScriptFunction... validatorFunctions) {
+ return new ClientValidatorRenderer() {
+
private int validatorsCounter = 0;
+
@Override
LibraryScriptFunction getClientSideConverterScript(ClientBehaviorContext
behaviorContext,
ConverterDescriptor converter) throws ScriptNotFoundException {
- if(null == converterFunction){
+ if (null == converterFunction) {
throw new ScriptNotFoundException();
}
return converterFunction;
}
-
+
@Override
LibraryScriptFunction getClientSideValidatorScript(ClientBehaviorContext
behaviorContext,
ValidatorDescriptor validator) throws ScriptNotFoundException {
- if(validatorsCounter>=validatorFunctions.length){
+ if (validatorsCounter >= validatorFunctions.length) {
throw new ScriptNotFoundException();
}
return validatorFunctions[validatorsCounter++];
}
};
}
+
+ private void setupBehavior(Class<? extends Converter> converter,
Class<?>... validators) throws Exception {
+ setupBehaviorContext(input);
+ if (null != converter) {
+ setupDescription(converter, converterDescription);
+
expect(mockBehavior.getConverter(behaviorContext)).andReturn(converterDescription);
+ } else {
+ expect(mockBehavior.getConverter(behaviorContext)).andStubReturn(null);
+ }
+ ArrayList<ValidatorDescriptor> validatorDescriptors = new
ArrayList<ValidatorDescriptor>(validators.length);
+ for (Class<?> validator : validators) {
+ ValidatorDescriptor validatorDescriptor =
controller.createNiceMock(ValidatorDescriptor.class);
+ setupDescription(validator, validatorDescriptor);
+ validatorDescriptors.add(validatorDescriptor);
+ }
+
expect(mockBehavior.getValidators(behaviorContext)).andReturn(validatorDescriptors);
+ }
+
+ private void setupDescription(Class<?> converter, ValidatorDescriptor
descriptor) {
+ expect((Class) descriptor.getValidatorClass()).andStubReturn(converter);
+ expect(converterDescription.getMessage()).andStubReturn(VALIDATOR_MESSAGE);
+ expect((Map)
converterDescription.getValidatorParameters()).andStubReturn(VALIDATOR_PARAMS);
+ }
}
Added:
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/renderkit/html/RendererGetOrCreateResourceTest.java
===================================================================
---
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/renderkit/html/RendererGetOrCreateResourceTest.java
(rev 0)
+++
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/renderkit/html/RendererGetOrCreateResourceTest.java 2010-10-19
23:53:42 UTC (rev 19609)
@@ -0,0 +1,108 @@
+package org.richfaces.renderkit.html;
+
+import static org.easymock.EasyMock.*;
+import static org.junit.Assert.*;
+
+import java.util.List;
+
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIViewRoot;
+import javax.faces.component.behavior.ClientBehaviorContext;
+import javax.faces.context.FacesContext;
+
+import org.jboss.test.faces.mock.Mock;
+import org.jboss.test.faces.mock.MockTestRunner;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.richfaces.component.UIValidatorScript;
+import org.richfaces.component.behavior.ClientValidatorBehavior;
+
+import com.google.common.collect.Lists;
+
+(a)RunWith(MockTestRunner.class)
+public class RendererGetOrCreateResourceTest extends RendererTestBase {
+
+ private static final String FUNCTION_NAME = "inputValidate";
+
+ @Mock
+ private UIViewRoot viewRoot;
+
+ @Mock
+ private ComponentValidatorScript validatorScript;
+
+ private UIValidatorScript scriptResource;
+
+ /**
+ * <p class="changed_added_4_0">No resource exist in view, create a
new one and store in "form" target.</p>
+ */
+ @Test
+ public void testCreateValidatorScriptResource() {
+ FacesContext facesContext = recordResources(null,null);
+
expect(environment.getApplication().createComponent(UIValidatorScript.COMPONENT_TYPE)).andReturn(scriptResource);
+ viewRoot.addComponentResource(facesContext, scriptResource);expectLastCall();
+ verifyResult(facesContext);
+ }
+
+ private FacesContext recordResources(UIComponent formResource,UIComponent
bodyResource) {
+ FacesContext facesContext = recordViewRoot();
+ recordViewResources("form", formResource);
+ recordViewResources("body", bodyResource);
+ return facesContext;
+ }
+
+ private void verifyResult(FacesContext facesContext) {
+ controller.replay();
+
assertSame(scriptResource,renderer.getOrCreateValidatorScriptResource(facesContext));
+ controller.verify();
+ }
+
+ /**
+ * <p class="changed_added_4_0">Resource already exists in
"form" target</p>
+ */
+ @Test
+ public void testGetValidatorScriptResourceForm() {
+ FacesContext facesContext = recordResources(scriptResource,null);
+ verifyResult(facesContext);
+ }
+
+ /**
+ * <p class="changed_added_4_0">Resource already exists in
"body" target</p>
+ */
+ @Test
+ public void testGetValidatorScriptResourceBody() {
+ FacesContext facesContext = recordResources(null,scriptResource);
+ verifyResult(facesContext);
+ }
+
+ @Test
+ public void buildAndStoreScript() throws Exception {
+ FacesContext facesContext = recordResources(scriptResource,null);
+ ClientValidatorRenderer renderer = new ClientValidatorRenderer(){
+ ComponentValidatorScript createValidatorScript(ClientBehaviorContext
behaviorContext, ClientValidatorBehavior behavior) {
+ return validatorScript;
+ };
+ };
+ setupBehaviorContext(input);
+ expect(input.getClientId(facesContext)).andReturn(FUNCTION_NAME);
+ controller.replay();
+ assertEquals(FUNCTION_NAME,
renderer.buildAndStoreValidatorScript(behaviorContext, mockBehavior));
+ assertEquals(1, scriptResource.getScripts().size());
+ controller.verify();
+ }
+
+
+ private void recordViewResources(String target, UIComponent resource){
+ FacesContext facesContext = environment.getFacesContext();
+ List<UIComponent> resources = Lists.newArrayList();
+ if(null != resource){
+ resources.add(resource);
+ }
+ expect(viewRoot.getComponentResources(facesContext,
target)).andStubReturn(resources);
+ }
+
+ private FacesContext recordViewRoot() {
+ FacesContext facesContext = environment.getFacesContext();
+ expect(facesContext.getViewRoot()).andStubReturn(viewRoot);
+ return facesContext;
+ }
+}
Property changes on:
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/renderkit/html/RendererGetOrCreateResourceTest.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified:
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/renderkit/html/RendererTestBase.java
===================================================================
---
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/renderkit/html/RendererTestBase.java 2010-10-19
18:10:00 UTC (rev 19608)
+++
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/renderkit/html/RendererTestBase.java 2010-10-19
23:53:42 UTC (rev 19609)
@@ -2,6 +2,7 @@
import java.util.Map;
+import org.jboss.test.faces.mock.Mock;
import org.richfaces.component.behavior.BehaviorTestBase;
import org.richfaces.component.behavior.ClientValidatorBehavior;
@@ -14,15 +15,15 @@
protected static final String REGEX_VALIDATOR = "regexValidator";
protected static final String VALIDATOR_MESSAGE = "Validator Message";
protected static final Map<String, ? extends Object> VALIDATOR_PARAMS =
ImmutableMap.of("foo", "value", "bar", 10);
+
protected ClientValidatorRenderer renderer = new ClientValidatorRenderer();
+
+ @Mock
+ protected ClientValidatorBehavior mockBehavior;
public RendererTestBase() {
super();
}
- @Override
- protected ClientValidatorBehavior createBehavior() {
- return controller.createMock(ClientValidatorBehavior.class);
- }
}
\ No newline at end of file
Modified:
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/renderkit/html/ValidatorRendererGetScriptTest.java
===================================================================
---
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/renderkit/html/ValidatorRendererGetScriptTest.java 2010-10-19
18:10:00 UTC (rev 19608)
+++
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/renderkit/html/ValidatorRendererGetScriptTest.java 2010-10-19
23:53:42 UTC (rev 19609)
@@ -17,7 +17,7 @@
@Test(expected=NullPointerException.class)
public void testGetScriptNullContext() {
- renderer.getScript(null, behavior);
+ renderer.getScript(null, mockBehavior);
}
@Test(expected=NullPointerException.class)
public void testGetScriptNullBehavior() {