This commit is contained in:
Keith Donald
2008-04-05 00:49:51 +00:00
parent ef056227c1
commit 72124f845c
4 changed files with 40 additions and 22 deletions

View File

@@ -23,6 +23,8 @@ import java.util.Map;
import ognl.Ognl;
import ognl.OgnlException;
import org.springframework.beans.BeanWrapperImpl;
import org.springframework.beans.BeansException;
import org.springframework.binding.expression.EvaluationAttempt;
import org.springframework.binding.expression.EvaluationException;
import org.springframework.binding.expression.Expression;
@@ -105,13 +107,8 @@ class OgnlExpression implements Expression {
public Class getValueType(Object context) {
try {
if (Ognl.isSimpleProperty(expression)) {
// TODO
throw new UnsupportedOperationException("Not yet implemented - in progress");
} else {
return null;
}
} catch (OgnlException e) {
return new BeanWrapperImpl(context).getPropertyDescriptor(expressionString).getPropertyType();
} catch (BeansException e) {
throw new EvaluationException(new EvaluationAttempt(this, context), e);
}
}

View File

@@ -123,7 +123,9 @@ public class OgnlExpressionParserTests extends TestCase {
// maps
parser.parseExpression("#{ 'foo' : 'foo value', 'bar' : 'bar value' }", null);
parser.parseExpression("${#{ 'foo' : 'foo value', 'bar' : 'bar value' }}", new FluentParserContext().template());
parser
.parseExpression("${#{ 'foo' : 'foo value', 'bar' : 'bar value' }}", new FluentParserContext()
.template());
parser.parseExpression("#@java.util.LinkedHashMap@{ 'foo' : 'foo value', 'bar' : 'bar value' }", null);
parser.parseExpression("${#@java.util.LinkedHashMap@{ 'foo' : 'foo value', 'bar' : 'bar value' }}",
new FluentParserContext().template());
@@ -135,22 +137,28 @@ public class OgnlExpressionParserTests extends TestCase {
}
public void testVariables() {
Expression exp = parser.parseExpression("#var", new FluentParserContext().variable(new ExpressionVariable("var",
"flag")));
Expression exp = parser.parseExpression("#var", new FluentParserContext().variable(new ExpressionVariable(
"var", "flag")));
assertEquals(false, ((Boolean) exp.getValue(bean)).booleanValue());
}
public void testVariablesWithCoersion() {
Expression exp = parser.parseExpression("#var", new FluentParserContext().variable(new ExpressionVariable("var",
"number", new FluentParserContext().expectResult(Long.class))));
Expression exp = parser.parseExpression("#var", new FluentParserContext().variable(new ExpressionVariable(
"var", "number", new FluentParserContext().expectResult(Long.class))));
assertEquals(new Long(0), exp.getValue(bean));
}
public void testNestedVariablesWithTemplates() {
Expression exp = parser.parseExpression("#var", new FluentParserContext()
.variable(new ExpressionVariable("var", "${flag}${#var}", new FluentParserContext().template().variable(
Expression exp = parser.parseExpression("#var", new FluentParserContext().variable(new ExpressionVariable(
"var", "${flag}${#var}", new FluentParserContext().template().variable(
new ExpressionVariable("var", "number")))));
assertEquals("false0", exp.getValue(bean));
}
public void testGetValueType() {
String exp = "flag";
Expression e = parser.parseExpression(exp, null);
assertEquals(boolean.class, e.getValueType(bean));
}
}