OgnlExpressionParser now supports OGNL collection construction syntax (SWF-274).

This commit is contained in:
Erwin Vervaet
2007-03-28 19:13:19 +00:00
parent cfa0b10806
commit c8af02186c
5 changed files with 147 additions and 17 deletions

View File

@@ -76,6 +76,13 @@ public class OgnlExpressionParserTests extends TestCase {
}
public void testSyntaxError1() {
try {
parser.parseExpression("${");
fail();
}
catch (ParserException e) {
}
try {
String exp = "hello ${flag} ${abcd defg";
parser.parseExpression(exp);
@@ -86,6 +93,13 @@ public class OgnlExpressionParserTests extends TestCase {
}
public void testSyntaxError2() {
try {
parser.parseExpression("${}");
fail("Should've failed - not intended use");
}
catch (ParserException e) {
}
try {
String exp = "hello ${flag} ${}";
parser.parseExpression(exp);
@@ -94,7 +108,7 @@ public class OgnlExpressionParserTests extends TestCase {
catch (ParserException e) {
}
}
public void testIsDelimitedExpression() {
assertTrue(parser.isDelimitedExpression("${foo}"));
assertTrue(parser.isDelimitedExpression("${foo ${foo}}"));
@@ -107,4 +121,25 @@ public class OgnlExpressionParserTests extends TestCase {
assertFalse(parser.isDelimitedExpression("$foo}"));
assertFalse(parser.isDelimitedExpression("foo ${}"));
}
public void testCollectionContructionSyntax() {
// lists
parser.parseExpression("name in {null, \"Untitled\"}");
parser.parseExpression("${name in {null, \"Untitled\"}}");
// native arrays
parser.parseExpression("new int[] {1, 2, 3}");
parser.parseExpression("${new int[] {1, 2, 3}}");
// maps
parser.parseExpression("#{ 'foo' : 'foo value', 'bar' : 'bar value' }");
parser.parseExpression("${#{ 'foo' : 'foo value', 'bar' : 'bar value' }}");
parser.parseExpression("#@java.util.LinkedHashMap@{ 'foo' : 'foo value', 'bar' : 'bar value' }");
parser.parseExpression("${#@java.util.LinkedHashMap@{ 'foo' : 'foo value', 'bar' : 'bar value' }}");
// complex examples
parser.parseExpression("b,#{1:2}");
parser.parseExpression("${b,#{1:2}}");
parser.parseExpression("a${b,#{1:2},e}f${g,#{3:4},j}k");
}
}

View File

@@ -17,6 +17,7 @@ package org.springframework.binding.method;
import junit.framework.TestCase;
import org.springframework.binding.convert.ConversionException;
import org.springframework.binding.convert.support.DefaultConversionService;
import org.springframework.binding.convert.support.TextToExpression;
import org.springframework.binding.expression.support.OgnlExpressionParser;
@@ -41,7 +42,7 @@ public class TextToMethodSignatureTests extends TestCase {
assertEquals("foo", signature.getMethodName());
assertEquals(0, signature.getParameters().size());
signature = (MethodSignature)converter.convert("foo");
signature = (MethodSignature)converter.convert("foo()");
assertEquals("foo", signature.getMethodName());
assertEquals(0, signature.getParameters().size());
}
@@ -94,4 +95,45 @@ public class TextToMethodSignatureTests extends TestCase {
assertEquals(String.class, signature.getParameters().getParameter(1).getType());
assertEquals("externalContext.requestParameterMap.test", signature.getParameters().getParameter(1).getName().toString());
}
public void testCollectionConstructionSyntax() {
MethodSignature signature = (MethodSignature)converter.convert("foo({1, 2, 3})");
assertEquals("foo", signature.getMethodName());
assertEquals(1, signature.getParameters().size());
assertNull(signature.getParameters().getParameter(0).getType());
assertEquals("{1, 2, 3}", signature.getParameters().getParameter(0).getName().toString());
}
public void testCollectionConstructionSyntaxWithType() {
MethodSignature signature = (MethodSignature)converter.convert("foo(java.util.List {1, 2, 3})");
assertEquals("foo", signature.getMethodName());
assertEquals(1, signature.getParameters().size());
assertEquals(java.util.List.class, signature.getParameters().getParameter(0).getType());
assertEquals("{1, 2, 3}", signature.getParameters().getParameter(0).getName().toString());
signature = (MethodSignature)converter.convert("foo(a${b,#{1:2},e}f${g,#{3:4},j}k)");
}
public void testSyntaxErrors() {
try {
converter.convert("foo(");
fail();
}
catch (ConversionException e) {
}
try {
converter.convert("foo(long 1, ${bar()}");
fail();
}
catch (ConversionException e) {
}
try {
converter.convert("foo(long 1, {1, 2)");
fail();
}
catch (ConversionException e) {
}
}
}