Commits

tm_jee  committed 12afd5d

XW-422
- StringLength validator fails when string is empty

git-svn-id: http://svn.opensymphony.com/svn/xwork/trunk@1152e221344d-f017-0410-9bd5-d282ab1896d7

  • Participants
  • Parent commits da2fec3

Comments (0)

Files changed (2)

File src/java/com/opensymphony/xwork2/validator/validators/StringLengthFieldValidator.java

  *
  * @author Jason Carreira
  * @author Mark Woon
+ * @author tmjee
  * @version $Date$ $Id$
  */
 public class StringLengthFieldValidator extends FieldValidatorSupport {
         String fieldName = getFieldName();
         String val = (String) getFieldValue(fieldName, object);
 
-        if (val == null) {
+        if (val == null || val.length() <= 0) {
             // use a required validator for these
             return;
         }
         if (doTrim) {
             val = val.trim();
+            if (val.length() <= 0) { 
+            	// use a required validator
+            	return;
+            }
         }
 
         if ((minLength > -1) && (val.length() < minLength)) {

File src/test/com/opensymphony/xwork2/validator/StringLengthFieldValidatorTest.java

+/*
+ * Copyright (c) 2002-2006 by OpenSymphony
+ * All rights reserved.
+ */
+package com.opensymphony.xwork2.validator;
+
+import com.opensymphony.xwork2.ActionSupport;
+import com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator;
+
+import junit.framework.TestCase;
+
+
+/**
+ * 
+ * @author tm_jee
+ * @version $Date$ $Id$
+ */
+public class StringLengthFieldValidatorTest extends TestCase {
+
+	protected InternalActionSupport action;
+	protected StringLengthFieldValidator validator;
+	
+	public void testStringLengthEmptyNoTrim1() throws Exception {
+		action.setMyField("");
+		
+		validator.setTrim(false);
+		validator.validate(action);
+		
+		assertEquals(action.getMyField(), "");
+		assertFalse(action.hasFieldErrors());
+	}
+	
+	public void testStringLengthNullNoTrim() throws Exception {
+		action.setMyField(null);
+
+		validator.setTrim(false);
+		validator.validate(action);
+		
+		assertEquals(action.getMyField(), null);
+		assertFalse(action.hasFieldErrors());
+	}
+	
+	public void testStringLengthEmptyTrim1() throws Exception {
+		action.setMyField("   ");
+		
+		validator.setTrim(true);
+		validator.validate(action);
+		
+		assertEquals(action.getMyField(), "   ");
+		assertFalse(action.hasFieldErrors());
+	}
+	
+	public void testStringLengthEmptyNoTrim2() throws Exception {
+		action.setMyField("          ");
+		
+		validator.setTrim(false);
+		validator.validate(action);
+		
+		assertEquals(action.getMyField(), "          ");
+		assertTrue(action.hasFieldErrors());
+	}
+	
+	
+	public void testStringLengthNullTrim() throws Exception {
+		action.setMyField(null);
+
+		validator.setTrim(true);
+		validator.validate(action);
+		
+		assertEquals(action.getMyField(), null);
+		assertFalse(action.hasFieldErrors());
+	}
+	
+	public void testInvalidStringLengthNoTrim() throws Exception {
+		action.setMyField("abcdefghijklmn");
+		
+		validator.setTrim(false);
+		validator.validate(action);
+		
+		assertEquals(action.getMyField(), "abcdefghijklmn");
+		assertTrue(action.hasFieldErrors());
+	}
+	
+	public void testInvalidStringLengthTrim() throws Exception {
+		action.setMyField("abcdefghijklmn   ");
+		
+		validator.setTrim(true);
+		validator.validate(action);
+		
+		assertEquals(action.getMyField(), "abcdefghijklmn   ");
+		assertTrue(action.hasFieldErrors());
+	}
+	
+	public void testValidStringLengthNoTrim() throws Exception {
+		action.setMyField("   ");
+		
+		validator.setTrim(false);
+		validator.validate(action);
+		
+		assertEquals(action.getMyField(), "   ");
+		assertFalse(action.hasFieldErrors());
+	}
+	
+	public void testValidStringLengthTrim() throws Exception {
+		action.setMyField("asd          ");
+		
+		validator.setTrim(true);
+		validator.validate(action);
+		
+		assertEquals(action.getMyField(), "asd          ");
+		assertFalse(action.hasFieldErrors());
+	}
+	
+	
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+		action = new InternalActionSupport();
+		validator = new StringLengthFieldValidator();
+		validator.setFieldName("myField");
+		validator.setMessageKey("error");
+		validator.setValidatorContext(new DelegatingValidatorContext(action));
+		validator.setMaxLength(5);
+		validator.setMinLength(2);
+	}
+	
+	
+	@Override
+	protected void tearDown() throws Exception {
+		super.tearDown();
+		action = null;
+		validator = null;
+	}
+	
+	public static class InternalActionSupport extends ActionSupport {
+
+		private static final long serialVersionUID = 1L;
+		
+		private String myField;
+		public String getMyField() { return this.myField; }
+		public void setMyField(String myField) { this.myField = myField; }
+	}
+}