Browse Source

Test status quo for void function references in SpEL

pull/31346/head
Sam Brannen 2 years ago
parent
commit
5ff9e6955c
  1. 57
      spring-expression/src/test/java/org/springframework/expression/spel/SpelCompilationCoverageTests.java

57
spring-expression/src/test/java/org/springframework/expression/spel/SpelCompilationCoverageTests.java

@ -29,6 +29,8 @@ import java.util.Set;
import java.util.StringTokenizer; import java.util.StringTokenizer;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import org.springframework.asm.MethodVisitor; import org.springframework.asm.MethodVisitor;
import org.springframework.expression.AccessException; import org.springframework.expression.AccessException;
@ -55,6 +57,7 @@ import static org.assertj.core.api.InstanceOfAssertFactories.BOOLEAN;
* Checks SpelCompiler behavior. This should cover compilation all compiled node types. * Checks SpelCompiler behavior. This should cover compilation all compiled node types.
* *
* @author Andy Clement * @author Andy Clement
* @author Sam Brannen
* @since 4.1 * @since 4.1
*/ */
public class SpelCompilationCoverageTests extends AbstractExpressionTests { public class SpelCompilationCoverageTests extends AbstractExpressionTests {
@ -997,6 +1000,60 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
assertThat(expression.getValue(ctx).toString()).isEqualTo("4.0"); assertThat(expression.getValue(ctx).toString()).isEqualTo("4.0");
} }
@ParameterizedTest
@ValueSource(strings = {"voidMethod", "voidWrapperMethod"})
public void voidFunctionReference(String method) throws Exception {
assertVoidFunctionReferenceBehavior(method);
}
private void assertVoidFunctionReferenceBehavior(String methodName) throws Exception {
Method method = getClass().getDeclaredMethod(methodName, String.class);
EvaluationContext ctx = new StandardEvaluationContext();
ctx.setVariable("voidMethod", method);
expression = parser.parseExpression("#voidMethod('a')");
voidMethodInvokedWith = null;
expression.getValue(ctx);
assertThat(voidMethodInvokedWith).isEqualTo("a");
assertCanCompile(expression);
voidMethodInvokedWith = null;
expression.getValue(ctx);
assertThat(voidMethodInvokedWith).isEqualTo("a");
assertCanCompile(expression);
voidMethodInvokedWith = null;
expression.getValue(ctx);
assertThat(voidMethodInvokedWith).isEqualTo("a");
assertCanCompile(expression);
expression = parser.parseExpression("#voidMethod(#a)");
ctx.setVariable("a", "foo");
voidMethodInvokedWith = null;
expression.getValue(ctx);
assertThat(voidMethodInvokedWith).isEqualTo("foo");
assertCanCompile(expression);
voidMethodInvokedWith = null;
expression.getValue(ctx);
assertThat(voidMethodInvokedWith).isEqualTo("foo");
assertCanCompile(expression);
}
private static String voidMethodInvokedWith;
public static Void voidWrapperMethod(String str) {
voidMethodInvokedWith = str;
return null;
}
public static void voidMethod(String str) {
voidMethodInvokedWith = str;
}
@Test @Test
public void functionReferenceVisibility_SPR12359() throws Exception { public void functionReferenceVisibility_SPR12359() throws Exception {
// Confirms visibility of what is being called. // Confirms visibility of what is being called.

Loading…
Cancel
Save