提交 14eba503 编写于 作者: J Juergen Hoeller

Consistent ExpressionException-style quoting of expression string and position

Issue: SPR-14942
上级 b10045dc
/*
* Copyright 2002-2012 the original author or authors.
* Copyright 2002-2016 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
......@@ -26,7 +26,24 @@ package org.springframework.expression;
public class EvaluationException extends ExpressionException {
/**
* Creates a new expression evaluation exception.
* Create a new expression evaluation exception.
* @param message description of the problem that occurred
*/
public EvaluationException(String message) {
super(message);
}
/**
* Create a new expression evaluation exception.
* @param message description of the problem that occurred
* @param cause the underlying cause of this exception
*/
public EvaluationException(String message, Throwable cause) {
super(message,cause);
}
/**
* Create a new expression evaluation exception.
* @param position the position in the expression where the problem occurred
* @param message description of the problem that occurred
*/
......@@ -35,7 +52,7 @@ public class EvaluationException extends ExpressionException {
}
/**
* Creates a new expression evaluation exception.
* Create a new expression evaluation exception.
* @param expressionString the expression that could not be evaluated
* @param message description of the problem that occurred
*/
......@@ -44,7 +61,7 @@ public class EvaluationException extends ExpressionException {
}
/**
* Creates a new expression evaluation exception.
* Create a new expression evaluation exception.
* @param position the position in the expression where the problem occurred
* @param message description of the problem that occurred
* @param cause the underlying cause of this exception
......@@ -53,16 +70,4 @@ public class EvaluationException extends ExpressionException {
super(position, message, cause);
}
/**
* Creates a new expression evaluation exception.
* @param message description of the problem that occurred
*/
public EvaluationException(String message) {
super(message);
}
public EvaluationException(String message, Throwable cause) {
super(message,cause);
}
}
/*
* Copyright 2002-2015 the original author or authors.
* Copyright 2002-2016 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
......@@ -20,6 +20,7 @@ package org.springframework.expression;
* Super class for exceptions that can occur whilst processing expressions.
*
* @author Andy Clement
* @author Phil Webb
* @since 3.0
*/
@SuppressWarnings("serial")
......@@ -27,68 +28,68 @@ public class ExpressionException extends RuntimeException {
protected String expressionString;
protected int position; // -1 if not known - but should be known in all reasonable cases
protected int position; // -1 if not known; should be known in all reasonable cases
/**
* Construct a new expression exception.
* @param expressionString the expression string
* @param message a descriptive message
*/
public ExpressionException(String expressionString, String message) {
public ExpressionException(String message) {
super(message);
this.position = -1;
this.expressionString = expressionString;
}
/**
* Construct a new expression exception.
* @param expressionString the expression string
* @param position the position in the expression string where the problem occurred
* @param message a descriptive message
* @param cause the underlying cause of this exception
*/
public ExpressionException(String expressionString, int position, String message) {
super(message);
this.position = position;
this.expressionString = expressionString;
public ExpressionException(String message, Throwable cause) {
super(message, cause);
}
/**
* Construct a new expression exception.
* @param position the position in the expression string where the problem occurred
* @param expressionString the expression string
* @param message a descriptive message
*/
public ExpressionException(int position, String message) {
public ExpressionException(String expressionString, String message) {
super(message);
this.position = position;
this.expressionString = expressionString;
this.position = -1;
}
/**
* Construct a new expression exception.
* @param expressionString the expression string
* @param position the position in the expression string where the problem occurred
* @param message a descriptive message
* @param cause the underlying cause of this exception
*/
public ExpressionException(int position, String message, Throwable cause) {
super(message,cause);
public ExpressionException(String expressionString, int position, String message) {
super(message);
this.expressionString = expressionString;
this.position = position;
}
/**
* Construct a new expression exception.
* @param position the position in the expression string where the problem occurred
* @param message a descriptive message
*/
public ExpressionException(String message) {
public ExpressionException(int position, String message) {
super(message);
this.position = position;
}
/**
* Construct a new expression exception.
* @param position the position in the expression string where the problem occurred
* @param message a descriptive message
* @param cause the underlying cause of this exception
*/
public ExpressionException(String message, Throwable cause) {
public ExpressionException(int position, String message, Throwable cause) {
super(message,cause);
this.position = position;
}
......@@ -107,8 +108,9 @@ public class ExpressionException extends RuntimeException {
}
/**
* Return the exception message. Since Spring 4.0 this method returns the
* same result as {@link #toDetailedString()}.
* Return the exception message.
* As of Spring 4.0, this method returns the same result as {@link #toDetailedString()}.
* @see #getSimpleMessage()
* @see java.lang.Throwable#getMessage()
*/
@Override
......@@ -123,11 +125,11 @@ public class ExpressionException extends RuntimeException {
public String toDetailedString() {
if (this.expressionString != null) {
StringBuilder output = new StringBuilder();
output.append("Expression '");
output.append("Expression [");
output.append(this.expressionString);
output.append("'");
if (this.position != -1) {
output.append(" @ ");
output.append("]");
if (this.position >= 0) {
output.append(" @");
output.append(this.position);
}
output.append(": ");
......@@ -142,6 +144,7 @@ public class ExpressionException extends RuntimeException {
/**
* Return the exception simple message without including the expression
* that caused the failure.
* @since 4.0
*/
public String getSimpleMessage() {
return super.getMessage();
......
/*
* Copyright 2002-2012 the original author or authors.
* Copyright 2002-2016 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
......@@ -26,7 +26,7 @@ package org.springframework.expression;
public class ParseException extends ExpressionException {
/**
* Creates a new expression parsing exception.
* Create a new expression parsing exception.
* @param expressionString the expression string that could not be parsed
* @param position the position in the expression string where the problem occurred
* @param message description of the problem that occurred
......@@ -36,7 +36,7 @@ public class ParseException extends ExpressionException {
}
/**
* Creates a new expression parsing exception.
* Create a new expression parsing exception.
* @param position the position in the expression string where the problem occurred
* @param message description of the problem that occurred
* @param cause the underlying cause of this exception
......@@ -46,7 +46,7 @@ public class ParseException extends ExpressionException {
}
/**
* Creates a new expression parsing exception.
* Create a new expression parsing exception.
* @param position the position in the expression string where the problem occurred
* @param message description of the problem that occurred
*/
......
/*
* Copyright 2002-2013 the original author or authors.
* Copyright 2002-2016 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
......@@ -13,6 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.expression.spel;
import org.springframework.expression.EvaluationException;
......@@ -23,6 +24,7 @@ import org.springframework.expression.EvaluationException;
* message. See {@link SpelMessage} for the list of all possible messages that can occur.
*
* @author Andy Clement
* @author Juergen Hoeller
* @since 3.0
*/
@SuppressWarnings("serial")
......@@ -34,62 +36,46 @@ public class SpelEvaluationException extends EvaluationException {
public SpelEvaluationException(SpelMessage message, Object... inserts) {
super(message.formatMessage(0, inserts)); // TODO poor position information, can the callers not really supply something?
super(message.formatMessage(inserts));
this.message = message;
this.inserts = inserts;
}
public SpelEvaluationException(int position, SpelMessage message, Object... inserts) {
super(position, message.formatMessage(position, inserts));
super(position, message.formatMessage(inserts));
this.message = message;
this.inserts = inserts;
}
public SpelEvaluationException(int position, Throwable cause,
SpelMessage message, Object... inserts) {
super(position,message.formatMessage(position,inserts),cause);
public SpelEvaluationException(int position, Throwable cause, SpelMessage message, Object... inserts) {
super(position, message.formatMessage(inserts),cause);
this.message = message;
this.inserts = inserts;
}
public SpelEvaluationException(Throwable cause, SpelMessage message, Object... inserts) {
super(message.formatMessage(0,inserts),cause);
super(message.formatMessage(inserts), cause);
this.message = message;
this.inserts = inserts;
}
/**
* @return a formatted message with inserts applied
* Set the position in the related expression which gave rise to this exception.
*/
@Override
public String getMessage() {
if (this.message != null) {
return this.message.formatMessage(this.position, this.inserts);
}
else {
return super.getMessage();
}
public void setPosition(int position) {
this.position = position;
}
/**
* @return the message code
* Return the message code.
*/
public SpelMessage getMessageCode() {
return this.message;
}
/**
* Set the position in the related expression which gave rise to this exception.
*
* @param position the position in the expression that gave rise to the exception
*/
public void setPosition(int position) {
this.position = position;
}
/**
* @return the message inserts
* Return the message inserts.
*/
public Object[] getInserts() {
return this.inserts;
......
......@@ -24,16 +24,13 @@ import java.text.MessageFormat;
* expect particular code numbers rather than particular text, enabling the message text
* to more easily be modified and the tests to run successfully in different locales.
*
* <p>When a message is formatted, it will have this kind of form
* <p>When a message is formatted, it will have this kind of form, capturing the prefix
* and the error kind:
*
* <pre class="code">
* EL1004E: (pos 34): Type cannot be found 'String'
* </pre>
*
* The prefix captures the code and the error kind, whilst the position is included
* if it is known.
* <pre class="code">EL1004E: Type cannot be found 'String'</pre>
*
* @author Andy Clement
* @author Juergen Hoeller
* @since 3.0
*/
public enum SpelMessage {
......@@ -175,7 +172,7 @@ public enum SpelMessage {
"Cannot find terminating \" for string"),
NON_TERMINATING_QUOTED_STRING(Kind.ERROR, 1046,
"Cannot find terminating ' for string"),
"Cannot find terminating '' for string"),
MISSING_LEADING_ZERO_FOR_NUMBER(Kind.ERROR, 1047,
"A real number must be prefixed by zero, it cannot start with just ''.''"),
......@@ -190,7 +187,7 @@ public enum SpelMessage {
"The arguments '(...)' for the constructor call are missing"),
RUN_OUT_OF_ARGUMENTS(Kind.ERROR, 1051,
"Unexpected ran out of arguments"),
"Unexpectedly ran out of arguments"),
UNABLE_TO_GROW_COLLECTION(Kind.ERROR, 1052,
"Unable to grow collection"),
......@@ -262,20 +259,42 @@ public enum SpelMessage {
private final String message;
private SpelMessage(Kind kind, int code, String message) {
SpelMessage(Kind kind, int code, String message) {
this.kind = kind;
this.code = code;
this.message = message;
}
/**
* Produce a complete message including the prefix and with the inserts
* applied to the message.
* @param inserts the inserts to put into the formatted message
* @return a formatted message
* @since 4.3.5
*/
public String formatMessage(Object... inserts) {
StringBuilder formattedMessage = new StringBuilder();
formattedMessage.append("EL").append(this.code);
switch (this.kind) {
case ERROR:
formattedMessage.append("E");
break;
}
formattedMessage.append(": ");
formattedMessage.append(MessageFormat.format(this.message, inserts));
return formattedMessage.toString();
}
/**
* Produce a complete message including the prefix, the position (if known)
* and with the inserts applied to the message.
* @param pos the position (ignored and not included in the message if less than 0)
* @param inserts the inserts to put into the formatted message
* @return a formatted message
* @deprecated as of Spring 4.3.5, in favor of {@link #formatMessage(Object...)}
*/
@Deprecated
public String formatMessage(int pos, Object... inserts) {
StringBuilder formattedMessage = new StringBuilder();
formattedMessage.append("EL").append(this.code);
......@@ -285,7 +304,7 @@ public enum SpelMessage {
break;
}
formattedMessage.append(":");
if (pos != -1) {
if (pos >= 0) {
formattedMessage.append("(pos ").append(pos).append("): ");
}
formattedMessage.append(MessageFormat.format(this.message, inserts));
......@@ -293,6 +312,6 @@ public enum SpelMessage {
}
public static enum Kind { INFO, WARNING, ERROR }
public enum Kind { INFO, WARNING, ERROR }
}
/*
* Copyright 2002-2013 the original author or authors.
* Copyright 2002-2016 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
......@@ -13,6 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.expression.spel;
import org.springframework.expression.ParseException;
......@@ -23,6 +24,7 @@ import org.springframework.expression.ParseException;
* message. See {@link SpelMessage} for the list of all possible messages that can occur.
*
* @author Andy Clement
* @author Juergen Hoeller
* @since 3.0
*/
@SuppressWarnings("serial")
......@@ -34,45 +36,33 @@ public class SpelParseException extends ParseException {
public SpelParseException(String expressionString, int position, SpelMessage message, Object... inserts) {
super(expressionString, position, message.formatMessage(position,inserts));
this.position = position;
super(expressionString, position, message.formatMessage(inserts));
this.message = message;
this.inserts = inserts;
}
public SpelParseException(int position, SpelMessage message, Object... inserts) {
super(position, message.formatMessage(position,inserts));
this.position = position;
super(position, message.formatMessage(inserts));
this.message = message;
this.inserts = inserts;
}
public SpelParseException(int position, Throwable cause, SpelMessage message, Object... inserts) {
super(position, message.formatMessage(position,inserts), cause);
this.position = position;
super(position, message.formatMessage(inserts), cause);
this.message = message;
this.inserts = inserts;
}
/**
* @return a formatted message with inserts applied
*/
@Override
public String getMessage() {
return (this.message != null ? this.message.formatMessage(this.position, this.inserts)
: super.getMessage());
}
/**
* @return the message code
* Return the message code.
*/
public SpelMessage getMessageCode() {
return this.message;
}
/**
* @return the message inserts
* Return the message inserts.
*/
public Object[] getInserts() {
return this.inserts;
......
......@@ -1663,15 +1663,15 @@ public class SpelReproTests extends AbstractExpressionTests {
@Test
public void SPR10146_malformedExpressions() throws Exception {
doTestSpr10146("/foo", "EL1070E:(pos 0): Problem parsing left operand");
doTestSpr10146("*foo", "EL1070E:(pos 0): Problem parsing left operand");
doTestSpr10146("%foo", "EL1070E:(pos 0): Problem parsing left operand");
doTestSpr10146("<foo", "EL1070E:(pos 0): Problem parsing left operand");
doTestSpr10146(">foo", "EL1070E:(pos 0): Problem parsing left operand");
doTestSpr10146("&&foo", "EL1070E:(pos 0): Problem parsing left operand");
doTestSpr10146("||foo", "EL1070E:(pos 0): Problem parsing left operand");
doTestSpr10146("&foo", "EL1069E:(pos 0): missing expected character '&'");
doTestSpr10146("|foo", "EL1069E:(pos 0): missing expected character '|'");
doTestSpr10146("/foo", "EL1070E: Problem parsing left operand");
doTestSpr10146("*foo", "EL1070E: Problem parsing left operand");
doTestSpr10146("%foo", "EL1070E: Problem parsing left operand");
doTestSpr10146("<foo", "EL1070E: Problem parsing left operand");
doTestSpr10146(">foo", "EL1070E: Problem parsing left operand");
doTestSpr10146("&&foo", "EL1070E: Problem parsing left operand");
doTestSpr10146("||foo", "EL1070E: Problem parsing left operand");
doTestSpr10146("&foo", "EL1069E: missing expected character '&'");
doTestSpr10146("|foo", "EL1069E: missing expected character '|'");
}
private void doTestSpr10146(String expression, String expectedMessage) {
......@@ -1702,7 +1702,7 @@ public class SpelReproTests extends AbstractExpressionTests {
@Test
public void SPR10328() throws Exception {
thrown.expect(SpelParseException.class);
thrown.expectMessage("EL1071E:(pos 2): A required selection expression has not been specified");
thrown.expectMessage("EL1071E: A required selection expression has not been specified");
Expression exp = parser.parseExpression("$[]");
exp.getValue(Arrays.asList("foo", "bar", "baz"));
}
......
......@@ -19,7 +19,6 @@ package org.springframework.expression.spel.standard;
import org.junit.Test;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.EvaluationException;
import org.springframework.expression.ExpressionException;
import org.springframework.expression.ParseException;
import org.springframework.expression.spel.SpelMessage;
......@@ -33,11 +32,12 @@ import static org.junit.Assert.*;
/**
* @author Andy Clement
* @author Juergen Hoeller
*/
public class SpelParserTests {
@Test
public void theMostBasic() throws EvaluationException, ParseException {
public void theMostBasic() {
SpelExpressionParser parser = new SpelExpressionParser();
SpelExpression expr = parser.parseRaw("2");
assertNotNull(expr);
......@@ -48,7 +48,7 @@ public class SpelParserTests {
}
@Test
public void valueType() throws Exception {
public void valueType() {
SpelExpressionParser parser = new SpelExpressionParser();
EvaluationContext ctx = new StandardEvaluationContext();
Class<?> c = parser.parseRaw("2").getValueType();
......@@ -64,7 +64,7 @@ public class SpelParserTests {
}
@Test
public void whitespace() throws EvaluationException, ParseException {
public void whitespace() {
SpelExpressionParser parser = new SpelExpressionParser();
SpelExpression expr = parser.parseRaw("2 + 3");
assertEquals(5, expr.getValue());
......@@ -77,7 +77,7 @@ public class SpelParserTests {
}
@Test
public void arithmeticPlus1() throws EvaluationException, ParseException {
public void arithmeticPlus1() {
SpelExpressionParser parser = new SpelExpressionParser();
SpelExpression expr = parser.parseRaw("2+2");
assertNotNull(expr);
......@@ -86,14 +86,14 @@ public class SpelParserTests {
}
@Test
public void arithmeticPlus2() throws EvaluationException, ParseException {
public void arithmeticPlus2() {
SpelExpressionParser parser = new SpelExpressionParser();
SpelExpression expr = parser.parseRaw("37+41");
assertEquals(78, expr.getValue());
}
@Test
public void arithmeticMultiply1() throws EvaluationException, ParseException {
public void arithmeticMultiply1() {
SpelExpressionParser parser = new SpelExpressionParser();
SpelExpression expr = parser.parseRaw("2*3");
assertNotNull(expr);
......@@ -103,15 +103,14 @@ public class SpelParserTests {
}
@Test
public void arithmeticPrecedence1() throws EvaluationException, ParseException {
public void arithmeticPrecedence1() {
SpelExpressionParser parser = new SpelExpressionParser();
SpelExpression expr = parser.parseRaw("2*3+5");
assertEquals(11, expr.getValue());
}
@Test
public void generalExpressions() throws Exception {
public void generalExpressions() {
try {
SpelExpressionParser parser = new SpelExpressionParser();
parser.parseRaw("new String");
......@@ -122,6 +121,7 @@ public class SpelParserTests {
SpelParseException spe = (SpelParseException) ex;
assertEquals(SpelMessage.MISSING_CONSTRUCTOR_ARGS, spe.getMessageCode());
assertEquals(10, spe.getPosition());
assertTrue(ex.getMessage().contains(ex.getExpressionString()));
}
try {
......@@ -134,6 +134,7 @@ public class SpelParserTests {
SpelParseException spe = (SpelParseException) ex;
assertEquals(SpelMessage.RUN_OUT_OF_ARGUMENTS, spe.getMessageCode());
assertEquals(10, spe.getPosition());
assertTrue(ex.getMessage().contains(ex.getExpressionString()));
}
try {
......@@ -146,6 +147,7 @@ public class SpelParserTests {
SpelParseException spe = (SpelParseException) ex;
assertEquals(SpelMessage.RUN_OUT_OF_ARGUMENTS, spe.getMessageCode());
assertEquals(10, spe.getPosition());
assertTrue(ex.getMessage().contains(ex.getExpressionString()));
}
try {
......@@ -158,6 +160,7 @@ public class SpelParserTests {
SpelParseException spe = (SpelParseException) ex;
assertEquals(SpelMessage.RUN_OUT_OF_ARGUMENTS, spe.getMessageCode());
assertEquals(10, spe.getPosition());
assertTrue(ex.getMessage().contains(ex.getExpressionString()));
}
try {
......@@ -170,6 +173,7 @@ public class SpelParserTests {
SpelParseException spe = (SpelParseException) ex;
assertEquals(SpelMessage.NON_TERMINATING_DOUBLE_QUOTED_STRING, spe.getMessageCode());
assertEquals(0, spe.getPosition());
assertTrue(ex.getMessage().contains(ex.getExpressionString()));
}
try {
......@@ -182,43 +186,44 @@ public class SpelParserTests {
SpelParseException spe = (SpelParseException) ex;
assertEquals(SpelMessage.NON_TERMINATING_QUOTED_STRING, spe.getMessageCode());
assertEquals(0, spe.getPosition());
assertTrue(ex.getMessage().contains(ex.getExpressionString()));
}
}
@Test
public void arithmeticPrecedence2() throws EvaluationException, ParseException {
public void arithmeticPrecedence2() {
SpelExpressionParser parser = new SpelExpressionParser();
SpelExpression expr = parser.parseRaw("2+3*5");
assertEquals(17, expr.getValue());
}
@Test
public void arithmeticPrecedence3() throws EvaluationException, ParseException {
public void arithmeticPrecedence3() {
SpelExpression expr = new SpelExpressionParser().parseRaw("3+10/2");
assertEquals(8, expr.getValue());
}
@Test
public void arithmeticPrecedence4() throws EvaluationException, ParseException {
public void arithmeticPrecedence4() {
SpelExpression expr = new SpelExpressionParser().parseRaw("10/2+3");
assertEquals(8, expr.getValue());
}
@Test
public void arithmeticPrecedence5() throws EvaluationException, ParseException {
public void arithmeticPrecedence5() {
SpelExpression expr = new SpelExpressionParser().parseRaw("(4+10)/2");
assertEquals(7, expr.getValue());
}
@Test
public void arithmeticPrecedence6() throws EvaluationException, ParseException {
public void arithmeticPrecedence6() {
SpelExpression expr = new SpelExpressionParser().parseRaw("(3+2)*2");
assertEquals(10, expr.getValue());
}
@Test
public void booleanOperators() throws EvaluationException, ParseException {
public void booleanOperators() {
SpelExpression expr = new SpelExpressionParser().parseRaw("true");
assertEquals(Boolean.TRUE, expr.getValue(Boolean.class));
expr = new SpelExpressionParser().parseRaw("false");
......@@ -236,7 +241,7 @@ public class SpelParserTests {
}
@Test
public void booleanOperators_symbolic_spr9614() throws EvaluationException, ParseException {
public void booleanOperators_symbolic_spr9614() {
SpelExpression expr = new SpelExpressionParser().parseRaw("true");
assertEquals(Boolean.TRUE, expr.getValue(Boolean.class));
expr = new SpelExpressionParser().parseRaw("false");
......@@ -254,7 +259,7 @@ public class SpelParserTests {
}
@Test
public void stringLiterals() throws EvaluationException, ParseException {
public void stringLiterals() {
SpelExpression expr = new SpelExpressionParser().parseRaw("'howdy'");
assertEquals("howdy", expr.getValue());
expr = new SpelExpressionParser().parseRaw("'hello '' world'");
......@@ -262,13 +267,13 @@ public class SpelParserTests {
}
@Test
public void stringLiterals2() throws EvaluationException, ParseException {
public void stringLiterals2() {
SpelExpression expr = new SpelExpressionParser().parseRaw("'howdy'.substring(0,2)");
assertEquals("ho", expr.getValue());
}
@Test
public void testStringLiterals_DoubleQuotes_spr9620() throws Exception {
public void testStringLiterals_DoubleQuotes_spr9620() {
SpelExpression expr = new SpelExpressionParser().parseRaw("\"double quote: \"\".\"");
assertEquals("double quote: \".", expr.getValue());
expr = new SpelExpressionParser().parseRaw("\"hello \"\" world\"");
......@@ -276,7 +281,7 @@ public class SpelParserTests {
}
@Test
public void testStringLiterals_DoubleQuotes_spr9620_2() throws Exception {
public void testStringLiterals_DoubleQuotes_spr9620_2() {
try {
new SpelExpressionParser().parseRaw("\"double quote: \\\"\\\".\"");
fail("Should have failed");
......@@ -288,7 +293,7 @@ public class SpelParserTests {
}
@Test
public void positionalInformation() throws EvaluationException, ParseException {
public void positionalInformation() {
SpelExpression expr = new SpelExpressionParser().parseRaw("true and true or false");
SpelNode rootAst = expr.getAST();
OpOr operatorOr = (OpOr) rootAst;
......@@ -355,13 +360,13 @@ public class SpelParserTests {
exprEx = new ExpressionException("wibble", "test");
assertEquals("test", exprEx.getSimpleMessage());
assertEquals("Expression 'wibble': test", exprEx.toDetailedString());
assertEquals("Expression 'wibble': test", exprEx.getMessage());
assertEquals("Expression [wibble]: test", exprEx.toDetailedString());
assertEquals("Expression [wibble]: test", exprEx.getMessage());
exprEx = new ExpressionException("wibble", 3, "test");
assertEquals("test", exprEx.getSimpleMessage());
assertEquals("Expression 'wibble' @ 3: test", exprEx.toDetailedString());
assertEquals("Expression 'wibble' @ 3: test", exprEx.getMessage());
assertEquals("Expression [wibble] @3: test", exprEx.toDetailedString());
assertEquals("Expression [wibble] @3: test", exprEx.getMessage());
}
@Test
......@@ -401,16 +406,16 @@ public class SpelParserTests {
checkNumber("1e+3", 1e3d, Double.class);
}
private void checkNumber(String expression, Object value, Class<?> type) {
try {
SpelExpressionParser parser = new SpelExpressionParser();
SpelExpression expr = parser.parseRaw(expression);
Object o = expr.getValue();
assertEquals(value, o);
assertEquals(type, o.getClass());
Object exprVal = expr.getValue();
assertEquals(value, exprVal);
assertEquals(type, exprVal.getClass());
}
catch (Exception ex) {
ex.printStackTrace();
fail(ex.getMessage());
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册