[hibernate-commits] Hibernate SVN: r19735 - in validator/trunk: hibernate-validator and 2 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Tue Jun 15 05:40:40 EDT 2010


Author: hardy.ferentschik
Date: 2010-06-15 05:40:40 -0400 (Tue, 15 Jun 2010)
New Revision: 19735

Added:
   validator/trunk/hibernate-validator/src/test/java/org/hibernate/validator/test/engine/messageinterpolation/MessageInterpolatorContextTest.java
Modified:
   validator/trunk/hibernate-validator/pom.xml
   validator/trunk/hibernate-validator/src/main/java/org/hibernate/validator/engine/MessageInterpolatorContext.java
   validator/trunk/hibernate-validator/src/main/java/org/hibernate/validator/engine/ValidationContext.java
   validator/trunk/pom.xml
Log:
HV-333 Makde sure the actual validated value is passed to interpolate via MessageInterpolatorContext

Modified: validator/trunk/hibernate-validator/pom.xml
===================================================================
--- validator/trunk/hibernate-validator/pom.xml	2010-06-15 06:40:13 UTC (rev 19734)
+++ validator/trunk/hibernate-validator/pom.xml	2010-06-15 09:40:40 UTC (rev 19735)
@@ -82,6 +82,11 @@
             <classifier>jdk15</classifier>
         </dependency>
         <dependency>
