niallp 2004/09/03 11:12:26
Modified: . build-tests.xml
Added: src/test/org/apache/struts/validator PojoBean.java
TestValidWhen.java
Log:
Add Test Cases for ValidWhen parser
Revision Changes Path
1.26 +4 -0 jakarta-struts/build-tests.xml
Index: build-tests.xml
===================================================================
RCS file: /home/cvs/jakarta-struts/build-tests.xml,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -r1.25 -r1.26
--- build-tests.xml 22 Mar 2004 07:16:37 -0000 1.25
+++ build-tests.xml 3 Sep 2004 18:12:26 -0000 1.26
@@ -114,6 +114,7 @@
<pathelement location="${junit.jar}"/>
<pathelement location="${servlet.jar}"/>
<pathelement location="${struts.jar}"/>
+ <pathelement location="${antlr.jar}"/>
</path>
<!-- ========== Executable Targets ======================================== -->
@@ -732,6 +733,9 @@
<test name="org.apache.struts.action.TestDynaActionFormClass"/>
<test name="org.apache.struts.config.TestModuleConfig"/>
<test name="org.apache.struts.config.TestActionConfigMatcher"/>
+
+ <!-- Tests for org.apache.struts.validator -->
+ <test name="org.apache.struts.validator.TestValidWhen"/>
<!-- Tests for org.apache.struts.util -->
<batchtest fork="yes">
1.1
jakarta-struts/src/test/org/apache/struts/validator/PojoBean.java
Index: PojoBean.java
===================================================================
/*
* $Header:
/home/cvs/jakarta-struts/src/test/org/apache/struts/validator/PojoBean.java,v 1.1
2004/09/03 18:12:26 niallp Exp $
* $Revision: 1.1 $
* $Date: 2004/09/03 18:12:26 $
*
* Copyright 2004 The Apache Software Foundation.
*
* 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.
*/
package org.apache.struts.validator;
import java.util.Map;
import java.util.HashMap;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
* Test Bean class.
*/
public class PojoBean {
protected String stringValue1;
protected String stringValue2;
protected int intValue1;
protected int intValue2;
protected Integer integerValue1;
protected Integer integerValue2;
protected PojoBean[] beans;
protected Map map = new HashMap();
/**
* Default Constructor
*/
public PojoBean() {
}
/**
* Construct Bean with a pair of String values.
*/
public PojoBean(String stringValue1, String stringValue2) {
setStringValue1(stringValue1);
setStringValue2(stringValue2);
}
/**
* Construct Bean with a pair of integer values.
*/
public PojoBean(int intValue1, int intValue2) {
setIntValue1(intValue1);
setIntValue2(intValue2);
setIntegerValue1(new Integer(intValue1));
setIntegerValue2(new Integer(intValue2));
}
/**
* Set the stringValue1.
*/
public void setStringValue1(String stringValue1) {
this.stringValue1 = stringValue1;
}
/**
* Return stringValue1.
*/
public String getStringValue1() {
return stringValue1;
}
/**
* Set the stringValue2.
*/
public void setStringValue2(String stringValue2) {
this.stringValue2 = stringValue2;
}
/**
* Return stringValue2.
*/
public String getStringValue2() {
return stringValue2;
}
/**
* Set the intValue1.
*/
public void setIntValue1(int intValue1) {
this.intValue1= intValue1;
}
/**
* Return intValue1.
*/
public int getIntValue1() {
return intValue1;
}
/**
* Set the intValue2.
*/
public void setIntValue2(int intValue2) {
this.intValue2= intValue2;
}
/**
* Return intValue2.
*/
public int getIntValue2() {
return intValue2;
}
/**
* Set the integerValue1.
*/
public void setIntegerValue1(Integer integerValue1) {
this.integerValue1= integerValue1;
}
/**
* Return integerValue1.
*/
public Integer getIntegerValue1() {
return integerValue1;
}
/**
* Set the integerValue2.
*/
public void setIntegerValue2(Integer integerValue2) {
this.integerValue2= integerValue2;
}
/**
* Return integerValue2.
*/
public Integer getIntegerValue2() {
return integerValue2;
}
/**
* Set the PojoBean[].
*/
public void setBeans(PojoBean[] beans) {
this.beans = beans;
}
/**
* Return PojoBean[].
*/
public PojoBean[] getBeans() {
return beans;
}
/**
* Return and indexed Bean
*/
public PojoBean getBean(int index) {
return beans[index];
}
/**
* Return the Map
*/
public Object getMap() {
return map;
}
/**
* Return the Map
*/
public void setMap(Map map) {
this.map = map;
}
/**
* Set a Mapped property
*/
public void setMapped(String key, Object value) {
map.put(key, value);
}
/**
* Set a Mapped property
*/
public Object getMapped(String key) {
return map.get(key);
}
}
1.1
jakarta-struts/src/test/org/apache/struts/validator/TestValidWhen.java
Index: TestValidWhen.java
===================================================================
/*
* $Header:
/home/cvs/jakarta-struts/src/test/org/apache/struts/validator/TestValidWhen.java,v 1.1
2004/09/03 18:12:26 niallp Exp $
* $Revision: 1.1 $
* $Date: 2004/09/03 18:12:26 $
*
* Copyright 2004 The Apache Software Foundation.
*
* 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.
*/
package org.apache.struts.validator;
import java.io.StringReader;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.apache.struts.validator.validwhen.ValidWhenLexer;
import org.apache.struts.validator.validwhen.ValidWhenParser;
import org.apache.commons.validator.util.ValidatorUtils;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.logging.Log;
/**
* Unit tests for the ValidWhen Parser/Lexer.
*/
public class TestValidWhen extends TestCase {
/** All logging goes through this logger */
private static Log log = LogFactory.getLog(TestValidWhen.class);
protected PojoBean testBean;
/**
* Defines the testcase name for JUnit.
*
* @param theName the testcase's name.
*/
public TestValidWhen(String theName) {
super(theName);
}
/**
* Start the tests.
*
* @param theArgs the arguments. Not used
*/
public static void main(String[] theArgs) {
junit.awtui.TestRunner.main(
new String[] {TestValidWhen.class.getName()});
}
/**
* @return a test suite (<code>TestSuite</code>) that includes all methods
* starting with "test"
*/
public static Test suite() {
// All methods starting with "test" will be executed in the test suite.
return new TestSuite(TestValidWhen.class);
}
public void setUp() {
testBean = new PojoBean(123, 789);
testBean.setStringValue1("ABC");
testBean.setStringValue2(null);
testBean.setBeans(new PojoBean[] {new PojoBean(11, 12),
new PojoBean(21, 22),
new PojoBean(31, 42),
new PojoBean(41, 52),
new PojoBean(51, 62)});
testBean.setMapped("testKey", "mappedValue");
}
public void tearDown() {
testBean = null;
}
/**
* Test Operators.
*/
public void testProperty() {
// *this*
doParse("(*this* == 123)", testBean , 0, "intValue1", true);
// Named property
doParse("(intValue2 == 789)", testBean , 0, "intValue1", true);
// Indexed Property
doParse("(beans[].intValue1 == 21)", testBean , 1, "intValue1", true);
doParse("(beans[1].intValue1 == 21)", testBean , 4, "intValue1", true);
// Mapped Property - *** NOT SUPPORTED ***
// doParse("(mapped(mappedValue) == 'testKey')", testBean , 0,
"mappedValue", true);
}
/**
* Test Operators.
*/
public void testOperators() {
// Equal
doParse("(*this* == 123)", testBean , 0, "intValue1", true);
// Not Equal
doParse("(*this* != 456)", testBean , 0, "intValue1", true);
// Less Than
doParse("(*this* < 456)", testBean , 0, "intValue1", true);
// Greater Than
doParse("(*this* > 100)", testBean , 0, "intValue1", true);
// Less Than Equal
doParse("(*this* <= 123)", testBean , 0, "intValue1", true);
// Greater Than Equal
doParse("(*this* >= 123)", testBean , 0, "intValue1", true);
}
/**
* Test String values.
*/
public void testString() {
doParse("(*this* != '--')", "XX", 0, "stringValue1", true);
doParse("(*this* == '--')", "--", 0, "stringValue1", true);
String testValue = "dsgUOLMdLsdL";
// single quote
doParse("(*this* == '" + testValue + "')", testValue, 0, "stringValue1",
true);
// double quote
doParse("(*this* == \"" + testValue + "\")", testValue, 0, "stringValue1",
true);
}
/**
* Test Numeric values.
*/
public void testNumeric() {
// Test Zero
PojoBean numberBean = new PojoBean(0, -50);
doParse("(intValue1 == 0)", numberBean, 0, "intValue1", true);
doParse("(intValue2 != 0)", numberBean, 0, "intValue2", true);
doParse("(integerValue1 == 0)", numberBean, 0, "integerValue1", true);
doParse("(integerValue2 != 0)", numberBean, 0, "integerValue2", true);
// int
doParse("(intValue1 == 123)", testBean , 0, "intValue1", true);
// Integer
doParse("(integerValue1 == 123)", testBean , 0, "integerValue1", true);
// Negative Numbers
doParse("((intValue2 < -10) and (intValue2 > -60))", numberBean, 0,
"intValue2", true);
doParse("((integerValue2 < -10) and (integerValue2 > -60))", numberBean, 0,
"integerValue2", true);
// Hex
doParse("(integerValue1 == 0x7B)", testBean , 0, "integerValue1", true);
// Octal
doParse("(integerValue1 == 0173)", testBean , 0, "integerValue1", true);
}
/**
* Test Null.
*/
public void testNull() {
// Not Null
doParse("(*this* != null)", testBean , 0, "stringValue1", true);
// Null
doParse("(*this* == null)", testBean , 0, "stringValue2", true);
}
/**
* Test Joined expressions ('and' or 'or')
*/
public void testJoined() {
// Join with 'or'
doParse("((*this* == 'ABC') or (stringValue2 == null))", testBean , 0,
"stringValue1", true);
doParse("((*this* != 'ABC') or (stringValue2 == null))", testBean , 0,
"stringValue1", true);
doParse("((*this* == 'ABC') or (stringValue2 != null))", testBean , 0,
"stringValue1", true);
doParse("((*this* != 'ABC') or (stringValue2 != null))", testBean , 0,
"stringValue1", false);
// Join with 'and'
doParse("((*this* == 'ABC') and (stringValue2 == null))", testBean , 0,
"stringValue1", true);
doParse("((*this* != 'ABC') and (stringValue2 == null))", testBean , 0,
"stringValue1", false);
doParse("((*this* == 'ABC') and (stringValue2 != null))", testBean , 0,
"stringValue1", false);
doParse("((*this* != 'ABC') and (stringValue2 != null))", testBean , 0,
"stringValue1", false);
}
/**
* Parse the expression and check that the expected result
* (either true or false) occurs - fail if an exception is thrown
* opr the wrong result occurs.
*
* @param test Test expression
* @param bean Test Bean
* @param index index value
* @param property Bean property
* @param expected Expected Result
*/
private void doParse(String test, Object bean, int index, String property,
boolean expected) {
boolean result = false;
try {
result = doParse(test, bean, index, property);
} catch (Exception ex) {
log.error("Parsing " + test + " for property '"+property+"'", ex);
fail("Parsing " + test + " threw " + ex);
}
if (expected) {
assertTrue(test + " didn't return TRUE for " + property, result);
} else {
assertFalse(test + " didn't return FALSE for " + property, result);
}
}
/**
* Parse the expression and check that an Exception is throw.
* Failes if no expection is thrown.
*
* @param test Test expression
* @param bean Test Bean
* @param index index value
* @param property Bean property
*/
private void doParseFail(String test, Object bean, int index, String property) {
try {
boolean result = doParse(test, bean, index, property);
fail("Parsing " + test + " didn't throw exception as expected " +
result);
} catch (Exception expected) {
// ignore exception - expected result
}
}
/**
* Parse the expression returning the result
*
* @param test Test expression
* @param bean Test Bean
* @param index index value
* @param property Bean property
*/
private boolean doParse(String test, Object bean, int index, String property)
throws Exception {
if (bean == null) {
throw new NullPointerException("Bean is null for property
'"+property+"'");
}
String value = String.class.isInstance(bean)
? (String)bean
: ValidatorUtils.getValueAsString(bean, property);
ValidWhenLexer lexer = new ValidWhenLexer(new StringReader(test));
ValidWhenParser parser = new ValidWhenParser(lexer);
parser.setForm(bean);
parser.setIndex(index);
parser.setValue(value);
parser.expression();
return parser.getResult();
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]