OgnlExpressionParser now supports OGNL collection construction syntax (SWF-274).
This commit is contained in:
@@ -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");
|
||||
}
|
||||
}
|
||||
@@ -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) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user