Author: alexsmirnov
Date: 2010-10-15 15:19:49 -0400 (Fri, 15 Oct 2010)
New Revision: 19586
Added:
branches/RF-8742/ui/validator/api/src/main/java/org/richfaces/validator/ConverterDescriptor.java
branches/RF-8742/ui/validator/api/src/main/java/org/richfaces/validator/FacesConverterService.java
branches/RF-8742/ui/validator/api/src/main/java/org/richfaces/validator/ValidatorDescriptor.java
Removed:
branches/RF-8742/ui/validator/impl/src/main/java/org/richfaces/validator/ValidatorDescriptor.java
Modified:
branches/RF-8742/ui/validator/ui/src/main/java/org/richfaces/component/behavior/ClientValidatorBehavior.java
branches/RF-8742/ui/validator/ui/src/main/java/org/richfaces/component/behavior/ClientValidatorImpl.java
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/component/behavior/BehaviorGetConverterTest.java
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/component/behavior/BehaviorGetValidatorTest.java
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/component/behavior/BehaviorTestBase.java
Log:
RESOLVED - issue RF-9506: ClientValidatorBehavior unit tests and implementation.
https://jira.jboss.org/browse/RF-9506
Added:
branches/RF-8742/ui/validator/api/src/main/java/org/richfaces/validator/ConverterDescriptor.java
===================================================================
---
branches/RF-8742/ui/validator/api/src/main/java/org/richfaces/validator/ConverterDescriptor.java
(rev 0)
+++
branches/RF-8742/ui/validator/api/src/main/java/org/richfaces/validator/ConverterDescriptor.java 2010-10-15
19:19:49 UTC (rev 19586)
@@ -0,0 +1,5 @@
+package org.richfaces.validator;
+
+public interface ConverterDescriptor extends ValidatorDescriptor {
+
+}
Property changes on:
branches/RF-8742/ui/validator/api/src/main/java/org/richfaces/validator/ConverterDescriptor.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added:
branches/RF-8742/ui/validator/api/src/main/java/org/richfaces/validator/FacesConverterService.java
===================================================================
---
branches/RF-8742/ui/validator/api/src/main/java/org/richfaces/validator/FacesConverterService.java
(rev 0)
+++
branches/RF-8742/ui/validator/api/src/main/java/org/richfaces/validator/FacesConverterService.java 2010-10-15
19:19:49 UTC (rev 19586)
@@ -0,0 +1,16 @@
+package org.richfaces.validator;
+
+import javax.faces.context.FacesContext;
+import javax.faces.convert.Converter;
+
+
+/**
+ * <p class="changed_added_4_0">This service extract information from
Converter instance.</p>
+ * @author asmirnov(a)exadel.com
+ *
+ */
+public interface FacesConverterService {
+
+ ConverterDescriptor getConverterDescription(FacesContext context,Converter
validator);
+
+}
Property changes on:
branches/RF-8742/ui/validator/api/src/main/java/org/richfaces/validator/FacesConverterService.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Copied:
branches/RF-8742/ui/validator/api/src/main/java/org/richfaces/validator/ValidatorDescriptor.java
(from rev 19584,
branches/RF-8742/ui/validator/impl/src/main/java/org/richfaces/validator/ValidatorDescriptor.java)
===================================================================
---
branches/RF-8742/ui/validator/api/src/main/java/org/richfaces/validator/ValidatorDescriptor.java
(rev 0)
+++
branches/RF-8742/ui/validator/api/src/main/java/org/richfaces/validator/ValidatorDescriptor.java 2010-10-15
19:19:49 UTC (rev 19586)
@@ -0,0 +1,42 @@
+package org.richfaces.validator;
+
+import java.util.Map;
+
+/**
+ * <p class="changed_added_4_0">
+ * Inmlementations of this interface describe JSF or JSR-303 validators. Because JSF
supports 2 types of validators,
+ * this interface unifies access to them.
+ * </p>
+ *
+ * @author asmirnov(a)exadel.com
+ *
+ */
+public interface ValidatorDescriptor {
+
+ /**
+ * <p class="changed_added_4_0">
+ * Returns JSF {@link javax.faces.validator.Validator} implementation class or
JSR-303 annotation class.
+ * </p>
+ *
+ * @return
+ */
+ Class<?> getValidatorClass();
+
+ /**
+ * <p class="changed_added_4_0">
+ * Concrete validator parameters
+ * </p>
+ *
+ * @return non null map with validator instance parameters.
+ */
+ Map<String, Object> getValidatorParameters();
+
+ /**
+ * <p class="changed_added_4_0">
+ * Localized validator message
+ * </p>
+ *
+ * @return
+ */
+ String getMessage();
+}
Property changes on:
branches/RF-8742/ui/validator/api/src/main/java/org/richfaces/validator/ValidatorDescriptor.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Deleted:
branches/RF-8742/ui/validator/impl/src/main/java/org/richfaces/validator/ValidatorDescriptor.java
===================================================================
---
branches/RF-8742/ui/validator/impl/src/main/java/org/richfaces/validator/ValidatorDescriptor.java 2010-10-15
18:47:06 UTC (rev 19585)
+++
branches/RF-8742/ui/validator/impl/src/main/java/org/richfaces/validator/ValidatorDescriptor.java 2010-10-15
19:19:49 UTC (rev 19586)
@@ -1,42 +0,0 @@
-package org.richfaces.validator;
-
-import java.util.Map;
-
-/**
- * <p class="changed_added_4_0">
- * Inmlementations of this interface describe JSF or JSR-303 validators. Because JSF
supports 2 types of validators,
- * this interface unifies access to them.
- * </p>
- *
- * @author asmirnov(a)exadel.com
- *
- */
-public interface ValidatorDescriptor {
-
- /**
- * <p class="changed_added_4_0">
- * Returns JSF {@link javax.faces.validator.Validator} implementation class or
JSR-303 annotation class.
- * </p>
- *
- * @return
- */
- Class<?> getValidatorClass();
-
- /**
- * <p class="changed_added_4_0">
- * Concrete validator parameters
- * </p>
- *
- * @return non null map with validator instance parameters.
- */
- Map<String, Object> getValidatorParameters();
-
- /**
- * <p class="changed_added_4_0">
- * Localized validator message
- * </p>
- *
- * @return
- */
- String getMessage();
-}
Modified:
branches/RF-8742/ui/validator/ui/src/main/java/org/richfaces/component/behavior/ClientValidatorBehavior.java
===================================================================
---
branches/RF-8742/ui/validator/ui/src/main/java/org/richfaces/component/behavior/ClientValidatorBehavior.java 2010-10-15
18:47:06 UTC (rev 19585)
+++
branches/RF-8742/ui/validator/ui/src/main/java/org/richfaces/component/behavior/ClientValidatorBehavior.java 2010-10-15
19:19:49 UTC (rev 19586)
@@ -4,8 +4,8 @@
import javax.faces.component.behavior.ClientBehavior;
import javax.faces.component.behavior.ClientBehaviorContext;
-import javax.faces.convert.Converter;
+import org.richfaces.validator.ConverterDescriptor;
import org.richfaces.validator.ValidatorDescriptor;
/**
@@ -32,7 +32,7 @@
* @param context
* @return {@link Converter} instance or null if conversion not required.
*/
- Converter getConverter(ClientBehaviorContext context) throws
ConverterNotFoundException;
+ ConverterDescriptor getConverter(ClientBehaviorContext context) throws
ConverterNotFoundException;
/**
* <p class="changed_added_4_0"></p>
@@ -41,6 +41,10 @@
*/
Collection<ValidatorDescriptor> getValidators(ClientBehaviorContext context);
+ /**
+ * <p class="changed_added_4_0">Returns array of classes that
represents JSR-303 validation groups.</p>
+ * @return
+ */
Class<?>[] getGroups();
void setGroups(Class<?> ...groups);
Modified:
branches/RF-8742/ui/validator/ui/src/main/java/org/richfaces/component/behavior/ClientValidatorImpl.java
===================================================================
---
branches/RF-8742/ui/validator/ui/src/main/java/org/richfaces/component/behavior/ClientValidatorImpl.java 2010-10-15
18:47:06 UTC (rev 19585)
+++
branches/RF-8742/ui/validator/ui/src/main/java/org/richfaces/component/behavior/ClientValidatorImpl.java 2010-10-15
19:19:49 UTC (rev 19586)
@@ -45,6 +45,8 @@
import org.richfaces.renderkit.html.ClientValidatorRenderer;
import org.richfaces.renderkit.html.FormClientValidatorRenderer;
import org.richfaces.validator.BeanValidatorService;
+import org.richfaces.validator.ConverterDescriptor;
+import org.richfaces.validator.FacesConverterService;
import org.richfaces.validator.FacesValidatorService;
import org.richfaces.validator.ValidatorDescriptor;
@@ -130,33 +132,45 @@
* @see
org.richfaces.component.behavior.ClientValidatorBehavior#getConverter(javax.faces.component.behavior.
* ClientBehaviorContext)
*/
- public Converter getConverter(ClientBehaviorContext context) throws
ConverterNotFoundException {
+ public ConverterDescriptor getConverter(ClientBehaviorContext context) throws
ConverterNotFoundException {
UIComponent component = context.getComponent();
if (component instanceof EditableValueHolder) {
EditableValueHolder input = (EditableValueHolder) component;
+ FacesContext facesContext = context.getFacesContext();
Converter converter = input.getConverter();
if (null == converter) {
Class<?> valueType;
ValueExpression valueExpression = component.getValueExpression(VALUE);
if (null != valueExpression) {
- FacesContext facesContext = context.getFacesContext();
valueType = valueExpression.getType(facesContext.getELContext());
- if (valueType != null && valueType != Object.class) {
- Application application = facesContext.getApplication();
- converter = application.createConverter(valueType);
- if (null == converter && valueType != String.class) {
- throw new ConverterNotFoundException("No converter
registered for type "
- + valueType.getName());
- }
- }
+ converter = createConverterByType(facesContext, valueType);
}
}
- return converter;
+ if(null != converter){
+ FacesConverterService converterService =
ServiceTracker.getService(facesContext, FacesConverterService.class);
+ return converterService.getConverterDescription(facesContext,
converter);
+ } else {
+ return null;
+ }
} else {
throw new ConverterNotFoundException("Component does not implement
EditableValueHolder" + component);
}
}
+ Converter createConverterByType(FacesContext facesContext, Class<?> valueType)
+ throws ConverterNotFoundException {
+ Converter converter = null;
+ if (valueType != null && valueType != Object.class) {
+ Application application = facesContext.getApplication();
+ converter = application.createConverter(valueType);
+ if (null == converter && valueType != String.class) {
+ throw new ConverterNotFoundException("No converter registered for
type "
+ + valueType.getName());
+ }
+ }
+ return converter;
+ }
+
/*
* (non-Javadoc)
*
Modified:
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/component/behavior/BehaviorGetConverterTest.java
===================================================================
---
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/component/behavior/BehaviorGetConverterTest.java 2010-10-15
18:47:06 UTC (rev 19585)
+++
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/component/behavior/BehaviorGetConverterTest.java 2010-10-15
19:19:49 UTC (rev 19586)
@@ -1,32 +1,65 @@
package org.richfaces.component.behavior;
-import static org.easymock.EasyMock.expect;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertSame;
+import static org.easymock.EasyMock.*;
+import static org.junit.Assert.*;
+
import javax.faces.convert.Converter;
import javax.faces.convert.NumberConverter;
+import org.easymock.Capture;
import org.jboss.test.faces.mock.Mock;
import org.jboss.test.faces.mock.MockTestRunner;
+import org.jboss.test.faces.mock.Stub;
+import org.junit.After;
+import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.richfaces.application.ServiceTracker;
+import org.richfaces.validator.ConverterDescriptor;
+import org.richfaces.validator.FacesConverterService;
-
/**
- * <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>
+ * <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(a)exadel.com
- *
+ *
*/
@RunWith(MockTestRunner.class)
public class BehaviorGetConverterTest extends BehaviorTestBase {
-
@Mock
private Converter converter;
+ @Mock
+ private FacesConverterService converterService;
+
+ @Stub
+ private ConverterDescriptor descriptor;
+
+ private Capture<Converter> converterCapture;
+
+ @Before
+ public void setupService() {
+
expect(factory.getInstance(FacesConverterService.class)).andStubReturn(converterService);
+ converterCapture = new Capture<Converter>();
+
expect(converterService.getConverterDescription(eq(environment.getFacesContext()),
capture(converterCapture)))
+ .andStubReturn(descriptor);
+ ServiceTracker.setFactory(factory);
+ }
+
+ @After
+ public void releaseService() {
+ ServiceTracker.release();
+ }
+
/**
- * <p class="changed_added_4_0">Server-side rendering algorithm .3 -
determine client-side converter</p>
+ * <p class="changed_added_4_0">
+ * Server-side rendering algorithm .3 - determine client-side converter
+ * </p>
+ *
* @throws Exception
*/
@Test
@@ -37,7 +70,10 @@
}
/**
- * <p class="changed_added_4_0">Server-side rendering algorithm .3 -
determine client-side converter</p>
+ * <p class="changed_added_4_0">
+ * Server-side rendering algorithm .3 - determine client-side converter
+ * </p>
+ *
* @throws Exception
*/
@Test
@@ -49,11 +85,11 @@
private void setupConverterFromApplication(Converter converter) {
expect(input.getConverter()).andReturn(null);
expect(input.getValueExpression("value")).andReturn(expression);
-
expect((Class)(expression.getType(environment.getElContext()))).andReturn(Number.class);
+ expect((Class)
(expression.getType(environment.getElContext()))).andReturn(Number.class);
expect(environment.getApplication().createConverter(Number.class)).andReturn(converter);
}
-
- @Test(expected=ConverterNotFoundException.class)
+
+ @Test(expected = ConverterNotFoundException.class)
public void testGetConverterNotExists() throws Exception {
setupConverterFromApplication(null);
checkConverter(null);
@@ -63,22 +99,22 @@
public void testSetConverterForString() throws Exception {
expect(input.getConverter()).andReturn(null);
expect(input.getValueExpression("value")).andReturn(expression);
-
expect((Class)(expression.getType(environment.getElContext()))).andReturn(String.class);
+ expect((Class)
(expression.getType(environment.getElContext()))).andReturn(String.class);
expect(environment.getApplication().createConverter(String.class)).andReturn(null);
checkConverter(null);
}
-
+
private void checkConverter(Converter converter) throws ConverterNotFoundException {
setupBehaviorContext(input);
controller.replay();
- Converter converter2 = behavior.getConverter(behaviorContext);
+ ConverterDescriptor converter2 = behavior.getConverter(behaviorContext);
controller.verify();
- if(null == converter){
+ if (null == converter) {
assertNull(converter2);
} else {
- assertSame(converter,converter2);
+ assertNotNull(converter2);
+ assertSame(converter, converterCapture.getValue());
}
}
-
}
Modified:
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/component/behavior/BehaviorGetValidatorTest.java
===================================================================
---
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/component/behavior/BehaviorGetValidatorTest.java 2010-10-15
18:47:06 UTC (rev 19585)
+++
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/component/behavior/BehaviorGetValidatorTest.java 2010-10-15
19:19:49 UTC (rev 19586)
@@ -19,7 +19,6 @@
import org.junit.Test;
import org.junit.runner.RunWith;
import org.richfaces.application.ServiceTracker;
-import org.richfaces.application.ServicesFactory;
import org.richfaces.validator.BeanValidatorService;
import org.richfaces.validator.FacesValidatorService;
import org.richfaces.validator.ValidatorDescriptor;
@@ -56,9 +55,6 @@
private FacesValidatorService facesValidatorService;
@Stub
- private ServicesFactory factory;
-
- @Stub
private ValueExpression expression;
@Before
Modified:
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/component/behavior/BehaviorTestBase.java
===================================================================
---
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/component/behavior/BehaviorTestBase.java 2010-10-15
18:47:06 UTC (rev 19585)
+++
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/component/behavior/BehaviorTestBase.java 2010-10-15
19:19:49 UTC (rev 19586)
@@ -13,7 +13,9 @@
import org.jboss.test.faces.mock.Mock;
import org.jboss.test.faces.mock.MockController;
import org.jboss.test.faces.mock.MockFacesEnvironment;
+import org.jboss.test.faces.mock.Stub;
import org.junit.Before;
+import org.richfaces.application.ServicesFactory;
public class BehaviorTestBase {
@@ -30,6 +32,8 @@
protected ClientValidatorImpl behavior;
@Mock
protected ValueExpression expression;
+ @Stub
+ protected ServicesFactory factory;
public BehaviorTestBase() {
super();