|
|
|
@ -16,9 +16,13 @@ |
|
|
|
|
|
|
|
|
|
|
|
package org.springframework.expression.spel; |
|
|
|
package org.springframework.expression.spel; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import org.springframework.expression.AccessException; |
|
|
|
|
|
|
|
import org.springframework.expression.EvaluationContext; |
|
|
|
import org.springframework.expression.Expression; |
|
|
|
import org.springframework.expression.Expression; |
|
|
|
import org.springframework.expression.ParserContext; |
|
|
|
import org.springframework.expression.ParserContext; |
|
|
|
|
|
|
|
import org.springframework.expression.PropertyAccessor; |
|
|
|
import org.springframework.expression.spel.antlr.SpelAntlrExpressionParser; |
|
|
|
import org.springframework.expression.spel.antlr.SpelAntlrExpressionParser; |
|
|
|
|
|
|
|
import org.springframework.expression.spel.support.ReflectivePropertyResolver; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* Tests based on Jiras up to the release of Spring 3.0.0 |
|
|
|
* Tests based on Jiras up to the release of Spring 3.0.0 |
|
|
|
@ -27,24 +31,11 @@ import org.springframework.expression.spel.antlr.SpelAntlrExpressionParser; |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
public class SpringEL300Tests extends ExpressionTestCase { |
|
|
|
public class SpringEL300Tests extends ExpressionTestCase { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void testNPE_SPR5661() { |
|
|
|
public static final ParserContext DOLLARSQUARE_TEMPLATE_PARSER_CONTEXT = new ParserContext() { |
|
|
|
|
|
|
|
public String getExpressionPrefix() { |
|
|
|
|
|
|
|
return "$["; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
public String getExpressionSuffix() { |
|
|
|
|
|
|
|
return "]"; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
public boolean isTemplate() { |
|
|
|
|
|
|
|
return true; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void testNPE_5661() { |
|
|
|
|
|
|
|
evaluate("joinThreeStrings('a',null,'c')", "anullc", String.class); |
|
|
|
evaluate("joinThreeStrings('a',null,'c')", "anullc", String.class); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public void testNPE_5673() throws Exception { |
|
|
|
public void testNPE_SPR5673() throws Exception { |
|
|
|
ParserContext hashes = TemplateExpressionParsingTests.HASH_DELIMITED_PARSER_CONTEXT; |
|
|
|
ParserContext hashes = TemplateExpressionParsingTests.HASH_DELIMITED_PARSER_CONTEXT; |
|
|
|
ParserContext dollars = TemplateExpressionParsingTests.DEFAULT_TEMPLATE_PARSER_CONTEXT; |
|
|
|
ParserContext dollars = TemplateExpressionParsingTests.DEFAULT_TEMPLATE_PARSER_CONTEXT; |
|
|
|
|
|
|
|
|
|
|
|
@ -77,6 +68,28 @@ public class SpringEL300Tests extends ExpressionTestCase { |
|
|
|
checkTemplateParsing("Hello ${'inner literal that''s got {[(])]}an escaped quote in it'} World","Hello inner literal that's got {[(])]}an escaped quote in it World"); |
|
|
|
checkTemplateParsing("Hello ${'inner literal that''s got {[(])]}an escaped quote in it'} World","Hello inner literal that's got {[(])]}an escaped quote in it World"); |
|
|
|
checkTemplateParsingError("Hello ${","No ending suffix '}' for expression starting at character 6: ${"); |
|
|
|
checkTemplateParsingError("Hello ${","No ending suffix '}' for expression starting at character 6: ${"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void testAccessingNullPropertyViaReflection_SPR5663() throws AccessException { |
|
|
|
|
|
|
|
PropertyAccessor propertyAccessor = new ReflectivePropertyResolver(); |
|
|
|
|
|
|
|
EvaluationContext context = TestScenarioCreator.getTestEvaluationContext(); |
|
|
|
|
|
|
|
assertFalse(propertyAccessor.canRead(context, null, "abc")); |
|
|
|
|
|
|
|
assertFalse(propertyAccessor.canWrite(context, null, "abc")); |
|
|
|
|
|
|
|
try { |
|
|
|
|
|
|
|
propertyAccessor.read(context, null, "abc"); |
|
|
|
|
|
|
|
fail("Should have failed with an AccessException"); |
|
|
|
|
|
|
|
} catch (AccessException ae) { |
|
|
|
|
|
|
|
// success
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
try { |
|
|
|
|
|
|
|
propertyAccessor.write(context, null, "abc","foo"); |
|
|
|
|
|
|
|
fail("Should have failed with an AccessException"); |
|
|
|
|
|
|
|
} catch (AccessException ae) { |
|
|
|
|
|
|
|
// success
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// ---
|
|
|
|
|
|
|
|
|
|
|
|
private void checkTemplateParsing(String expression, String expectedValue) throws Exception { |
|
|
|
private void checkTemplateParsing(String expression, String expectedValue) throws Exception { |
|
|
|
checkTemplateParsing(expression,TemplateExpressionParsingTests.DEFAULT_TEMPLATE_PARSER_CONTEXT, expectedValue); |
|
|
|
checkTemplateParsing(expression,TemplateExpressionParsingTests.DEFAULT_TEMPLATE_PARSER_CONTEXT, expectedValue); |
|
|
|
@ -95,7 +108,7 @@ public class SpringEL300Tests extends ExpressionTestCase { |
|
|
|
private void checkTemplateParsingError(String expression,ParserContext context, String expectedMessage) throws Exception { |
|
|
|
private void checkTemplateParsingError(String expression,ParserContext context, String expectedMessage) throws Exception { |
|
|
|
SpelAntlrExpressionParser parser = new SpelAntlrExpressionParser(); |
|
|
|
SpelAntlrExpressionParser parser = new SpelAntlrExpressionParser(); |
|
|
|
try { |
|
|
|
try { |
|
|
|
Expression expr = parser.parseExpression(expression,context); |
|
|
|
parser.parseExpression(expression,context); |
|
|
|
fail("Should have failed"); |
|
|
|
fail("Should have failed"); |
|
|
|
} catch (Exception e) { |
|
|
|
} catch (Exception e) { |
|
|
|
if (!e.getMessage().equals(expectedMessage)) { |
|
|
|
if (!e.getMessage().equals(expectedMessage)) { |
|
|
|
@ -104,5 +117,18 @@ public class SpringEL300Tests extends ExpressionTestCase { |
|
|
|
assertEquals(expectedMessage,e.getMessage()); |
|
|
|
assertEquals(expectedMessage,e.getMessage()); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static final ParserContext DOLLARSQUARE_TEMPLATE_PARSER_CONTEXT = new ParserContext() { |
|
|
|
|
|
|
|
public String getExpressionPrefix() { |
|
|
|
|
|
|
|
return "$["; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
public String getExpressionSuffix() { |
|
|
|
|
|
|
|
return "]"; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
public boolean isTemplate() { |
|
|
|
|
|
|
|
return true; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|