+          <groupId>org.easymock</groupId>
+          <artifactId>easymock</artifactId>
+          <scope>test</scope>
+        </dependency>        
+        <dependency>
             <groupId>org.hibernate</groupId>
             <artifactId>hibernate-entitymanager</artifactId>
             <scope>test</scope>

Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validator/engine/MessageInterpolatorContext.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validator/engine/MessageInterpolatorContext.java	2010-06-15 06:40:13 UTC (rev 19734)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validator/engine/MessageInterpolatorContext.java	2010-06-15 09:40:40 UTC (rev 19735)
@@ -21,9 +21,10 @@
 import javax.validation.MessageInterpolator;
 
 /**
- * Takes mandatory elements in the constructor
+ * Implementation of the context used during message interpolation.
  *
  * @author Emmanuel Bernard
+ * @author Hardy Ferentschik
  */
 public class MessageInterpolatorContext implements MessageInterpolator.Context {
 	private final ConstraintDescriptor<?> constraintDescriptor;
@@ -41,4 +42,42 @@
 	public Object getValidatedValue() {
 		return validatedValue;
 	}
+
+	@Override
+	public boolean equals(Object o) {
+		if ( this == o ) {
+			return true;
+		}
+		if ( o == null || getClass() != o.getClass() ) {
+			return false;
+		}
+
+		MessageInterpolatorContext that = ( MessageInterpolatorContext ) o;
+
+		if ( constraintDescriptor != null ? !constraintDescriptor.equals( that.constraintDescriptor ) : that.constraintDescriptor != null ) {
+			return false;
+		}
+		if ( validatedValue != null ? !validatedValue.equals( that.validatedValue ) : that.validatedValue != null ) {
+			return false;
+		}
+
+		return true;
+	}
+
+	@Override
+	public int hashCode() {
+		int result = constraintDescriptor != null ? constraintDescriptor.hashCode() : 0;
+		result = 31 * result + ( validatedValue != null ? validatedValue.hashCode() : 0 );
+		return result;
+	}
+
+	@Override
+	public String toString() {
+		final StringBuilder sb = new StringBuilder();
+		sb.append( "MessageInterpolatorContext" );
+		sb.append( "{constraintDescriptor=" ).append( constraintDescriptor );
+		sb.append( ", validatedValue=" ).append( validatedValue );
+		sb.append( '}' );
+		return sb.toString();
+	}
 }

Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validator/engine/ValidationContext.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validator/engine/ValidationContext.java	2010-06-15 06:40:13 UTC (rev 19734)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validator/engine/ValidationContext.java	2010-06-15 09:40:40 UTC (rev 19735)
@@ -149,7 +149,7 @@
 		String messageTemplate = messageAndPath.getMessage();
 		String interpolatedMessage = messageInterpolator.interpolate(
 				messageTemplate,
-				new MessageInterpolatorContext( descriptor, localContext.getCurrentBean() )
+				new MessageInterpolatorContext( descriptor, localContext.getCurrentValidatedValue() )
 		);
 		return new ConstraintViolationImpl<T>(
 				messageTemplate,

Copied: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validator/test/engine/messageinterpolation/MessageInterpolatorContextTest.java (from rev 19558, validator/trunk/hibernate-validator/src/test/java/org/hibernate/validator/test/engine/messageinterpolation/MessageInterpolationTest.java)
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validator/test/engine/messageinterpolation/MessageInterpolatorContextTest.java	                        (rev 0)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validator/test/engine/messageinterpolation/MessageInterpolatorContextTest.java	2010-06-15 09:40:40 UTC (rev 19735)
@@ -0,0 +1,113 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat, Inc. and/or its affiliates, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// $Id$
+
+package org.hibernate.validator.test.engine.messageinterpolation;
+
+import java.util.Set;
+import javax.validation.ConstraintViolation;
+import javax.validation.MessageInterpolator;
+import javax.validation.Validator;
+import javax.validation.ValidatorFactory;
+import javax.validation.metadata.BeanDescriptor;
+import javax.validation.metadata.ConstraintDescriptor;
+import javax.validation.metadata.PropertyDescriptor;
+
+import org.hibernate.validator.HibernateValidator;
+import org.hibernate.validator.HibernateValidatorConfiguration;
+import org.hibernate.validator.cfg.ConstraintMapping;
+import org.hibernate.validator.cfg.defs.MinDef;
+import org.hibernate.validator.engine.MessageInterpolatorContext;
+import org.hibernate.validator.test.util.TestUtil;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.verify;
+import static org.hibernate.validator.test.util.TestUtil.assertNumberOfViolations;
+import static org.testng.Assert.assertTrue;
+
+
+/**
+ * Tests for HV-333
+ *
+ * @author Hardy Ferentschik
+ */
+public class MessageInterpolatorContextTest {
+
+	@org.testng.annotations.Test
+	public void testInterpolatorContext() throws Exception {
+
+		// use programmatic mapping api to configure constraint
+		ConstraintMapping mapping = new ConstraintMapping();
+		mapping.type( Test.class )
+				.property( "test", FIELD )
+				.constraint( MinDef.class )
+				.value( 10 )
+				.message( "{foo}" );
+
+		// use a easy mock message interpolator to verify the right for verifying that the right MessageInterpolatorContext
+		// will be passed
+		MessageInterpolator mock = createMock( MessageInterpolator.class );
+		HibernateValidatorConfiguration config = TestUtil.getConfiguration( HibernateValidator.class );
+		config.messageInterpolator( mock );
+		config.addMapping( mapping );
+
+		ValidatorFactory factory = config.buildValidatorFactory();
+		Validator validator = factory.getValidator();
+
+		BeanDescriptor beanDescriptor = validator.getConstraintsForClass( Test.class );
+		PropertyDescriptor propertyDescriptor = beanDescriptor.getConstraintsForProperty( "test" );
+		Set<ConstraintDescriptor<?>> constraintDescriptors = propertyDescriptor.getConstraintDescriptors();
+		assertTrue( constraintDescriptors.size() == 1 );
+
+		// prepare the mock interpolator to expect the right interpolate call
+		String validatedValue = "value";
+		expect(
+				mock.interpolate(
+						"{foo}",
+						new MessageInterpolatorContext( constraintDescriptors.iterator().next(), validatedValue )
+				)
+		).andReturn( "{foo}" );
+		replay( mock );
+
+		Set<ConstraintViolation<Test>> violations = validator.validate( new Test( validatedValue ) );
+		assertNumberOfViolations( violations, 1 );
+
+		// verify that the right validatedValue was passed
+		verify( mock );
+	}
+
+
+	public static class Test {
+		private String test;
+
+		public Test(String test) {
+			this.test = test;
+		}
+
+		public String getTest() {
+			return test;
+		}
+
+		public void setTest(String test) {
+			this.test = test;
+		}
+	}
+}
\ No newline at end of file

Modified: validator/trunk/pom.xml
===================================================================
--- validator/trunk/pom.xml	2010-06-15 06:40:13 UTC (rev 19734)
+++ validator/trunk/pom.xml	2010-06-15 09:40:40 UTC (rev 19735)
@@ -105,6 +105,11 @@
                 <classifier>jdk15</classifier>
             </dependency>
             <dependency>
+              <groupId>org.easymock</groupId>
+              <artifactId>easymock</artifactId>
+              <version>3.0</version>
+            </dependency>            
+            <dependency>
                 <groupId>com.h2database</groupId>
                 <artifactId>h2</artifactId>
                 <version>1.2.124</version>



More information about the hibernate-commits mailing list