From 88e32a3cfe5935f18adfe3dcb0d659f1be3245fb Mon Sep 17 00:00:00 2001 From: Andy Clement Date: Wed, 27 May 2009 19:59:32 +0000 Subject: [PATCH] test coverage. now > 95% --- .../expression/spel/SpelExpression.java | 3 +-- .../expression/spel/ast/SpelNodeImpl.java | 6 ++---- .../expression/spel/SetValueTests.java | 5 +++++ .../spel/standard/SpelParserTests.java | 19 +++++++++++++++++++ 4 files changed, 27 insertions(+), 6 deletions(-) diff --git a/org.springframework.expression/src/main/java/org/springframework/expression/spel/SpelExpression.java b/org.springframework.expression/src/main/java/org/springframework/expression/spel/SpelExpression.java index 97f9d195397..a668010d7e9 100644 --- a/org.springframework.expression/src/main/java/org/springframework/expression/spel/SpelExpression.java +++ b/org.springframework.expression/src/main/java/org/springframework/expression/spel/SpelExpression.java @@ -119,8 +119,7 @@ public class SpelExpression implements Expression { * {@inheritDoc} */ public Class getValueType(EvaluationContext context) throws EvaluationException { - // TODO is this a legal implementation? The null return value could be very unhelpful. See other getValueType() - // also. + // TODO both getValueType() methods could use getValueInternal and return a type descriptor from the resultant TypedValue Object value = getValue(context); return (value != null ? value.getClass() : null); } diff --git a/org.springframework.expression/src/main/java/org/springframework/expression/spel/ast/SpelNodeImpl.java b/org.springframework.expression/src/main/java/org/springframework/expression/spel/ast/SpelNodeImpl.java index a798a554bde..d32412af5f7 100644 --- a/org.springframework.expression/src/main/java/org/springframework/expression/spel/ast/SpelNodeImpl.java +++ b/org.springframework.expression/src/main/java/org/springframework/expression/spel/ast/SpelNodeImpl.java @@ -40,10 +40,8 @@ public abstract class SpelNodeImpl implements SpelNode, CommonTypeDescriptors { public SpelNodeImpl(int pos, SpelNodeImpl... operands) { this.pos = pos; - if (pos==0) { - // pos embodies start and end so can never be zero because tokens cannot be zero length - throw new IllegalStateException("Node cannot have zero position: "+this.getClass()); - } + // pos combines start and end so can never be zero because tokens cannot be zero length + assert pos!=0; if (operands!=null && operands.length>0) { this.children = operands; } diff --git a/org.springframework.expression/src/test/java/org/springframework/expression/spel/SetValueTests.java b/org.springframework.expression/src/test/java/org/springframework/expression/spel/SetValueTests.java index 0b5cad4de3a..35331bdb059 100644 --- a/org.springframework.expression/src/test/java/org/springframework/expression/spel/SetValueTests.java +++ b/org.springframework.expression/src/test/java/org/springframework/expression/spel/SetValueTests.java @@ -55,6 +55,11 @@ public class SetValueTests extends ExpressionTestCase { setValue("inventions[0]", "Just the telephone"); } + @Test + public void testErrorCase() { + setValueExpectError("3=4", null); + } + @Test public void testSetElementOfNull() { setValueExpectError("new org.springframework.expression.spel.testresources.Inventor().inventions[1]",SpelMessages.CANNOT_INDEX_INTO_NULL_VALUE); diff --git a/org.springframework.expression/src/test/java/org/springframework/expression/spel/standard/SpelParserTests.java b/org.springframework.expression/src/test/java/org/springframework/expression/spel/standard/SpelParserTests.java index bfb8de13d54..6fd6970c0cd 100644 --- a/org.springframework.expression/src/test/java/org/springframework/expression/spel/standard/SpelParserTests.java +++ b/org.springframework.expression/src/test/java/org/springframework/expression/spel/standard/SpelParserTests.java @@ -17,6 +17,7 @@ import junit.framework.Assert; import org.junit.Test; +import org.springframework.expression.EvaluationContext; import org.springframework.expression.EvaluationException; import org.springframework.expression.ExpressionException; import org.springframework.expression.ParseException; @@ -26,6 +27,7 @@ import org.springframework.expression.spel.SpelNode; import org.springframework.expression.spel.SpelParseException; import org.springframework.expression.spel.ast.OpAnd; import org.springframework.expression.spel.ast.OpOr; +import org.springframework.expression.spel.support.StandardEvaluationContext; public class SpelParserTests { @@ -38,6 +40,23 @@ public class SpelParserTests { Assert.assertNotNull(expr.getAST()); Assert.assertEquals(2,expr.getValue()); Assert.assertEquals(Integer.class,expr.getValueType()); + Assert.assertEquals(2,expr.getAST().getValue(null)); + } + + @Test + public void valueType() throws Exception { + SpelExpressionParser parser = new SpelExpressionParser(); + EvaluationContext ctx = new StandardEvaluationContext(); + Class c = parser.parse("2").getValueType(); + Assert.assertEquals(Integer.class,c); + c = parser.parse("12").getValueType(ctx); + Assert.assertEquals(Integer.class,c); + c = parser.parse("null").getValueType(); + Assert.assertNull(c); + c = parser.parse("null").getValueType(ctx); + Assert.assertNull(c); + Object o = parser.parse("null").getValue(ctx,Integer.class); + Assert.assertNull(o); } @Test