Polishing
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2023 the original author or authors.
|
||||
* Copyright 2002-2024 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.
|
||||
@@ -22,7 +22,6 @@ import org.junit.jupiter.api.Test;
|
||||
|
||||
import org.springframework.core.convert.TypeDescriptor;
|
||||
import org.springframework.expression.EvaluationContext;
|
||||
import org.springframework.expression.EvaluationException;
|
||||
import org.springframework.expression.Operation;
|
||||
import org.springframework.expression.TypedValue;
|
||||
import org.springframework.expression.spel.support.StandardEvaluationContext;
|
||||
@@ -223,7 +222,7 @@ class ExpressionStateTests extends AbstractExpressionTests {
|
||||
}
|
||||
|
||||
@Test
|
||||
void typeLocator() throws EvaluationException {
|
||||
void typeLocator() {
|
||||
assertThat(state.getEvaluationContext().getTypeLocator()).isNotNull();
|
||||
assertThat(state.findType("java.lang.Integer")).isEqualTo(Integer.class);
|
||||
assertThatExceptionOfType(SpelEvaluationException.class)
|
||||
@@ -232,7 +231,7 @@ class ExpressionStateTests extends AbstractExpressionTests {
|
||||
}
|
||||
|
||||
@Test
|
||||
void typeConversion() throws EvaluationException {
|
||||
void typeConversion() {
|
||||
String s = (String) state.convertValue(34, TypeDescriptor.valueOf(String.class));
|
||||
assertThat(s).isEqualTo("34");
|
||||
|
||||
|
||||
@@ -18,56 +18,50 @@ package org.springframework.expression.spel;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import org.springframework.expression.EvaluationException;
|
||||
import org.springframework.expression.Operation;
|
||||
import org.springframework.expression.OperatorOverloader;
|
||||
import org.springframework.expression.spel.standard.SpelExpression;
|
||||
import org.springframework.expression.spel.support.StandardEvaluationContext;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Test providing operator support
|
||||
* Tests for custom {@link OperatorOverloader} support.
|
||||
*
|
||||
* @author Andy Clement
|
||||
* @author Sam Brannen
|
||||
*/
|
||||
class OperatorOverloaderTests extends AbstractExpressionTests {
|
||||
|
||||
@Test
|
||||
void testSimpleOperations() {
|
||||
// no built-in support for this:
|
||||
evaluateAndCheckError("'abc'-true",SpelMessage.OPERATOR_NOT_SUPPORTED_BETWEEN_TYPES);
|
||||
void simpleOperations() {
|
||||
// default behavior
|
||||
evaluate("'abc' + true", "abctrue", String.class);
|
||||
evaluate("'abc' + null", "abcnull", String.class);
|
||||
|
||||
StandardEvaluationContext eContext = TestScenarioCreator.getTestEvaluationContext();
|
||||
eContext.setOperatorOverloader(new StringAndBooleanAddition());
|
||||
// no built-in support for <string> - <boolean>
|
||||
evaluateAndCheckError("'abc' - true", SpelMessage.OPERATOR_NOT_SUPPORTED_BETWEEN_TYPES);
|
||||
|
||||
SpelExpression expr = (SpelExpression)parser.parseExpression("'abc'+true");
|
||||
assertThat(expr.getValue(eContext)).isEqualTo("abctrue");
|
||||
super.context.setOperatorOverloader(new StringAndBooleanOperatorOverloader());
|
||||
|
||||
expr = (SpelExpression)parser.parseExpression("'abc'-true");
|
||||
assertThat(expr.getValue(eContext)).isEqualTo("abc");
|
||||
// unaffected
|
||||
evaluate("'abc' + true", "abctrue", String.class);
|
||||
evaluate("'abc' + null", "abcnull", String.class);
|
||||
|
||||
expr = (SpelExpression)parser.parseExpression("'abc'+null");
|
||||
assertThat(expr.getValue(eContext)).isEqualTo("abcnull");
|
||||
// <string> - <boolean> has been overloaded
|
||||
evaluate("'abc' - true", "abcTRUE", String.class);
|
||||
}
|
||||
|
||||
|
||||
static class StringAndBooleanAddition implements OperatorOverloader {
|
||||
private static class StringAndBooleanOperatorOverloader implements OperatorOverloader {
|
||||
|
||||
@Override
|
||||
public Object operate(Operation operation, Object leftOperand, Object rightOperand) throws EvaluationException {
|
||||
if (operation==Operation.ADD) {
|
||||
return leftOperand + ((Boolean) rightOperand).toString();
|
||||
}
|
||||
else {
|
||||
return leftOperand;
|
||||
}
|
||||
public boolean overridesOperation(Operation operation, Object leftOperand, Object rightOperand) {
|
||||
return (leftOperand instanceof String && rightOperand instanceof Boolean);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean overridesOperation(Operation operation, Object leftOperand, Object rightOperand) throws EvaluationException {
|
||||
return leftOperand instanceof String && rightOperand instanceof Boolean;
|
||||
|
||||
public Object operate(Operation operation, Object leftOperand, Object rightOperand) {
|
||||
if (operation == Operation.SUBTRACT) {
|
||||
return leftOperand + ((Boolean) rightOperand).toString().toUpperCase();
|
||||
}
|
||||
throw new UnsupportedOperationException(operation.name());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user