package cc.smtweb.system.bpm.test;

import cc.smtweb.framework.core.common.SwMap;
import lombok.Data;
import org.junit.jupiter.api.Test;
import org.springframework.expression.Expression;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;

public class SpelTest {
  @Test
  public void test() {
    //创建ExpressionParser解析表达式
    ExpressionParser parser = new SpelExpressionParser();
    //表达式放置
//    Expression exp = parser.parseExpression("T(java.lang.Math).random() + name + obj['name']");
    Expression exp = parser.parseExpression("T(java.lang.Math).random() > 10");

    //向容器内添加bean
    SpelContext spelContext = new SpelContext();
    spelContext.setName("ddd999");
    spelContext.getObj().put("name", "111abc");
//    ctx.setVariable("obj", beanA);

    StandardEvaluationContext ctx = new StandardEvaluationContext(spelContext);
    /** 如果使用其他的容器，则用下面的方法 */
    //setRootObject并非必须；一个EvaluationContext只能有一个RootObject，引用它的属性时，可以不加前缀
//    ctx.setRootObject(XXX);

    //getValue有参数ctx，从新的容器中根据SpEL表达式获取所需的值
    Object value = exp.getValue(ctx, Boolean.class);
    System.out.println(value);
  }
}

@Data
class SpelContext {
  private String name;
  private SwMap obj = new SwMap();
}