diff --git a/README.zh-CN.md b/README.zh-CN.md
index c2e8f278d..fef607250 100644
--- a/README.zh-CN.md
+++ b/README.zh-CN.md
@@ -57,6 +57,12 @@ LiteFlow拥有极其详细易懂的文档体系,能帮助你解决在使用框
LiteFlow期待你的了解!
+## 🦾赞助商
+
+**云程企业级低代码平台**
+
+
+
**微信公众号**
社区群需要邀请入群。关注公众号后点击`个人微信`加我,我可以拉你入群
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/builder/el/LiteFlowChainELBuilder.java b/liteflow-core/src/main/java/com/yomahub/liteflow/builder/el/LiteFlowChainELBuilder.java
index cb6fd7748..c2d22fc92 100644
--- a/liteflow-core/src/main/java/com/yomahub/liteflow/builder/el/LiteFlowChainELBuilder.java
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/builder/el/LiteFlowChainELBuilder.java
@@ -3,6 +3,7 @@ package com.yomahub.liteflow.builder.el;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.CharUtil;
+import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -145,17 +146,24 @@ public class LiteFlowChainELBuilder {
// 这里无论多复杂的,外面必定有一个最外层的Condition,所以这里只有一个,内部可以嵌套很多层,这点和以前的不太一样
Condition condition = (Condition) EXPRESS_RUNNER.execute(elStr, context, errorList, true, true);
+ if (Objects.isNull(condition)){
+ throw new QLException(StrUtil.format("parse el fail,el:[{}]", elStr));
+ }
+
// 把主要的condition加入
this.conditionList.add(condition);
return this;
} catch (QLException e) {
// EL 底层会包装异常,这里是曲线处理
- if (Objects.equals(e.getCause().getMessage(), DataNotFoundException.MSG)) {
+ if (ObjectUtil.isNotNull(e.getCause()) && Objects.equals(e.getCause().getMessage(), DataNotFoundException.MSG)) {
// 构建错误信息
String msg = buildDataNotFoundExceptionMsg(elStr);
throw new ELParseException(msg);
+ }else if (ObjectUtil.isNotNull(e.getCause())){
+ throw new ELParseException(e.getCause().getMessage());
+ }else{
+ throw new ELParseException(e.getMessage());
}
- throw new ELParseException(e.getCause().getMessage());
} catch (Exception e) {
String errMsg = StrUtil.format("parse el fail in this chain[{}];\r\n", chain.getChainId());
throw new ELParseException(errMsg + e.getMessage());
@@ -172,7 +180,7 @@ public class LiteFlowChainELBuilder {
LiteFlowChainELBuilder.createChain().setEL(elStr);
return Boolean.TRUE;
} catch (Exception e) {
- LOG.error(e.getMessage());
+ LOG.error("validate error",e);
}
return Boolean.FALSE;
}
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/core/NodeComponent.java b/liteflow-core/src/main/java/com/yomahub/liteflow/core/NodeComponent.java
index 2ecca94ca..5d8c81c70 100644
--- a/liteflow-core/src/main/java/com/yomahub/liteflow/core/NodeComponent.java
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/core/NodeComponent.java
@@ -7,6 +7,7 @@
*/
package com.yomahub.liteflow.core;
+import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.StopWatch;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
@@ -32,7 +33,9 @@ import com.yomahub.liteflow.monitor.CompStatistics;
import com.yomahub.liteflow.monitor.MonitorBus;
import java.lang.reflect.Method;
+import java.util.Deque;
import java.util.Map;
+import java.util.function.Predicate;
/**
* 普通组件抽象类
@@ -157,9 +160,15 @@ public abstract class NodeComponent {
public void doRollback() throws Exception {
Slot slot = this.getSlot();
+ boolean alreadyRollback = slot.getRollbackSteps().stream().anyMatch(cmpStep -> cmpStep.getRefNode().equals(getRefNode()));
+ if (alreadyRollback){
+ return;
+ }
+
CmpStep cmpStep = new CmpStep(nodeId, name, CmpStepTypeEnum.SINGLE);
cmpStep.setTag(this.getTag());
cmpStep.setInstance(this);
+ cmpStep.setRefNode(this.getRefNode());
slot.addRollbackStep(cmpStep);
StopWatch stopWatch = new StopWatch();
@@ -178,11 +187,6 @@ public abstract class NodeComponent {
// 往CmpStep中放入时间消耗信息
cmpStep.setRollbackTimeSpent(timeSpent);
- // 性能统计
- if (ObjectUtil.isNotNull(monitorBus)) {
- CompStatistics statistics = new CompStatistics(this.getClass().getSimpleName(), timeSpent);
- monitorBus.addStatistics(statistics);
- }
}
}
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/FlowBus.java b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/FlowBus.java
index db3c0e654..90e15cc5a 100644
--- a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/FlowBus.java
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/FlowBus.java
@@ -40,6 +40,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
+import java.util.concurrent.atomic.AtomicBoolean;
import java.util.stream.Collectors;
/**
@@ -58,6 +59,8 @@ public class FlowBus {
private static final Map fallbackNodeMap = new CopyOnWriteHashMap<>();
+ private static AtomicBoolean initStat = new AtomicBoolean(false);
+
private FlowBus() {
}
@@ -82,7 +85,7 @@ public class FlowBus {
}
public static boolean needInit() {
- return MapUtil.isEmpty(chainMap);
+ return initStat.compareAndSet(false, true);
}
public static boolean containNode(String nodeId) {
@@ -297,4 +300,8 @@ public class FlowBus {
fallbackNodeMap.put(nodeType, node);
}
+ public static void clearStat(){
+ initStat.set(false);
+ }
+
}
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/Condition.java b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/Condition.java
index 3bfbe3203..0d4eec6a7 100644
--- a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/Condition.java
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/Condition.java
@@ -10,6 +10,7 @@ package com.yomahub.liteflow.flow.element;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
import com.yomahub.liteflow.enums.ConditionTypeEnum;
import com.yomahub.liteflow.enums.ExecuteTypeEnum;
import com.yomahub.liteflow.exception.ChainEndException;
@@ -127,7 +128,11 @@ public abstract class Condition implements Executable{
@Override
public String getId() {
- return id;
+ if (StrUtil.isBlank(this.id)){
+ return StrUtil.format("condition-{}",this.getConditionType().getName());
+ }else{
+ return id;
+ }
}
@Override
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/parallel/WhenFutureObj.java b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/parallel/WhenFutureObj.java
index c0953b891..33bb8b963 100644
--- a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/parallel/WhenFutureObj.java
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/parallel/WhenFutureObj.java
@@ -2,7 +2,6 @@ package com.yomahub.liteflow.flow.parallel;
import cn.hutool.core.util.StrUtil;
import com.yomahub.liteflow.exception.WhenTimeoutException;
-import com.yomahub.liteflow.property.LiteflowConfigGetter;
/**
* 并行异步CompletableFuture里的值对象
@@ -16,34 +15,34 @@ public class WhenFutureObj {
private boolean timeout;
- private String executorName;
+ private String executorId;
private Exception ex;
- public static WhenFutureObj success(String executorName) {
+ public static WhenFutureObj success(String executorId) {
WhenFutureObj result = new WhenFutureObj();
result.setSuccess(true);
result.setTimeout(false);
- result.setExecutorName(executorName);
+ result.setExecutorId(executorId);
return result;
}
- public static WhenFutureObj fail(String executorName, Exception ex) {
+ public static WhenFutureObj fail(String executorId, Exception ex) {
WhenFutureObj result = new WhenFutureObj();
result.setSuccess(false);
result.setTimeout(false);
- result.setExecutorName(executorName);
+ result.setExecutorId(executorId);
result.setEx(ex);
return result;
}
- public static WhenFutureObj timeOut(String executorName) {
+ public static WhenFutureObj timeOut(String executorId) {
WhenFutureObj result = new WhenFutureObj();
result.setSuccess(false);
result.setTimeout(true);
- result.setExecutorName(executorName);
+ result.setExecutorId(executorId);
result.setEx(new WhenTimeoutException(
- StrUtil.format("Timed out when executing the component[{}]",executorName)));
+ StrUtil.format("Timed out when executing the component[{}]",executorId)));
return result;
}
@@ -55,12 +54,12 @@ public class WhenFutureObj {
this.success = success;
}
- public String getExecutorName() {
- return executorName;
+ public String getExecutorId() {
+ return executorId;
}
- public void setExecutorName(String executorName) {
- this.executorName = executorName;
+ public void setExecutorId(String executorId) {
+ this.executorId = executorId;
}
public Exception getEx() {
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/parallel/strategy/ParallelStrategyExecutor.java b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/parallel/strategy/ParallelStrategyExecutor.java
index cd390352a..47b6c4ca1 100644
--- a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/parallel/strategy/ParallelStrategyExecutor.java
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/parallel/strategy/ParallelStrategyExecutor.java
@@ -207,7 +207,7 @@ public abstract class ParallelStrategyExecutor {
// 输出超时信息
timeOutWhenFutureObjList.forEach(whenFutureObj -> LOG.warn(
- "executing thread has reached max-wait-seconds, thread canceled.Execute-item: [{}]", whenFutureObj.getExecutorName()));
+ "executing thread has reached max-wait-seconds, thread canceled.Execute-item: [{}]", whenFutureObj.getExecutorId()));
// 当配置了 ignoreError = false,出现 interrupted 或者 !f.get() 的情况,将抛出 WhenExecuteException
if (!whenCondition.isIgnoreError()) {
@@ -219,7 +219,7 @@ public abstract class ParallelStrategyExecutor {
// 循环判断CompletableFuture的返回值,如果异步执行失败,则抛出相应的业务异常
for (WhenFutureObj whenFutureObj : allCompletableWhenFutureObjList) {
if (!whenFutureObj.isSuccess()) {
- LOG.info(StrUtil.format("when-executor[{}] execute failed. errorResume [false].", whenFutureObj.getExecutorName()));
+ LOG.info(StrUtil.format("when-executor[{}] execute failed. errorResume [false].", whenFutureObj.getExecutorId()));
throw whenFutureObj.getEx();
}
}
diff --git a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/AndELWrapper.java b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/AndELWrapper.java
index 2a6695983..ab2d9107a 100644
--- a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/AndELWrapper.java
+++ b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/AndELWrapper.java
@@ -39,40 +39,15 @@ public class AndELWrapper extends ELWrapper {
}
@Override
- public AndELWrapper data(String dataName, Object object) {
- setData(JsonUtil.toJsonString(object));
- setDataName(dataName);
- return this;
- }
-
- @Override
- public AndELWrapper data(String dataName, String jsonString) {
- // 校验字符串符合Json格式
- try {
- JsonUtil.parseObject(jsonString);
- } catch (Exception e){
- throw new RuntimeException("字符串不符合Json格式!");
- }
- setData(jsonString);
- setDataName(dataName);
- return this;
- }
-
- @Override
- public AndELWrapper data(String dataName, Map jsonMap) {
- setData(JsonUtil.toJsonString(jsonMap));
- setDataName(dataName);
- return this;
- }
-
- @Override
- protected AndELWrapper maxWaitSeconds(Integer maxWaitSeconds){
+ public AndELWrapper maxWaitSeconds(Integer maxWaitSeconds){
setMaxWaitSeconds(maxWaitSeconds);
return this;
}
@Override
protected String toEL(Integer depth, StringBuilder paramContext) {
+ checkMaxWaitSeconds();
+
// 根据depth是否为null,决定输出是否格式化
Integer sonDepth = depth == null ? null : depth + 1;
StringBuilder sb = new StringBuilder();
diff --git a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/CatchELWrapper.java b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/CatchELWrapper.java
index 93fe18adb..3ecaa5471 100644
--- a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/CatchELWrapper.java
+++ b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/CatchELWrapper.java
@@ -39,32 +39,6 @@ public class CatchELWrapper extends ELWrapper {
return this;
}
- @Override
- public CatchELWrapper data(String dataName, Object object) {
- setData(JsonUtil.toJsonString(object));
- setDataName(dataName);
- return this;
- }
-
- @Override
- public CatchELWrapper data(String dataName, String jsonString) {
- try {
- JsonUtil.parseObject(jsonString);
- } catch (Exception e){
- throw new RuntimeException("字符串不符合Json格式!");
- }
- setData(jsonString);
- setDataName(dataName);
- return this;
- }
-
- @Override
- public CatchELWrapper data(String dataName, Map jsonMap) {
- setData(JsonUtil.toJsonString(jsonMap));
- setDataName(dataName);
- return this;
- }
-
@Override
public CatchELWrapper maxWaitSeconds(Integer maxWaitSeconds){
setMaxWaitSeconds(maxWaitSeconds);
@@ -73,6 +47,8 @@ public class CatchELWrapper extends ELWrapper {
@Override
protected String toEL(Integer depth, StringBuilder paramContext) {
+ checkMaxWaitSeconds();
+
Integer sonDepth = depth == null ? null : depth + 1;
StringBuilder sb = new StringBuilder();
diff --git a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/ELWrapper.java b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/ELWrapper.java
index e251a407c..096bf9b4a 100644
--- a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/ELWrapper.java
+++ b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/ELWrapper.java
@@ -1,6 +1,7 @@
package com.yomahub.liteflow.builder.el;
import cn.hutool.core.util.StrUtil;
+import com.yomahub.liteflow.util.JsonUtil;
import java.util.ArrayList;
import java.util.Arrays;
@@ -94,7 +95,10 @@ public abstract class ELWrapper {
* @param tag 标记内容
* @return {@link ELWrapper}
*/
- protected abstract ELWrapper tag(String tag);
+ public ELWrapper tag(String tag){
+ this.setTag(tag);
+ return this;
+ }
/**
* 设置组件的id
@@ -102,7 +106,10 @@ public abstract class ELWrapper {
* @param id 编号
* @return {@link ELWrapper}
*/
- protected abstract ELWrapper id(String id);
+ public ELWrapper id(String id){
+ this.setId(id);
+ return this;
+ }
/**
* 设置表达式data属性
@@ -111,7 +118,11 @@ public abstract class ELWrapper {
* @param object JavaBean
* @return {@link ELWrapper}
*/
- protected abstract ELWrapper data(String dataName, Object object);
+ protected ELWrapper data(String dataName, Object object){
+ setData("'" + JsonUtil.toJsonString(object) + "'");
+ setDataName(dataName);
+ return this;
+ }
/**
* 设置表达式data属性
@@ -120,7 +131,11 @@ public abstract class ELWrapper {
* @param jsonString JSON格式字符串
* @return {@link ELWrapper}
*/
- protected abstract ELWrapper data(String dataName, String jsonString);
+ protected ELWrapper data(String dataName, String jsonString){
+ setData(jsonString);
+ setDataName(dataName);
+ return this;
+ }
/**
* 设置data属性
@@ -129,7 +144,12 @@ public abstract class ELWrapper {
* @param jsonMap 键值映射
* @return {@link ELWrapper}
*/
- protected abstract ELWrapper data(String dataName, Map jsonMap);
+ protected ELWrapper data(String dataName, Map jsonMap){
+ setData("'" + JsonUtil.toJsonString(jsonMap) + "'");
+ setDataName(dataName);
+ return this;
+ }
+
protected ELWrapper maxWaitSeconds(Integer maxWaitSeconds){
setMaxWaitSeconds(maxWaitSeconds);
@@ -144,7 +164,7 @@ public abstract class ELWrapper {
public String toEL(){
StringBuilder paramContext = new StringBuilder();
String elContext = toEL(null, paramContext);
- return paramContext.append(elContext).toString();
+ return paramContext.append(elContext).append(";").toString();
}
/**
@@ -161,7 +181,7 @@ public abstract class ELWrapper {
} else {
elContext = toEL(0, paramContext);
}
- return paramContext.append(elContext).toString();
+ return paramContext.append(elContext).append(";").toString();
}
/**
@@ -186,10 +206,6 @@ public abstract class ELWrapper {
if(this.getTag() != null){
elContext.append(StrUtil.format(".tag(\"{}\")", this.getTag()));
}
- if(this.getData() != null){
- elContext.append(StrUtil.format(".data({})", this.getDataName()));
- paramContext.append(StrUtil.format("{} = '{}';\n", this.getDataName(), this.getData()));
- }
if(this.getMaxWaitSeconds() != null){
elContext.append(StrUtil.format(".maxWaitSeconds({})", String.valueOf(this.getMaxWaitSeconds())));
}
@@ -218,4 +234,15 @@ public abstract class ELWrapper {
elContext.append(StrUtil.repeat(ELBus.TAB, depth));
}
}
+
+ /**
+ * 检查子表达式是否有最长等待秒数定义
+ */
+ protected void checkMaxWaitSeconds(){
+ for(ELWrapper sonElWrapper : this.getElWrapperList()){
+ if(sonElWrapper != null && sonElWrapper.getMaxWaitSeconds() != null){
+ throw new IllegalArgumentException("maxWaitSeconds必须定义在完整的语义之后!");
+ }
+ }
+ }
}
diff --git a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/FinallyELWrapper.java b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/FinallyELWrapper.java
index 5dc7e2afd..210582e28 100644
--- a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/FinallyELWrapper.java
+++ b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/FinallyELWrapper.java
@@ -31,32 +31,6 @@ public class FinallyELWrapper extends ELWrapper {
return this;
}
- @Override
- public FinallyELWrapper data(String dataName, Object object) {
- setData(JsonUtil.toJsonString(object));
- setDataName(dataName);
- return this;
- }
-
- @Override
- public FinallyELWrapper data(String dataName, String jsonString) {
- try {
- JsonUtil.parseObject(jsonString);
- } catch (Exception e){
- throw new RuntimeException("字符串不符合Json格式!");
- }
- setData(jsonString);
- setDataName(dataName);
- return this;
- }
-
- @Override
- public FinallyELWrapper data(String dataName, Map jsonMap) {
- setData(JsonUtil.toJsonString(jsonMap));
- setDataName(dataName);
- return this;
- }
-
/**
* 后置组件无法设置maxWaitSeconds属性,重载用protected修饰
*
@@ -71,6 +45,8 @@ public class FinallyELWrapper extends ELWrapper {
@Override
protected String toEL(Integer depth, StringBuilder paramContext) {
+ checkMaxWaitSeconds();
+
Integer sonDepth = depth == null ? null : depth + 1;
StringBuilder sb = new StringBuilder();
@@ -108,9 +84,5 @@ public class FinallyELWrapper extends ELWrapper {
if(this.getTag() != null){
elContext.append(StrUtil.format(".tag(\"{}\")", this.getTag()));
}
- if(this.getData() != null){
- elContext.append(StrUtil.format(".data({})", this.getDataName()));
- paramContext.append(StrUtil.format("{} = '{}'\n", this.getDataName(), this.getData()));
- }
}
}
diff --git a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/ForELWrapper.java b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/ForELWrapper.java
index c57029cb7..27edafd97 100644
--- a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/ForELWrapper.java
+++ b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/ForELWrapper.java
@@ -55,32 +55,6 @@ public class ForELWrapper extends LoopELWrapper {
return this;
}
- @Override
- public ForELWrapper data(String dataName, Object object) {
- setData(JsonUtil.toJsonString(object));
- setDataName(dataName);
- return this;
- }
-
- @Override
- public ForELWrapper data(String dataName, String jsonString) {
- try {
- JsonUtil.parseObject(jsonString);
- } catch (Exception e){
- throw new RuntimeException("字符串不符合Json格式!");
- }
- setData(jsonString);
- setDataName(dataName);
- return this;
- }
-
- @Override
- public ForELWrapper data(String dataName, Map jsonMap) {
- setData(JsonUtil.toJsonString(jsonMap));
- setDataName(dataName);
- return this;
- }
-
@Override
public ForELWrapper maxWaitSeconds(Integer maxWaitSeconds){
setMaxWaitSeconds(maxWaitSeconds);
diff --git a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/IfELWrapper.java b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/IfELWrapper.java
index 34100a303..e6d79e882 100644
--- a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/IfELWrapper.java
+++ b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/IfELWrapper.java
@@ -213,32 +213,6 @@ public class IfELWrapper extends ELWrapper {
return this;
}
- @Override
- public IfELWrapper data(String dataName, Object object) {
- setData(JsonUtil.toJsonString(object));
- setDataName(dataName);
- return this;
- }
-
- @Override
- public IfELWrapper data(String dataName, String jsonString) {
- try {
- JsonUtil.parseObject(jsonString);
- } catch (Exception e){
- throw new RuntimeException("字符串不符合Json格式!");
- }
- setData(jsonString);
- setDataName(dataName);
- return this;
- }
-
- @Override
- public IfELWrapper data(String dataName, Map jsonMap) {
- setData(JsonUtil.toJsonString(jsonMap));
- setDataName(dataName);
- return this;
- }
-
@Override
public IfELWrapper maxWaitSeconds(Integer maxWaitSeconds){
setMaxWaitSeconds(maxWaitSeconds);
@@ -247,6 +221,8 @@ public class IfELWrapper extends ELWrapper {
@Override
protected String toEL(Integer depth, StringBuilder paramContext) {
+ checkMaxWaitSeconds();
+
Integer sonDepth = depth == null ? null : depth + 1;
StringBuilder sb = new StringBuilder();
diff --git a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/IteratorELWrapper.java b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/IteratorELWrapper.java
index f488cbbc4..5c4f1dd31 100644
--- a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/IteratorELWrapper.java
+++ b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/IteratorELWrapper.java
@@ -43,32 +43,6 @@ public class IteratorELWrapper extends LoopELWrapper {
return this;
}
- @Override
- public IteratorELWrapper data(String dataName, Object object) {
- setData(JsonUtil.toJsonString(object));
- setDataName(dataName);
- return this;
- }
-
- @Override
- public IteratorELWrapper data(String dataName, String jsonString) {
- try {
- JsonUtil.parseObject(jsonString);
- } catch (Exception e){
- throw new RuntimeException("字符串不符合Json格式!");
- }
- setData(jsonString);
- setDataName(dataName);
- return this;
- }
-
- @Override
- public IteratorELWrapper data(String dataName, Map jsonMap) {
- setData(JsonUtil.toJsonString(jsonMap));
- setDataName(dataName);
- return this;
- }
-
@Override
public IteratorELWrapper maxWaitSeconds(Integer maxWaitSeconds){
setMaxWaitSeconds(maxWaitSeconds);
diff --git a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/LoopELWrapper.java b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/LoopELWrapper.java
index a235cc72e..e7113c78d 100644
--- a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/LoopELWrapper.java
+++ b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/LoopELWrapper.java
@@ -54,32 +54,6 @@ public abstract class LoopELWrapper extends ELWrapper {
return this;
}
- @Override
- public LoopELWrapper data(String dataName, Object object) {
- setData(JsonUtil.toJsonString(object));
- setDataName(dataName);
- return this;
- }
-
- @Override
- public LoopELWrapper data(String dataName, String jsonString) {
- try {
- JsonUtil.parseObject(jsonString);
- } catch (Exception e){
- throw new RuntimeException("字符串不符合Json格式!");
- }
- setData(jsonString);
- setDataName(dataName);
- return this;
- }
-
- @Override
- public LoopELWrapper data(String dataName, Map jsonMap) {
- setData(JsonUtil.toJsonString(jsonMap));
- setDataName(dataName);
- return this;
- }
-
@Override
public LoopELWrapper maxWaitSeconds(Integer maxWaitSeconds){
setMaxWaitSeconds(maxWaitSeconds);
@@ -88,6 +62,8 @@ public abstract class LoopELWrapper extends ELWrapper {
@Override
protected String toEL(Integer depth, StringBuilder paramContext) {
+ checkMaxWaitSeconds();
+
Integer sonDepth = depth == null ? null : depth + 1;
StringBuilder sb = new StringBuilder();
diff --git a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/NodeELWrapper.java b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/NodeELWrapper.java
index 8fe1f73d0..3a837b992 100644
--- a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/NodeELWrapper.java
+++ b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/NodeELWrapper.java
@@ -53,25 +53,25 @@ public class NodeELWrapper extends ELWrapper {
* @return {@link NodeELWrapper}
*/
@Override
- protected NodeELWrapper id(String id) {
+ public NodeELWrapper id(String id) {
this.setId(id);
return this;
}
@Override
public NodeELWrapper data(String dataName, Object object) {
- setData(JsonUtil.toJsonString(object));
+ setData("'" + JsonUtil.toJsonString(object) + "'");
setDataName(dataName);
return this;
}
@Override
public NodeELWrapper data(String dataName, String jsonString) {
- try {
- JsonUtil.parseObject(jsonString);
- } catch (Exception e){
- throw new RuntimeException("字符串不符合Json格式!");
- }
+// try {
+// JsonUtil.parseObject(jsonString);
+// } catch (Exception e){
+// throw new RuntimeException("字符串不符合Json格式!");
+// }
setData(jsonString);
setDataName(dataName);
return this;
@@ -79,7 +79,7 @@ public class NodeELWrapper extends ELWrapper {
@Override
public NodeELWrapper data(String dataName, Map jsonMap) {
- setData(JsonUtil.toJsonString(jsonMap));
+ setData("'" + JsonUtil.toJsonString(jsonMap) + "'");
setDataName(dataName);
return this;
}
@@ -114,7 +114,8 @@ public class NodeELWrapper extends ELWrapper {
}
if(this.getData() != null){
elContext.append(StrUtil.format(".data({})", this.getDataName()));
- paramContext.append(StrUtil.format("{} = '{}'\n", this.getDataName(), this.getData()));
+// paramContext.append(StrUtil.format("{} = '{}'\n", this.getDataName(), this.getData()));
+ paramContext.append(StrUtil.format("{} = {}", this.getDataName(), this.getData())).append(";\n");
}
if(this.getMaxWaitSeconds() != null){
elContext.append(StrUtil.format(".maxWaitSeconds({})", String.valueOf(this.getMaxWaitSeconds())));
diff --git a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/NotELWrapper.java b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/NotELWrapper.java
index 8dfbde83b..9782b952d 100644
--- a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/NotELWrapper.java
+++ b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/NotELWrapper.java
@@ -30,32 +30,6 @@ public class NotELWrapper extends ELWrapper {
return this;
}
- @Override
- public NotELWrapper data(String dataName, Object object) {
- setData(JsonUtil.toJsonString(object));
- setDataName(dataName);
- return this;
- }
-
- @Override
- public NotELWrapper data(String dataName, String jsonString) {
- try {
- JsonUtil.parseObject(jsonString);
- } catch (Exception e){
- throw new RuntimeException("字符串不符合Json格式!");
- }
- setData(jsonString);
- setDataName(dataName);
- return this;
- }
-
- @Override
- public NotELWrapper data(String dataName, Map jsonMap) {
- setData(JsonUtil.toJsonString(jsonMap));
- setDataName(dataName);
- return this;
- }
-
@Override
public NotELWrapper maxWaitSeconds(Integer maxWaitSeconds){
setMaxWaitSeconds(maxWaitSeconds);
@@ -64,6 +38,8 @@ public class NotELWrapper extends ELWrapper {
@Override
protected String toEL(Integer depth, StringBuilder paramContext) {
+ checkMaxWaitSeconds();
+
Integer sonDepth = depth == null ? null : depth + 1;
StringBuilder sb = new StringBuilder();
diff --git a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/OrELWrapper.java b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/OrELWrapper.java
index fe4bae56a..cdf599cc1 100644
--- a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/OrELWrapper.java
+++ b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/OrELWrapper.java
@@ -38,32 +38,6 @@ public class OrELWrapper extends ELWrapper {
return this;
}
- @Override
- public OrELWrapper data(String dataName, Object object) {
- setData(JsonUtil.toJsonString(object));
- setDataName(dataName);
- return this;
- }
-
- @Override
- public OrELWrapper data(String dataName, String jsonString) {
- try {
- JsonUtil.parseObject(jsonString);
- } catch (Exception e){
- throw new RuntimeException("字符串不符合Json格式!");
- }
- setData(jsonString);
- setDataName(dataName);
- return this;
- }
-
- @Override
- public OrELWrapper data(String dataName, Map jsonMap) {
- setData(JsonUtil.toJsonString(jsonMap));
- setDataName(dataName);
- return this;
- }
-
@Override
public OrELWrapper maxWaitSeconds(Integer maxWaitSeconds){
setMaxWaitSeconds(maxWaitSeconds);
@@ -72,6 +46,8 @@ public class OrELWrapper extends ELWrapper {
@Override
protected String toEL(Integer depth, StringBuilder paramContext) {
+ checkMaxWaitSeconds();
+
Integer sonDepth = depth == null ? null : depth + 1;
StringBuilder sb = new StringBuilder();
diff --git a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/PreELWrapper.java b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/PreELWrapper.java
index d993229a7..b80f83b91 100644
--- a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/PreELWrapper.java
+++ b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/PreELWrapper.java
@@ -30,32 +30,6 @@ public class PreELWrapper extends ELWrapper {
return this;
}
- @Override
- public PreELWrapper data(String dataName, Object object) {
- setData(JsonUtil.toJsonString(object));
- setDataName(dataName);
- return this;
- }
-
- @Override
- public PreELWrapper data(String dataName, String jsonString) {
- try {
- JsonUtil.parseObject(jsonString);
- } catch (Exception e){
- throw new RuntimeException("字符串不符合Json格式!");
- }
- setData(jsonString);
- setDataName(dataName);
- return this;
- }
-
- @Override
- public PreELWrapper data(String dataName, Map jsonMap) {
- setData(JsonUtil.toJsonString(jsonMap));
- setDataName(dataName);
- return this;
- }
-
@Override
public PreELWrapper maxWaitSeconds(Integer maxWaitSeconds){
setMaxWaitSeconds(maxWaitSeconds);
@@ -64,6 +38,8 @@ public class PreELWrapper extends ELWrapper {
@Override
protected String toEL(Integer depth, StringBuilder paramContext) {
+ checkMaxWaitSeconds();
+
Integer sonDepth = depth == null ? null : depth + 1;
StringBuilder sb = new StringBuilder();
diff --git a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/SwitchELWrapper.java b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/SwitchELWrapper.java
index 90198de14..97bf45d74 100644
--- a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/SwitchELWrapper.java
+++ b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/SwitchELWrapper.java
@@ -50,32 +50,6 @@ public class SwitchELWrapper extends ELWrapper {
return this;
}
- @Override
- public SwitchELWrapper data(String dataName, Object object) {
- setData(JsonUtil.toJsonString(object));
- setDataName(dataName);
- return this;
- }
-
- @Override
- public SwitchELWrapper data(String dataName, String jsonString) {
- try {
- JsonUtil.parseObject(jsonString);
- } catch (Exception e){
- throw new RuntimeException("字符串不符合Json格式!");
- }
- setData(jsonString);
- setDataName(dataName);
- return this;
- }
-
- @Override
- public SwitchELWrapper data(String dataName, Map jsonMap) {
- setData(JsonUtil.toJsonString(jsonMap));
- setDataName(dataName);
- return this;
- }
-
@Override
public SwitchELWrapper maxWaitSeconds(Integer maxWaitSeconds){
setMaxWaitSeconds(maxWaitSeconds);
@@ -84,6 +58,8 @@ public class SwitchELWrapper extends ELWrapper {
@Override
protected String toEL(Integer depth, StringBuilder paramContext) {
+ checkMaxWaitSeconds();
+
Integer sonDepth = depth == null ? null : depth + 1;
StringBuilder sb = new StringBuilder();
diff --git a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/ThenELWrapper.java b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/ThenELWrapper.java
index 5d9c17cdf..63a32aba5 100644
--- a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/ThenELWrapper.java
+++ b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/ThenELWrapper.java
@@ -76,39 +76,6 @@ public class ThenELWrapper extends ELWrapper {
return this;
}
- /**
- * data关键字的约束:允许以Bean、jsonString、map类型输入数据,必须包含dataName参数。
- *
- * @param dataName data名称
- * @param javaBean JavaBean
- * @return {@link ThenELWrapper}
- */
- @Override
- public ThenELWrapper data(String dataName, Object javaBean) {
- setData(JsonUtil.toJsonString(javaBean));
- setDataName(dataName);
- return this;
- }
-
- @Override
- public ThenELWrapper data(String dataName, String jsonString) {
- try {
- JsonUtil.parseObject(jsonString);
- } catch (Exception e){
- throw new RuntimeException("字符串不符合Json格式!");
- }
- setData(jsonString);
- setDataName(dataName);
- return this;
- }
-
- @Override
- public ThenELWrapper data(String dataName, Map jsonMap) {
- setData(JsonUtil.toJsonString(jsonMap));
- setDataName(dataName);
- return this;
- }
-
@Override
public ThenELWrapper maxWaitSeconds(Integer maxWaitSeconds){
setMaxWaitSeconds(maxWaitSeconds);
@@ -117,6 +84,8 @@ public class ThenELWrapper extends ELWrapper {
@Override
protected String toEL(Integer depth, StringBuilder paramContext) {
+ checkMaxWaitSeconds();
+
Integer sonDepth = depth == null ? null : depth + 1;
StringBuilder sb = new StringBuilder();
diff --git a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/WhenELWrapper.java b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/WhenELWrapper.java
index 9008b9e71..35c97bd2d 100644
--- a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/WhenELWrapper.java
+++ b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/WhenELWrapper.java
@@ -69,32 +69,6 @@ public class WhenELWrapper extends ELWrapper {
return this;
}
- @Override
- public WhenELWrapper data(String dataName, Object object) {
- setData(JsonUtil.toJsonString(object));
- setDataName(dataName);
- return this;
- }
-
- @Override
- public WhenELWrapper data(String dataName, String jsonString) {
- try {
- JsonUtil.parseObject(jsonString);
- } catch (Exception e){
- throw new RuntimeException("字符串不符合Json格式!");
- }
- setData(jsonString);
- setDataName(dataName);
- return this;
- }
-
- @Override
- public WhenELWrapper data(String dataName, Map jsonMap) {
- setData(JsonUtil.toJsonString(jsonMap));
- setDataName(dataName);
- return this;
- }
-
@Override
public WhenELWrapper maxWaitSeconds(Integer maxWaitSeconds){
setMaxWaitSeconds(maxWaitSeconds);
@@ -103,6 +77,8 @@ public class WhenELWrapper extends ELWrapper {
@Override
protected String toEL(Integer depth, StringBuilder paramContext) {
+ checkMaxWaitSeconds();
+
Integer sonDepth = depth == null ? null : depth + 1;
StringBuilder sb = new StringBuilder();
diff --git a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/WhileELWrapper.java b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/WhileELWrapper.java
index 3aff09f02..90f91a6c6 100644
--- a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/WhileELWrapper.java
+++ b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/WhileELWrapper.java
@@ -50,32 +50,6 @@ public class WhileELWrapper extends LoopELWrapper {
return this;
}
- @Override
- public WhileELWrapper data(String dataName, Object object) {
- setData(JsonUtil.toJsonString(object));
- setDataName(dataName);
- return this;
- }
-
- @Override
- public WhileELWrapper data(String dataName, String jsonString) {
- try {
- JsonUtil.parseObject(jsonString);
- } catch (Exception e){
- throw new RuntimeException("字符串不符合Json格式!");
- }
- setData(jsonString);
- setDataName(dataName);
- return this;
- }
-
- @Override
- public WhileELWrapper data(String dataName, Map jsonMap) {
- setData(JsonUtil.toJsonString(jsonMap));
- setDataName(dataName);
- return this;
- }
-
@Override
public WhileELWrapper maxWaitSeconds(Integer maxWaitSeconds){
setMaxWaitSeconds(maxWaitSeconds);
diff --git a/liteflow-rule-plugin/liteflow-rule-apollo/src/main/java/com/yomahub/liteflow/parser/apollo/util/ApolloParseHelper.java b/liteflow-rule-plugin/liteflow-rule-apollo/src/main/java/com/yomahub/liteflow/parser/apollo/util/ApolloParseHelper.java
index 01dfc4acc..cfb981469 100644
--- a/liteflow-rule-plugin/liteflow-rule-apollo/src/main/java/com/yomahub/liteflow/parser/apollo/util/ApolloParseHelper.java
+++ b/liteflow-rule-plugin/liteflow-rule-apollo/src/main/java/com/yomahub/liteflow/parser/apollo/util/ApolloParseHelper.java
@@ -80,10 +80,6 @@ public class ApolloParseHelper {
try {
// 1. handle chain
Set propertyNames = chainConfig.getPropertyNames();
- if (CollectionUtil.isEmpty(propertyNames)) {
- throw new ApolloException(StrUtil.format("There are no chains in namespace : {}",
- apolloParserConfigVO.getChainNamespace()));
- }
List chainItemContentList = propertyNames.stream()
.map(item -> StrUtil.format(CHAIN_XML_PATTERN, item, chainConfig.getProperty(item, StrUtil.EMPTY)))
.collect(Collectors.toList());
diff --git a/liteflow-rule-plugin/liteflow-rule-etcd/src/main/java/com/yomahub/liteflow/parser/etcd/util/EtcdParserHelper.java b/liteflow-rule-plugin/liteflow-rule-etcd/src/main/java/com/yomahub/liteflow/parser/etcd/util/EtcdParserHelper.java
index 1b234e034..04504f17e 100644
--- a/liteflow-rule-plugin/liteflow-rule-etcd/src/main/java/com/yomahub/liteflow/parser/etcd/util/EtcdParserHelper.java
+++ b/liteflow-rule-plugin/liteflow-rule-etcd/src/main/java/com/yomahub/liteflow/parser/etcd/util/EtcdParserHelper.java
@@ -77,10 +77,6 @@ public class EtcdParserHelper {
try {
// 检查chainPath路径下有没有子节点
List chainNameList = client.getChildrenKeys(etcdParserVO.getChainPath(), SEPARATOR);
- if (CollectionUtil.isEmpty(chainNameList)) {
- throw new EtcdException(
- StrUtil.format("There are no chains in path [{}]", etcdParserVO.getChainPath()));
- }
// 获取chainPath路径下的所有子节点内容List
List chainItemContentList = new ArrayList<>();
diff --git a/liteflow-rule-plugin/liteflow-rule-redis/src/main/java/com/yomahub/liteflow/parser/redis/RedisXmlELParser.java b/liteflow-rule-plugin/liteflow-rule-redis/src/main/java/com/yomahub/liteflow/parser/redis/RedisXmlELParser.java
index 547b291c5..1de16453d 100644
--- a/liteflow-rule-plugin/liteflow-rule-redis/src/main/java/com/yomahub/liteflow/parser/redis/RedisXmlELParser.java
+++ b/liteflow-rule-plugin/liteflow-rule-redis/src/main/java/com/yomahub/liteflow/parser/redis/RedisXmlELParser.java
@@ -2,6 +2,7 @@ package com.yomahub.liteflow.parser.redis;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
+import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.text.StrFormatter;
import cn.hutool.core.util.ObjectUtil;
@@ -9,6 +10,7 @@ import cn.hutool.core.util.StrUtil;
import com.yomahub.liteflow.core.FlowInitHook;
import com.yomahub.liteflow.parser.el.ClassXmlFlowELParser;
import com.yomahub.liteflow.parser.redis.exception.RedisException;
+import com.yomahub.liteflow.parser.redis.mode.RedisMode;
import com.yomahub.liteflow.parser.redis.mode.polling.RedisParserPollingMode;
import com.yomahub.liteflow.parser.redis.mode.subscribe.RedisParserSubscribeMode;
import com.yomahub.liteflow.parser.redis.mode.RedisParserHelper;
@@ -40,13 +42,17 @@ public class RedisXmlELParser extends ClassXmlFlowELParser {
try {
RedisParserVO redisParserVO = null;
+ String configJson;
if (MapUtil.isNotEmpty((liteflowConfig.getRuleSourceExtDataMap()))) {
- redisParserVO = BeanUtil.toBean(liteflowConfig.getRuleSourceExtDataMap(),
- RedisParserVO.class, CopyOptions.create());
- }
- else if (StrUtil.isNotBlank(liteflowConfig.getRuleSourceExtData())) {
- redisParserVO = JsonUtil.parseObject(liteflowConfig.getRuleSourceExtData(), RedisParserVO.class);
+ configJson = JsonUtil.toJsonString(liteflowConfig.getRuleSourceExtDataMap());
+ }else if (StrUtil.isNotBlank(liteflowConfig.getRuleSourceExtData())) {
+ configJson = liteflowConfig.getRuleSourceExtData();
+ }else{
+ throw new RedisException(ERROR_COMMON_MSG);
}
+
+ redisParserVO = JsonUtil.parseObject(configJson, RedisParserVO.class);
+
if (Objects.isNull(redisParserVO)) {
throw new RedisException(ERROR_COMMON_MSG);
}
@@ -93,12 +99,18 @@ public class RedisXmlELParser extends ClassXmlFlowELParser {
}
private void checkParserVO(RedisParserVO redisParserVO) {
- if (StrUtil.isBlank(redisParserVO.getHost())) {
+ if (redisParserVO.getRedisMode().equals(RedisMode.SINGLE) && StrUtil.isBlank(redisParserVO.getHost())) {
throw new RedisException(StrFormatter.format(ERROR_MSG_PATTERN, "host"));
}
- if (ObjectUtil.isNull(redisParserVO.getPort())) {
+ if (redisParserVO.getRedisMode().equals(RedisMode.SINGLE) && ObjectUtil.isNull(redisParserVO.getPort())) {
throw new RedisException(StrFormatter.format(ERROR_MSG_PATTERN, "port"));
}
+ if (redisParserVO.getRedisMode().equals(RedisMode.SENTINEL) && StrUtil.isBlank(redisParserVO.getMasterName())) {
+ throw new RedisException(StrFormatter.format(ERROR_MSG_PATTERN, "master name"));
+ }
+ if (redisParserVO.getRedisMode().equals(RedisMode.SENTINEL) && CollectionUtil.isEmpty(redisParserVO.getSentinelAddress())) {
+ throw new RedisException(StrFormatter.format(ERROR_MSG_PATTERN, "sentinel address list"));
+ }
if (ObjectUtil.isNull(redisParserVO.getChainDataBase())) {
throw new RedisException(StrFormatter.format(ERROR_MSG_PATTERN, "chainDataBase"));
}
diff --git a/liteflow-rule-plugin/liteflow-rule-redis/src/main/java/com/yomahub/liteflow/parser/redis/mode/RClient.java b/liteflow-rule-plugin/liteflow-rule-redis/src/main/java/com/yomahub/liteflow/parser/redis/mode/RClient.java
index cfa4a1bfa..535dcd648 100644
--- a/liteflow-rule-plugin/liteflow-rule-redis/src/main/java/com/yomahub/liteflow/parser/redis/mode/RClient.java
+++ b/liteflow-rule-plugin/liteflow-rule-redis/src/main/java/com/yomahub/liteflow/parser/redis/mode/RClient.java
@@ -37,7 +37,7 @@ public class RClient {
* @return hashmap
*/
public Map getMap(String key) {
- RMapCache mapCache = redissonClient.getMapCache(key);
+ RMapCache mapCache = redissonClient.getMapCache(key, StringCodec.INSTANCE);
Set mapFieldSet = mapCache.keySet();
if (CollectionUtil.isEmpty(mapFieldSet)) {
return map;
@@ -69,7 +69,7 @@ public class RClient {
* @return keySet
*/
public Set hkeys(String key) {
- RMap map = redissonClient.getMap(key, new StringCodec());
+ RMap map = redissonClient.getMap(key, StringCodec.INSTANCE);
return map.readAllKeySet();
}
@@ -81,7 +81,7 @@ public class RClient {
* @return hash value
*/
public String hget(String key, String field) {
- RMap map = redissonClient.getMap(key, new StringCodec());
+ RMap map = redissonClient.getMap(key, StringCodec.INSTANCE);
return map.get(field);
}
@@ -91,7 +91,7 @@ public class RClient {
* @return shaDigest
*/
public String scriptLoad(String luaScript) {
- RScript script = redissonClient.getScript(new StringCodec());
+ RScript script = redissonClient.getScript(StringCodec.INSTANCE);
return script.scriptLoad(luaScript);
}
@@ -102,7 +102,7 @@ public class RClient {
* @return string
*/
public String evalSha(String shaDigest, String... args){
- RScript script = redissonClient.getScript(new StringCodec());
+ RScript script = redissonClient.getScript(StringCodec.INSTANCE);
return script.evalSha(RScript.Mode.READ_ONLY, shaDigest, RScript.ReturnType.VALUE,
Arrays.asList(args)).toString();
}
diff --git a/liteflow-rule-plugin/liteflow-rule-redis/src/main/java/com/yomahub/liteflow/parser/redis/mode/polling/RedisParserPollingMode.java b/liteflow-rule-plugin/liteflow-rule-redis/src/main/java/com/yomahub/liteflow/parser/redis/mode/polling/RedisParserPollingMode.java
index 352bf1f9e..52370099f 100644
--- a/liteflow-rule-plugin/liteflow-rule-redis/src/main/java/com/yomahub/liteflow/parser/redis/mode/polling/RedisParserPollingMode.java
+++ b/liteflow-rule-plugin/liteflow-rule-redis/src/main/java/com/yomahub/liteflow/parser/redis/mode/polling/RedisParserPollingMode.java
@@ -121,9 +121,6 @@ public class RedisParserPollingMode implements RedisParserHelper {
// 检查chainKey下有没有子节点
String chainKey = redisParserVO.getChainKey();
Set chainNameSet = chainClient.hkeys(chainKey);
- if (CollectionUtil.isEmpty(chainNameSet)) {
- throw new RedisException(StrUtil.format("There are no chains in key [{}]", chainKey));
- }
chainNum = chainNameSet.size();
// 获取chainKey下的所有子节点内容List
List chainItemContentList = new ArrayList<>();
@@ -131,6 +128,8 @@ public class RedisParserPollingMode implements RedisParserHelper {
String chainData = chainClient.hget(chainKey, chainName);
if (StrUtil.isNotBlank(chainData)) {
chainItemContentList.add(StrUtil.format(CHAIN_XML_PATTERN, chainName, chainData));
+ }else{
+ continue;
}
//计算该chainData的SHA值
diff --git a/liteflow-rule-plugin/liteflow-rule-redis/src/main/java/com/yomahub/liteflow/parser/redis/mode/subscribe/RedisParserSubscribeMode.java b/liteflow-rule-plugin/liteflow-rule-redis/src/main/java/com/yomahub/liteflow/parser/redis/mode/subscribe/RedisParserSubscribeMode.java
index aff895cd9..f21116d4d 100644
--- a/liteflow-rule-plugin/liteflow-rule-redis/src/main/java/com/yomahub/liteflow/parser/redis/mode/subscribe/RedisParserSubscribeMode.java
+++ b/liteflow-rule-plugin/liteflow-rule-redis/src/main/java/com/yomahub/liteflow/parser/redis/mode/subscribe/RedisParserSubscribeMode.java
@@ -86,10 +86,6 @@ public class RedisParserSubscribeMode implements RedisParserHelper {
try {
// 检查chainKey下有没有子节点
Map chainMap = chainClient.getMap(redisParserVO.getChainKey());
- if (CollectionUtil.isEmpty(chainMap)) {
- throw new RedisException(StrUtil.format("There are no chains in key [{}]",
- redisParserVO.getChainKey()));
- }
// 获取chainKey下的所有子节点内容List
List chainItemContentList = new ArrayList<>();
for (Map.Entry entry : chainMap.entrySet()) {
diff --git a/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/constant/SqlReadConstant.java b/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/constant/SqlReadConstant.java
index 68d8e5ee8..f816aec98 100644
--- a/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/constant/SqlReadConstant.java
+++ b/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/constant/SqlReadConstant.java
@@ -5,12 +5,15 @@ package com.yomahub.liteflow.parser.constant;
*
* @author tangkc
* @author houxinyu
+ * @author Bryan.Zhang
* @since 2.11.1
*/
public class SqlReadConstant {
public static final String SQL_PATTERN = "SELECT {},{} FROM {} WHERE {}=?";
+ public static final String SQL_ENABLE_PATTERN = "AND {}=?";
+
public static final String SCRIPT_SQL_CHECK_PATTERN = "SELECT 1 FROM {} ";
public static final String SCRIPT_SQL_PATTERN = "SELECT {},{},{},{} FROM {} WHERE {}=?";
diff --git a/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/read/AbstractSqlRead.java b/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/read/AbstractSqlRead.java
index 4c144aef6..9b15600a3 100644
--- a/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/read/AbstractSqlRead.java
+++ b/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/read/AbstractSqlRead.java
@@ -8,10 +8,7 @@ import com.yomahub.liteflow.parser.sql.exception.ELSQLException;
import com.yomahub.liteflow.parser.sql.util.LiteFlowJdbcUtil;
import com.yomahub.liteflow.parser.sql.vo.SQLParserVO;
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
+import java.sql.*;
import java.util.HashMap;
import java.util.Map;
@@ -20,6 +17,7 @@ import java.util.Map;
*
* @author tangkc
* @author houxinyu
+ * @author Bryan.Zhang
* @since 2.11.1
*/
public abstract class AbstractSqlRead implements SqlRead {
@@ -52,6 +50,10 @@ public abstract class AbstractSqlRead implements SqlRead {
// 设置游标拉取数量
stmt.setFetchSize(SqlReadConstant.FETCH_SIZE_MAX);
stmt.setString(1, config.getApplicationName());
+ ParameterMetaData parameterMetaData = stmt.getParameterMetaData();
+ if (parameterMetaData.getParameterCount() == 2){
+ stmt.setBoolean(2, true);
+ }
rs = stmt.executeQuery();
while (rs.next()) {
@@ -87,10 +89,14 @@ public abstract class AbstractSqlRead implements SqlRead {
}
- public String getStringFromResultSet(ResultSet rs, String field) throws SQLException {
- String data = rs.getString(field);
+ public String getStringFromRs(ResultSet rs, String field) throws SQLException {
+ return rs.getString(field);
+ }
+
+ public String getStringFromRsWithCheck(ResultSet rs, String field) throws SQLException {
+ String data = getStringFromRs(rs, field);
if (StrUtil.isBlank(data)) {
- throw new ELSQLException(StrUtil.format("exist {} field value is empty", field));
+ throw new ELSQLException(StrUtil.format("field[{}] value is empty", field));
}
return data;
}
diff --git a/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/read/impl/ChainRead.java b/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/read/impl/ChainRead.java
index 69eadd692..d2b9defc0 100644
--- a/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/read/impl/ChainRead.java
+++ b/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/read/impl/ChainRead.java
@@ -30,6 +30,7 @@ public class ChainRead extends AbstractSqlRead {
String chainNameField = super.config.getChainNameField();
String chainApplicationNameField = super.config.getChainApplicationNameField();
String applicationName = super.config.getApplicationName();
+ String chainEnableField = super.config.getChainEnableField();
if (StrUtil.isBlank(chainTableName)) {
throw new ELSQLException("You did not define the chainTableName property");
@@ -42,6 +43,10 @@ public class ChainRead extends AbstractSqlRead {
String sqlCmd = StrUtil.format(SqlReadConstant.SQL_PATTERN, chainNameField, elDataField, chainTableName,
chainApplicationNameField);
+ if (StrUtil.isNotBlank(chainEnableField)){
+ sqlCmd = StrUtil.format("{} {}", sqlCmd, StrUtil.format(SqlReadConstant.SQL_ENABLE_PATTERN, chainEnableField));
+ }
+
return sqlCmd;
}
@@ -49,14 +54,14 @@ public class ChainRead extends AbstractSqlRead {
public String buildXmlElement(ResultSet rs) throws SQLException {
String elDataField = super.config.getElDataField();
- return getStringFromResultSet(rs, elDataField);
+ return getStringFromRs(rs, elDataField);
}
@Override
public String buildXmlElementUniqueKey(ResultSet rs) throws SQLException {
String chainNameField = super.config.getChainNameField();
- return getStringFromResultSet(rs, chainNameField);
+ return getStringFromRsWithCheck(rs, chainNameField);
}
@Override
diff --git a/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/read/impl/ScriptRead.java b/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/read/impl/ScriptRead.java
index a0b054b0d..2703a5298 100644
--- a/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/read/impl/ScriptRead.java
+++ b/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/read/impl/ScriptRead.java
@@ -40,6 +40,7 @@ public class ScriptRead extends AbstractSqlRead {
String scriptTypeField = super.config.getScriptTypeField();
String scriptApplicationNameField = super.config.getScriptApplicationNameField();
String applicationName = super.config.getApplicationName();
+ String scriptEnableField = super.config.getScriptEnableField();
if (StrUtil.isBlank(applicationName) || StrUtil.isBlank(scriptApplicationNameField)) {
throw new ELSQLException("You did not define the applicationName or scriptApplicationNameField property");
@@ -74,6 +75,9 @@ public class ScriptRead extends AbstractSqlRead {
);
}
+ if (StrUtil.isNotBlank(scriptEnableField)){
+ sqlCmd = StrUtil.format("{} {}", sqlCmd, StrUtil.format(SqlReadConstant.SQL_ENABLE_PATTERN, scriptEnableField));
+ }
return sqlCmd;
}
@@ -82,7 +86,7 @@ public class ScriptRead extends AbstractSqlRead {
public String buildXmlElement(ResultSet rs) throws SQLException {
String scriptDataField = super.config.getScriptDataField();
- return getStringFromResultSet(rs, scriptDataField);
+ return getStringFromRs(rs, scriptDataField);
}
@@ -93,10 +97,10 @@ public class ScriptRead extends AbstractSqlRead {
String scriptTypeField = super.config.getScriptTypeField();
String scriptLanguageField = super.config.getScriptLanguageField();
- String id = getStringFromResultSet(rs, scriptIdField);
- String name = getStringFromResultSet(rs, scriptNameField);
- String type = getStringFromResultSet(rs, scriptTypeField);
- String language = withLanguage() ? getStringFromResultSet(rs, scriptLanguageField) : null;
+ String id = getStringFromRsWithCheck(rs, scriptIdField);
+ String name = getStringFromRsWithCheck(rs, scriptNameField);
+ String type = getStringFromRsWithCheck(rs, scriptTypeField);
+ String language = withLanguage() ? getStringFromRs(rs, scriptLanguageField) : null;
NodeTypeEnum nodeTypeEnum = NodeTypeEnum.getEnumByCode(type);
if (Objects.isNull(nodeTypeEnum)) {
diff --git a/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/util/JDBCHelper.java b/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/util/JDBCHelper.java
index 7b9b0efda..4c5b91d72 100644
--- a/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/util/JDBCHelper.java
+++ b/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/util/JDBCHelper.java
@@ -22,6 +22,8 @@ import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
+import java.util.function.Consumer;
+import java.util.function.Predicate;
import static com.yomahub.liteflow.parser.constant.SqlReadConstant.*;
@@ -91,9 +93,13 @@ public class JDBCHelper {
// 获取 chain 数据
Map chainMap = chainRead.read();
List chainList = new ArrayList<>();
- chainMap.forEach((chainName, elData) -> {
- chainList.add(StrUtil.format(CHAIN_XML_PATTERN, XmlUtil.escape(chainName), elData));
- });
+
+ chainMap.entrySet().stream()
+ .filter(entry -> StrUtil.isNotBlank(entry.getValue()))
+ .forEach(
+ entry -> chainList.add(StrUtil.format(CHAIN_XML_PATTERN, XmlUtil.escape(entry.getKey()), entry.getValue()))
+ );
+
String chainsContent = CollUtil.join(chainList, StrUtil.EMPTY);
// 获取脚本数据
diff --git a/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/vo/SQLParserVO.java b/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/vo/SQLParserVO.java
index 8824328dd..97fa91840 100644
--- a/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/vo/SQLParserVO.java
+++ b/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/vo/SQLParserVO.java
@@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil;
* 用于解析 RuleSourceExtData 的 VO 类,用于 sql 模式中
*
* @author tangkc
+ * @author Bryan.Zhang
* @since 2.9.0
*/
public class SQLParserVO {
@@ -55,6 +56,11 @@ public class SQLParserVO {
*/
private String elDataField = "el_data";
+ /**
+ * 是否启动某一条chain
+ */
+ private String chainEnableField;
+
/**
* 脚本 node 表名
*/
@@ -90,6 +96,11 @@ public class SQLParserVO {
*/
private String scriptLanguageField;
+ /**
+ * 是否启动这一条脚本
+ */
+ private String scriptEnableField;
+
/**
* 轮询机制是否开启 默认不开启
*/
@@ -276,4 +287,20 @@ public class SQLParserVO {
public void setSqlLogEnabled(Boolean sqlLogEnabled) {
this.sqlLogEnabled = sqlLogEnabled;
}
+
+ public String getChainEnableField() {
+ return chainEnableField;
+ }
+
+ public void setChainEnableField(String chainEnableField) {
+ this.chainEnableField = chainEnableField;
+ }
+
+ public String getScriptEnableField() {
+ return scriptEnableField;
+ }
+
+ public void setScriptEnableField(String scriptEnableField) {
+ this.scriptEnableField = scriptEnableField;
+ }
}
diff --git a/liteflow-rule-plugin/liteflow-rule-zk/src/main/java/com/yomahub/liteflow/parser/zk/util/ZkParserHelper.java b/liteflow-rule-plugin/liteflow-rule-zk/src/main/java/com/yomahub/liteflow/parser/zk/util/ZkParserHelper.java
index 28f81702e..a9811533c 100644
--- a/liteflow-rule-plugin/liteflow-rule-zk/src/main/java/com/yomahub/liteflow/parser/zk/util/ZkParserHelper.java
+++ b/liteflow-rule-plugin/liteflow-rule-zk/src/main/java/com/yomahub/liteflow/parser/zk/util/ZkParserHelper.java
@@ -66,15 +66,14 @@ public class ZkParserHelper {
// 检查chainPath路径下有没有子节点
List chainNameList = client.getChildren().forPath(zkParserVO.getChainPath());
- if (CollectionUtil.isEmpty(chainNameList)) {
- throw new ZkException(StrUtil.format("There are no chains in path [{}]", zkParserVO.getChainPath()));
- }
-
// 获取chainPath路径下的所有子节点内容List
List chainItemContentList = new ArrayList<>();
for (String chainName : chainNameList) {
String chainData = new String(
client.getData().forPath(StrUtil.format("{}/{}", zkParserVO.getChainPath(), chainName)));
+ if (StrUtil.isBlank(chainData)){
+ continue;
+ }
chainItemContentList.add(StrUtil.format(CHAIN_XML_PATTERN, chainName, chainData));
}
// 合并成所有chain的xml内容
diff --git a/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/LiteflowExecutorInit.java b/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/LiteflowExecutorInit.java
index 2113178be..34ff78300 100644
--- a/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/LiteflowExecutorInit.java
+++ b/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/LiteflowExecutorInit.java
@@ -1,6 +1,7 @@
package com.yomahub.liteflow.springboot;
import com.yomahub.liteflow.core.FlowExecutor;
+import com.yomahub.liteflow.flow.FlowBus;
import org.springframework.beans.factory.InitializingBean;
/**
@@ -19,6 +20,7 @@ public class LiteflowExecutorInit implements InitializingBean {
@Override
public void afterPropertiesSet() throws Exception {
flowExecutor.init(true);
+ FlowBus.needInit();
}
}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-apollo-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java b/liteflow-testcase-el/liteflow-testcase-el-apollo-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
index c83a47308..f4f462939 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-apollo-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
+++ b/liteflow-testcase-el/liteflow-testcase-el-apollo-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
@@ -23,6 +23,7 @@ public class BaseTest {
SpiFactoryCleaner.clean();
LiteflowConfigGetter.clean();
FlowInitHook.cleanHook();
+ FlowBus.clearStat();
}
}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/BaseTest.java b/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/BaseTest.java
index 6f5819b99..2d425d2cd 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/BaseTest.java
+++ b/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/BaseTest.java
@@ -18,6 +18,7 @@ public class BaseTest {
SpiFactoryCleaner.clean();
LiteflowConfigGetter.clean();
FlowInitHook.cleanHook();
+ FlowBus.clearStat();
}
}
\ No newline at end of file
diff --git a/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/CatchELBuilderTest.java b/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/CatchELBuilderTest.java
index 4be667cba..0dabcf5c7 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/CatchELBuilderTest.java
+++ b/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/CatchELBuilderTest.java
@@ -1,6 +1,7 @@
package com.yomahub.liteflow.test.builder;
import com.yomahub.liteflow.builder.el.ELBus;
+import com.yomahub.liteflow.builder.el.LiteFlowChainELBuilder;
import com.yomahub.liteflow.test.BaseTest;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@@ -22,68 +23,76 @@ public class CatchELBuilderTest extends BaseTest {
// catch捕获异常调用测试
@Test
public void testCatch1(){
- String expectedStr = "CATCH(THEN(node(\"a\"),node(\"b\"))).DO(node(\"c\"))";
+ String expectedStr = "CATCH(THEN(node(\"a\"),node(\"b\"))).DO(node(\"c\"));";
Assertions.assertEquals(expectedStr,
ELBus.catchException(ELBus.then("a", "b")).doOpt("c").toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.catchException(ELBus.then("a", "b")).doOpt("c").toEL()));
}
@Test
public void testCatch2(){
- String expectedStr = "CATCH(\n\tTHEN(\n\t\tnode(\"a\"),\n\t\tnode(\"b\")\n\t)\n).DO(\n\tnode(\"c\")\n)";
+ String expectedStr = "CATCH(\n\tTHEN(\n\t\tnode(\"a\"),\n\t\tnode(\"b\")\n\t)\n).DO(\n\tnode(\"c\")\n);";
Assertions.assertEquals(expectedStr,
ELBus.catchException(ELBus.then("a", "b")).doOpt("c").toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.catchException(ELBus.then("a", "b")).doOpt("c").toEL(true)));
}
// 属性设置测试
@Test
public void testCatch3(){
- String expectedStr = "CATCH(node(\"a\")).DO(THEN(node(\"b\"),node(\"c\"))).id(\"this is a id\").tag(\"this is a tag\").maxWaitSeconds(3)";
+ String expectedStr = "CATCH(node(\"a\")).DO(THEN(node(\"b\"),node(\"c\"))).id(\"this is a id\").tag(\"this is a tag\").maxWaitSeconds(3);";
Assertions.assertEquals(expectedStr,
ELBus.catchException("a").doOpt(ELBus.then("b", "c")).id("this is a id").tag("this is a tag").maxWaitSeconds(3).toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.catchException("a").doOpt(ELBus.then("b", "c")).id("this is a id").tag("this is a tag").maxWaitSeconds(3).toEL()));
}
@Test
public void testCatch4(){
- String expectedStr = "CATCH(\n\tnode(\"a\")\n).DO(\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t)\n).id(\"this is a id\").tag(\"this is a tag\").maxWaitSeconds(3)";
+ String expectedStr = "CATCH(\n\tnode(\"a\")\n).DO(\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t)\n).id(\"this is a id\").tag(\"this is a tag\").maxWaitSeconds(3);";
Assertions.assertEquals(expectedStr,
ELBus.catchException("a").doOpt(ELBus.then("b", "c")).id("this is a id").tag("this is a tag").maxWaitSeconds(3).toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.catchException("a").doOpt(ELBus.then("b", "c")).id("this is a id").tag("this is a tag").maxWaitSeconds(3).toEL(true)));
}
// data 设置 jsonStr
@Test
public void testCatch5(){
- String expectedStr = "catchData = '{\"name\":\"zhangsan\",\"age\":18}';\nCATCH(node(\"a\")).DO(THEN(node(\"b\"),node(\"c\"))).data(catchData)";
+ String expectedStr = "catchData = '{\"name\":\"zhangsan\",\"age\":18}';\nCATCH(node(\"a\")).DO(THEN(node(\"b\"),node(\"c\").data(catchData)));";
Assertions.assertEquals(expectedStr,
- ELBus.catchException("a").doOpt(ELBus.then("b", "c")).data("catchData", "{\"name\":\"zhangsan\",\"age\":18}").toEL());
+ ELBus.catchException("a").doOpt(ELBus.then("b", ELBus.node("c").data("catchData", "'{\"name\":\"zhangsan\",\"age\":18}'"))).toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.catchException("a").doOpt(ELBus.then("b", ELBus.node("c").data("catchData", "'{\"name\":\"zhangsan\",\"age\":18}'"))).toEL()));
}
@Test
public void testCatch6(){
- String expectedStr = "catchData = '{\"name\":\"zhangsan\",\"age\":18}';\nCATCH(\n\tnode(\"a\")\n).DO(\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t)\n).data(catchData)";
+ String expectedStr = "catchData = '{\"name\":\"zhangsan\",\"age\":18}';\nCATCH(\n\tnode(\"a\")\n).DO(\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\").data(catchData)\n\t)\n);";
Assertions.assertEquals(expectedStr,
- ELBus.catchException("a").doOpt(ELBus.then("b", "c")).data("catchData", "{\"name\":\"zhangsan\",\"age\":18}").toEL(true));
+ ELBus.catchException("a").doOpt(ELBus.then("b", ELBus.node("c").data("catchData", "'{\"name\":\"zhangsan\",\"age\":18}'"))).toEL(true));
System.out.println(expectedStr);
- }
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.catchException("a").doOpt(ELBus.then("b", ELBus.node("c").data("catchData", "'{\"name\":\"zhangsan\",\"age\":18}'"))).toEL(true)));
+ }
// data 设置 map
@Test
public void testCatch7(){
Map name2Value = new HashMap();
name2Value.put("name", "zhangsan");
name2Value.put("age", 18);
- String expectedStr = "catchData = '{\"name\":\"zhangsan\",\"age\":18}';\nCATCH(node(\"a\")).DO(THEN(node(\"b\"),node(\"c\"))).data(catchData)";
+ String expectedStr = "catchData = '{\"name\":\"zhangsan\",\"age\":18}';\nCATCH(node(\"a\")).DO(THEN(node(\"b\"),node(\"c\").data(catchData)));";
Assertions.assertEquals(expectedStr,
- ELBus.catchException("a").doOpt(ELBus.then("b", "c")).data("catchData", name2Value).toEL());
+ ELBus.catchException("a").doOpt(ELBus.then("b", ELBus.node("c").data("catchData", name2Value))).toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.catchException("a").doOpt(ELBus.then("b", ELBus.node("c").data("catchData", name2Value))).toEL()));
}
@Test
public void testCatch8(){
Map name2Value = new HashMap();
name2Value.put("name", "zhangsan");
name2Value.put("age", 18);
- String expectedStr = "catchData = '{\"name\":\"zhangsan\",\"age\":18}';\nCATCH(\n\tnode(\"a\")\n).DO(\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t)\n).data(catchData)";
+ String expectedStr = "catchData = '{\"name\":\"zhangsan\",\"age\":18}';\nCATCH(\n\tnode(\"a\")\n).DO(\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\").data(catchData)\n\t)\n);";
Assertions.assertEquals(expectedStr,
- ELBus.catchException("a").doOpt(ELBus.then("b", "c")).data("catchData", name2Value).toEL(true));
+ ELBus.catchException("a").doOpt(ELBus.then("b", ELBus.node("c").data("catchData", name2Value))).toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.catchException("a").doOpt(ELBus.then("b", ELBus.node("c").data("catchData", name2Value))).toEL(true)));
}
private static class ParamClass{
private String name;
@@ -101,19 +110,21 @@ public class CatchELBuilderTest extends BaseTest {
ParamClass name2Value = new ParamClass();
name2Value.name = "zhangsan";
name2Value.age = 18;
- String expectedStr = "catchData = '{\"name\":\"zhangsan\",\"age\":18}';\nCATCH(node(\"a\")).DO(THEN(node(\"b\"),node(\"c\"))).data(catchData)";
+ String expectedStr = "catchData = '{\"name\":\"zhangsan\",\"age\":18}';\nCATCH(node(\"a\")).DO(THEN(node(\"b\"),node(\"c\").data(catchData)));";
Assertions.assertEquals(expectedStr,
- ELBus.catchException("a").doOpt(ELBus.then("b", "c")).data("catchData", name2Value).toEL());
+ ELBus.catchException("a").doOpt(ELBus.then("b", ELBus.node("c").data("catchData", name2Value))).toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.catchException("a").doOpt(ELBus.then("b", ELBus.node("c").data("catchData", name2Value))).toEL()));
}
@Test
public void testCatch10(){
ParamClass name2Value = new ParamClass();
name2Value.name = "zhangsan";
name2Value.age = 18;
- String expectedStr = "catchData = '{\"name\":\"zhangsan\",\"age\":18}';\nCATCH(\n\tnode(\"a\")\n).DO(\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t)\n).data(catchData)";
+ String expectedStr = "catchData = '{\"name\":\"zhangsan\",\"age\":18}';\nCATCH(\n\tnode(\"a\")\n).DO(\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\").data(catchData)\n\t)\n);";
Assertions.assertEquals(expectedStr,
- ELBus.catchException("a").doOpt(ELBus.then("b", "c")).data("catchData", name2Value).toEL(true));
+ ELBus.catchException("a").doOpt(ELBus.then("b", ELBus.node("c").data("catchData", name2Value))).toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.catchException("a").doOpt(ELBus.then("b", ELBus.node("c").data("catchData", name2Value))).toEL(true)));
}
}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/ComplexELBuilderTest.java b/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/ComplexELBuilderTest.java
index 135437fe8..0da5dfd05 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/ComplexELBuilderTest.java
+++ b/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/ComplexELBuilderTest.java
@@ -1,12 +1,28 @@
package com.yomahub.liteflow.test.builder;
+import cn.hutool.core.date.DateUtil;
+import com.yomahub.liteflow.builder.LiteFlowNodeBuilder;
import com.yomahub.liteflow.builder.el.ELBus;
+import com.yomahub.liteflow.builder.el.ELWrapper;
+import com.yomahub.liteflow.builder.el.LiteFlowChainELBuilder;
import com.yomahub.liteflow.builder.el.ThenELWrapper;
+import com.yomahub.liteflow.core.FlowExecutor;
+import com.yomahub.liteflow.enums.NodeTypeEnum;
+import com.yomahub.liteflow.flow.FlowBus;
+import com.yomahub.liteflow.flow.LiteflowResponse;
+import com.yomahub.liteflow.slot.DefaultContext;
import com.yomahub.liteflow.test.BaseTest;
+import com.yomahub.liteflow.test.builder.cmp.ACmp;
+import com.yomahub.liteflow.test.builder.cmp.BCmp;
+import com.yomahub.liteflow.test.builder.vo.User;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.context.annotation.ComponentScan;
+
+import javax.annotation.Resource;
+import java.util.Date;
/**
* 复杂编排例子测试
@@ -16,7 +32,12 @@ import org.springframework.boot.test.context.SpringBootTest;
*/
@SpringBootTest(classes = ComplexELBuilderTest.class)
@EnableAutoConfiguration
+@ComponentScan({ "com.yomahub.liteflow.test.builder.ComplexELBuilderTest" })
public class ComplexELBuilderTest extends BaseTest {
+
+ @Resource
+ private FlowExecutor flowExecutor;
+
/*
复杂编排例子1
THEN(
@@ -52,12 +73,12 @@ public class ComplexELBuilderTest extends BaseTest {
),
"Z"
);
- String expectedStr = "THEN(node(\"A\"),WHEN(THEN(node(\"B\"),node(\"C\")),THEN(node(\"D\"),node(\"E\"),node(\"F\")),THEN(SWITCH(node(\"G\")).TO(THEN(node(\"H\"),node(\"I\"),WHEN(node(\"J\"),node(\"K\"))).id(\"t1\"),THEN(node(\"L\"),node(\"M\")).id(\"t2\")),node(\"N\"))),node(\"Z\"))";
+ String expectedStr = "THEN(node(\"A\"),WHEN(THEN(node(\"B\"),node(\"C\")),THEN(node(\"D\"),node(\"E\"),node(\"F\")),THEN(SWITCH(node(\"G\")).TO(THEN(node(\"H\"),node(\"I\"),WHEN(node(\"J\"),node(\"K\"))).id(\"t1\"),THEN(node(\"L\"),node(\"M\")).id(\"t2\")),node(\"N\"))),node(\"Z\"));";
Assertions.assertEquals(expectedStr,
complexEl1.toEL());
System.out.println(expectedStr);
- expectedStr = "THEN(\n\tnode(\"A\"),\n\tWHEN(\n\t\tTHEN(\n\t\t\tnode(\"B\"),\n\t\t\tnode(\"C\")\n\t\t),\n\t\tTHEN(\n\t\t\tnode(\"D\"),\n\t\t\tnode(\"E\"),\n\t\t\tnode(\"F\")\n\t\t),\n\t\tTHEN(\n\t\t\tSWITCH(node(\"G\")).TO(\n\t\t\t\tTHEN(\n\t\t\t\t\tnode(\"H\"),\n\t\t\t\t\tnode(\"I\"),\n\t\t\t\t\tWHEN(\n\t\t\t\t\t\tnode(\"J\"),\n\t\t\t\t\t\tnode(\"K\")\n\t\t\t\t\t)\n\t\t\t\t).id(\"t1\"),\n\t\t\t\tTHEN(\n\t\t\t\t\tnode(\"L\"),\n\t\t\t\t\tnode(\"M\")\n\t\t\t\t).id(\"t2\")\n\t\t\t),\n\t\t\tnode(\"N\")\n\t\t)\n\t),\n\tnode(\"Z\")\n)";
+ expectedStr = "THEN(\n\tnode(\"A\"),\n\tWHEN(\n\t\tTHEN(\n\t\t\tnode(\"B\"),\n\t\t\tnode(\"C\")\n\t\t),\n\t\tTHEN(\n\t\t\tnode(\"D\"),\n\t\t\tnode(\"E\"),\n\t\t\tnode(\"F\")\n\t\t),\n\t\tTHEN(\n\t\t\tSWITCH(node(\"G\")).TO(\n\t\t\t\tTHEN(\n\t\t\t\t\tnode(\"H\"),\n\t\t\t\t\tnode(\"I\"),\n\t\t\t\t\tWHEN(\n\t\t\t\t\t\tnode(\"J\"),\n\t\t\t\t\t\tnode(\"K\")\n\t\t\t\t\t)\n\t\t\t\t).id(\"t1\"),\n\t\t\t\tTHEN(\n\t\t\t\t\tnode(\"L\"),\n\t\t\t\t\tnode(\"M\")\n\t\t\t\t).id(\"t2\")\n\t\t\t),\n\t\t\tnode(\"N\")\n\t\t)\n\t),\n\tnode(\"Z\")\n);";
Assertions.assertEquals(expectedStr,
complexEl1.toEL(true));
System.out.println(expectedStr);
@@ -106,15 +127,62 @@ public class ComplexELBuilderTest extends BaseTest {
),
ELBus.node("Z")
);
- String expectedStr = "THEN(node(\"A\"),SWITCH(node(\"B\")).TO(THEN(node(\"D\"),node(\"E\"),node(\"F\")).id(\"t1\"),THEN(node(\"C\"),WHEN(THEN(SWITCH(node(\"G\")).TO(THEN(node(\"H\"),node(\"I\")).id(\"t2\"),node(\"J\")),node(\"K\")),THEN(node(\"L\"),node(\"M\")))).id(\"t3\")),node(\"Z\"))";
+ String expectedStr = "THEN(node(\"A\"),SWITCH(node(\"B\")).TO(THEN(node(\"D\"),node(\"E\"),node(\"F\")).id(\"t1\"),THEN(node(\"C\"),WHEN(THEN(SWITCH(node(\"G\")).TO(THEN(node(\"H\"),node(\"I\")).id(\"t2\"),node(\"J\")),node(\"K\")),THEN(node(\"L\"),node(\"M\")))).id(\"t3\")),node(\"Z\"));";
Assertions.assertEquals(expectedStr,
complexEl2.toEL());
System.out.println(expectedStr);
- expectedStr = "THEN(\n\tnode(\"A\"),\n\tSWITCH(node(\"B\")).TO(\n\t\tTHEN(\n\t\t\tnode(\"D\"),\n\t\t\tnode(\"E\"),\n\t\t\tnode(\"F\")\n\t\t).id(\"t1\"),\n\t\tTHEN(\n\t\t\tnode(\"C\"),\n\t\t\tWHEN(\n\t\t\t\tTHEN(\n\t\t\t\t\tSWITCH(node(\"G\")).TO(\n\t\t\t\t\t\tTHEN(\n\t\t\t\t\t\t\tnode(\"H\"),\n\t\t\t\t\t\t\tnode(\"I\")\n\t\t\t\t\t\t).id(\"t2\"),\n\t\t\t\t\t\tnode(\"J\")\n\t\t\t\t\t),\n\t\t\t\t\tnode(\"K\")\n\t\t\t\t),\n\t\t\t\tTHEN(\n\t\t\t\t\tnode(\"L\"),\n\t\t\t\t\tnode(\"M\")\n\t\t\t\t)\n\t\t\t)\n\t\t).id(\"t3\")\n\t),\n\tnode(\"Z\")\n)";
+ expectedStr = "THEN(\n\tnode(\"A\"),\n\tSWITCH(node(\"B\")).TO(\n\t\tTHEN(\n\t\t\tnode(\"D\"),\n\t\t\tnode(\"E\"),\n\t\t\tnode(\"F\")\n\t\t).id(\"t1\"),\n\t\tTHEN(\n\t\t\tnode(\"C\"),\n\t\t\tWHEN(\n\t\t\t\tTHEN(\n\t\t\t\t\tSWITCH(node(\"G\")).TO(\n\t\t\t\t\t\tTHEN(\n\t\t\t\t\t\t\tnode(\"H\"),\n\t\t\t\t\t\t\tnode(\"I\")\n\t\t\t\t\t\t).id(\"t2\"),\n\t\t\t\t\t\tnode(\"J\")\n\t\t\t\t\t),\n\t\t\t\t\tnode(\"K\")\n\t\t\t\t),\n\t\t\t\tTHEN(\n\t\t\t\t\tnode(\"L\"),\n\t\t\t\t\tnode(\"M\")\n\t\t\t\t)\n\t\t\t)\n\t\t).id(\"t3\")\n\t),\n\tnode(\"Z\")\n);";
Assertions.assertEquals(expectedStr,
complexEl2.toEL(true));
System.out.println(expectedStr);
}
+ /**
+ * 创建Node,创建EL表达式,创建Chain
+ * 执行Chain,校验Data参数
+ */
+ @Test
+ public void test3(){
+ LiteFlowNodeBuilder.createNode()
+ .setId("a")
+ .setName("组件A")
+ .setType(NodeTypeEnum.COMMON)
+ .setClazz(ACmp.class)
+ .build();
+ LiteFlowNodeBuilder.createNode()
+ .setId("b")
+ .setName("组件B")
+ .setType(NodeTypeEnum.COMMON)
+ .setClazz(BCmp.class)
+ .build();
+
+ ELWrapper el = ELBus.then(ELBus.node("a").data("sql", "\"select * from member t where t.id=10001\""),
+ ELBus.node("b").data("cmpData", "'{\"name\":\"jack\",\"age\":27,\"birth\":\"1995-10-01\"}'"));
+
+ String expectStr = "sql = \"select * from member t\n" +
+ " where t.id=10001\";\n" +
+ " cmpData = '{\"name\":\"jack\",\"age\":27,\"birth\":\"1995-10-01\"}';\n" +
+ "\n" +
+ " THEN(\n" +
+ " node(\"a\").data(sql),\n" +
+ " node(\"b\").data(cmpData)\n" +
+ " );";
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(expectStr));
+
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(el.toEL()));
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(el.toEL(true)));
+ LiteFlowChainELBuilder.createChain().setChainId("chain1").setEL(
+ el.toEL(true)
+ ).build();
+
+ LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg");
+ Assertions.assertTrue(response.isSuccess());
+
+ DefaultContext context = response.getFirstContextBean();
+ User user = context.getData("user");
+ Assertions.assertEquals(27, user.getAge());
+ Assertions.assertEquals("jack", user.getName());
+ Assertions.assertEquals(0, user.getBirth().compareTo(DateUtil.parseDate("1995-10-01").toJdkDate()));
+ }
}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/IfELBuilderTest.java b/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/IfELBuilderTest.java
index 9ba7e6807..11670b8f9 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/IfELBuilderTest.java
+++ b/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/IfELBuilderTest.java
@@ -1,6 +1,7 @@
package com.yomahub.liteflow.test.builder;
import com.yomahub.liteflow.builder.el.ELBus;
+import com.yomahub.liteflow.builder.el.LiteFlowChainELBuilder;
import com.yomahub.liteflow.test.BaseTest;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@@ -22,194 +23,224 @@ public class IfELBuilderTest extends BaseTest {
// if三元函数测试
@Test
public void testIf1(){
- String expectedStr = "IF(node(\"a\"),THEN(node(\"c\"),node(\"d\")),WHEN(node(\"e\"),node(\"f\")))";
+ String expectedStr = "IF(node(\"a\"),THEN(node(\"c\"),node(\"d\")),WHEN(node(\"e\"),node(\"f\")));";
Assertions.assertEquals(expectedStr,
ELBus.ifOpt("a", ELBus.then("c", "d"), ELBus.when("e", "f")).toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.ifOpt("a", ELBus.then("c", "d"), ELBus.when("e", "f")).toEL()));
}
// 格式化输出测试
@Test
public void testIf2(){
- String expectedStr = "IF(\n\tnode(\"a\"),\n\tTHEN(\n\t\tnode(\"c\"),\n\t\tnode(\"d\")\n\t),\n\tWHEN(\n\t\tnode(\"e\"),\n\t\tnode(\"f\")\n\t)\n)";
+ String expectedStr = "IF(\n\tnode(\"a\"),\n\tTHEN(\n\t\tnode(\"c\"),\n\t\tnode(\"d\")\n\t),\n\tWHEN(\n\t\tnode(\"e\"),\n\t\tnode(\"f\")\n\t)\n);";
Assertions.assertEquals(expectedStr,
ELBus.ifOpt(ELBus.node("a"), ELBus.then("c", "d"), ELBus.when("e", "f")).toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.ifOpt(ELBus.node("a"), ELBus.then("c", "d"), ELBus.when("e", "f")).toEL(true)));
}
// If二元函数测试
@Test
public void testIf3(){
- String expectedStr = "IF(node(\"a\"),THEN(node(\"b\"),node(\"c\"))).ELSE(WHEN(node(\"c\"),node(\"d\")))";
+ String expectedStr = "IF(node(\"a\"),THEN(node(\"b\"),node(\"c\"))).ELSE(WHEN(node(\"c\"),node(\"d\")));";
Assertions.assertEquals(expectedStr,
ELBus.ifOpt(ELBus.node("a"), ELBus.then("b", "c")).elseOpt(ELBus.when("c", "d")).toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.ifOpt(ELBus.node("a"), ELBus.then("b", "c")).elseOpt(ELBus.when("c", "d")).toEL()));
}
// 格式化输出测试
@Test
public void testIf4(){
- String expectedStr = "IF(\n\tnode(\"a\"),\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t)\n).ELSE(\n\tWHEN(\n\t\tnode(\"c\"),\n\t\tnode(\"d\")\n\t)\n)";
+ String expectedStr = "IF(\n\tnode(\"a\"),\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t)\n).ELSE(\n\tWHEN(\n\t\tnode(\"c\"),\n\t\tnode(\"d\")\n\t)\n);";
Assertions.assertEquals(expectedStr,
ELBus.ifOpt("a", ELBus.then("b", "c")).elseOpt(ELBus.when("c", "d")).toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.ifOpt("a", ELBus.then("b", "c")).elseOpt(ELBus.when("c", "d")).toEL(true)));
}
// ELIF调用测试
@Test
public void testIf5(){
- String expectedStr = "IF(node(\"a\"),node(\"b\")).ELIF(node(\"f1\"),node(\"c\")).ELIF(node(\"f2\"),node(\"d\")).ELSE(node(\"e\"))";
+ String expectedStr = "IF(node(\"a\"),node(\"b\")).ELIF(node(\"f1\"),node(\"c\")).ELIF(node(\"f2\"),node(\"d\")).ELSE(node(\"e\"));";
Assertions.assertEquals(expectedStr,
ELBus.ifOpt("a", "b").elIfOpt("f1", "c").elIfOpt("f2","d").elseOpt("e").toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.ifOpt("a", "b").elIfOpt("f1", "c").elIfOpt("f2","d").elseOpt("e").toEL()));
}
// 格式化输出测试
@Test
public void testIf6(){
- String expectedStr = "IF(\n\tnode(\"a\"),\n\tnode(\"b\")\n).ELIF(\n\tnode(\"f1\"),\n\tnode(\"c\")\n).ELIF(\n\tnode(\"f2\"),\n\tnode(\"d\")\n).ELSE(\n\tnode(\"e\")\n)";
+ String expectedStr = "IF(\n\tnode(\"a\"),\n\tnode(\"b\")\n).ELIF(\n\tnode(\"f1\"),\n\tnode(\"c\")\n).ELIF(\n\tnode(\"f2\"),\n\tnode(\"d\")\n).ELSE(\n\tnode(\"e\")\n);";
Assertions.assertEquals(expectedStr,
ELBus.ifOpt("a", "b").elIfOpt("f1", "c").elIfOpt("f2","d").elseOpt("e").toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.ifOpt("a", "b").elIfOpt("f1", "c").elIfOpt("f2","d").elseOpt("e").toEL(true)));
}
// IF嵌套调用测试
@Test
public void testIf7(){
- String expectedStr = "IF(node(\"a\"),node(\"b\"),IF(node(\"c\"),node(\"d\")).ELSE(node(\"e\")))";
+ String expectedStr = "IF(node(\"a\"),node(\"b\"),IF(node(\"c\"),node(\"d\")).ELSE(node(\"e\")));";
Assertions.assertEquals(expectedStr,
ELBus.ifOpt("a", "b", ELBus.ifOpt("c", "d").elseOpt("e")).toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.ifOpt("a", "b", ELBus.ifOpt("c", "d").elseOpt("e")).toEL()));
}
// 格式化输出测试
@Test
public void testIf8(){
- String expectedStr = "IF(\n\tnode(\"a\"),\n\tnode(\"b\"),\n\tIF(\n\t\tnode(\"c\"),\n\t\tnode(\"d\")\n\t).ELSE(\n\t\tnode(\"e\")\n\t)\n)";
+ String expectedStr = "IF(\n\tnode(\"a\"),\n\tnode(\"b\"),\n\tIF(\n\t\tnode(\"c\"),\n\t\tnode(\"d\")\n\t).ELSE(\n\t\tnode(\"e\")\n\t)\n);";
Assertions.assertEquals(expectedStr,
ELBus.ifOpt("a", "b", ELBus.ifOpt("c", "d").elseOpt("e")).toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.ifOpt("a", "b", ELBus.ifOpt("c", "d").elseOpt("e")).toEL(true)));
}
// IF嵌套调用测试
@Test
public void testIf9(){
- String expectedStr = "IF(node(\"a\"),node(\"b\")).ELSE(IF(node(\"c\"),node(\"d\"),node(\"e\")))";
+ String expectedStr = "IF(node(\"a\"),node(\"b\")).ELSE(IF(node(\"c\"),node(\"d\"),node(\"e\")));";
Assertions.assertEquals(expectedStr,
ELBus.ifOpt("a", "b").elseOpt(ELBus.ifOpt("c", "d", "e")).toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.ifOpt("a", "b").elseOpt(ELBus.ifOpt("c", "d", "e")).toEL()));
}
// 格式化输出测试
@Test
public void testIf10(){
- String expectedStr = "IF(\n\tnode(\"a\"),\n\tnode(\"b\")\n).ELSE(\n\tIF(\n\t\tnode(\"c\"),\n\t\tnode(\"d\"),\n\t\tnode(\"e\")\n\t)\n)";
+ String expectedStr = "IF(\n\tnode(\"a\"),\n\tnode(\"b\")\n).ELSE(\n\tIF(\n\t\tnode(\"c\"),\n\t\tnode(\"d\"),\n\t\tnode(\"e\")\n\t)\n);";
Assertions.assertEquals(expectedStr,
ELBus.ifOpt("a", "b").elseOpt(ELBus.ifOpt("c", "d", "e")).toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.ifOpt("a", "b").elseOpt(ELBus.ifOpt("c", "d", "e")).toEL(true)));
}
// 与表达式输出测试
@Test
public void testIf11(){
- String expectedStr = "IF(AND(node(\"a\"),node(\"b\"),node(\"c\")),node(\"d\"),node(\"e\"))";
+ String expectedStr = "IF(AND(node(\"a\"),node(\"b\"),node(\"c\")),node(\"d\"),node(\"e\"));";
Assertions.assertEquals(expectedStr,
ELBus.ifOpt(ELBus.and("a", "b", "c"), "d", "e").toEL());
System.out.println(expectedStr);
- expectedStr = "IF(AND(node(\"a\"),node(\"b\"),node(\"c\")),node(\"d\")).ELSE(node(\"e\"))";
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.ifOpt(ELBus.and("a", "b", "c"), "d", "e").toEL()));
+ expectedStr = "IF(AND(node(\"a\"),node(\"b\"),node(\"c\")),node(\"d\")).ELSE(node(\"e\"));";
Assertions.assertEquals(expectedStr,
ELBus.ifOpt(ELBus.and("a", "b", "c"), "d").elseOpt("e").toEL());
System.out.println(expectedStr);
- expectedStr = "IF(AND(node(\"a\"),node(\"b\"),node(\"c\")),node(\"d\")).ELIF(AND(node(\"f1\"),node(\"f2\")),node(\"e\"))";
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.ifOpt(ELBus.and("a", "b", "c"), "d").elseOpt("e").toEL()));
+ expectedStr = "IF(AND(node(\"a\"),node(\"b\"),node(\"c\")),node(\"d\")).ELIF(AND(node(\"f1\"),node(\"f2\")),node(\"e\"));";
Assertions.assertEquals(expectedStr,
ELBus.ifOpt(ELBus.and("a", "b", "c"), "d").elIfOpt(ELBus.and("f1", "f2"), "e").toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.ifOpt(ELBus.and("a", "b", "c"), "d").elIfOpt(ELBus.and("f1", "f2"), "e").toEL()));
}
// 格式化输出测试
@Test
public void testIf12(){
- String expectedStr = "IF(\n\tAND(\n\t\tnode(\"a\"),\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t),\n\tnode(\"d\"),\n\tnode(\"e\")\n)";
+ String expectedStr = "IF(\n\tAND(\n\t\tnode(\"a\"),\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t),\n\tnode(\"d\"),\n\tnode(\"e\")\n);";
Assertions.assertEquals(expectedStr,
ELBus.ifOpt(ELBus.and("a", "b", "c"), "d", "e").toEL(true));
System.out.println(expectedStr);
- expectedStr = "IF(\n\tAND(\n\t\tnode(\"a\"),\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t),\n\tnode(\"d\")\n).ELSE(\n\tnode(\"e\")\n)";
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.ifOpt(ELBus.and("a", "b", "c"), "d", "e").toEL(true)));
+ expectedStr = "IF(\n\tAND(\n\t\tnode(\"a\"),\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t),\n\tnode(\"d\")\n).ELSE(\n\tnode(\"e\")\n);";
Assertions.assertEquals(expectedStr,
ELBus.ifOpt(ELBus.and("a", "b", "c"), "d").elseOpt("e").toEL(true));
System.out.println(expectedStr);
- expectedStr = "IF(\n\tAND(\n\t\tnode(\"a\"),\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t),\n\tnode(\"d\")\n).ELIF(\n\tAND(\n\t\tnode(\"f1\"),\n\t\tnode(\"f2\")\n\t),\n\tnode(\"e\")\n)";
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.ifOpt(ELBus.and("a", "b", "c"), "d").elseOpt("e").toEL(true)));
+ expectedStr = "IF(\n\tAND(\n\t\tnode(\"a\"),\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t),\n\tnode(\"d\")\n).ELIF(\n\tAND(\n\t\tnode(\"f1\"),\n\t\tnode(\"f2\")\n\t),\n\tnode(\"e\")\n);";
Assertions.assertEquals(expectedStr,
ELBus.ifOpt(ELBus.and("a", "b", "c"), "d").elIfOpt(ELBus.and("f1", "f2"), "e").toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.ifOpt(ELBus.and("a", "b", "c"), "d").elIfOpt(ELBus.and("f1", "f2"), "e").toEL(true)));
}
// 或表达式测试
@Test
public void testIf13(){
- String expectedStr = "IF(OR(node(\"a\"),node(\"b\"),node(\"c\")),node(\"d\"),node(\"e\"))";
+ String expectedStr = "IF(OR(node(\"a\"),node(\"b\"),node(\"c\")),node(\"d\"),node(\"e\"));";
Assertions.assertEquals(expectedStr,
ELBus.ifOpt(ELBus.or("a", "b", "c"), "d", "e").toEL());
System.out.println(expectedStr);
- expectedStr = "IF(OR(node(\"a\"),node(\"b\"),node(\"c\")),node(\"d\")).ELSE(node(\"e\"))";
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.ifOpt(ELBus.or("a", "b", "c"), "d", "e").toEL()));
+ expectedStr = "IF(OR(node(\"a\"),node(\"b\"),node(\"c\")),node(\"d\")).ELSE(node(\"e\"));";
Assertions.assertEquals(expectedStr,
ELBus.ifOpt(ELBus.or("a", "b", "c"), "d").elseOpt("e").toEL());
System.out.println(expectedStr);
- expectedStr = "IF(OR(node(\"a\"),node(\"b\"),node(\"c\")),node(\"d\")).ELIF(OR(node(\"f1\"),node(\"f2\")),node(\"e\"))";
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.ifOpt(ELBus.or("a", "b", "c"), "d").elseOpt("e").toEL()));
+ expectedStr = "IF(OR(node(\"a\"),node(\"b\"),node(\"c\")),node(\"d\")).ELIF(OR(node(\"f1\"),node(\"f2\")),node(\"e\"));";
Assertions.assertEquals(expectedStr,
ELBus.ifOpt(ELBus.or("a", "b", "c"), "d").elIfOpt(ELBus.or("f1", "f2"), "e").toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.ifOpt(ELBus.or("a", "b", "c"), "d").elIfOpt(ELBus.or("f1", "f2"), "e").toEL()));
}
// 格式化输出测试
@Test
public void testIf14(){
- String expectedStr = "IF(\n\tOR(\n\t\tnode(\"a\"),\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t),\n\tnode(\"d\"),\n\tnode(\"e\")\n)";
+ String expectedStr = "IF(\n\tOR(\n\t\tnode(\"a\"),\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t),\n\tnode(\"d\"),\n\tnode(\"e\")\n);";
Assertions.assertEquals(expectedStr,
ELBus.ifOpt(ELBus.or("a", "b", "c"), "d", "e").toEL(true));
System.out.println(expectedStr);
- expectedStr = "IF(\n\tOR(\n\t\tnode(\"a\"),\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t),\n\tnode(\"d\")\n).ELSE(\n\tnode(\"e\")\n)";
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.ifOpt(ELBus.or("a", "b", "c"), "d", "e").toEL(true)));
+ expectedStr = "IF(\n\tOR(\n\t\tnode(\"a\"),\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t),\n\tnode(\"d\")\n).ELSE(\n\tnode(\"e\")\n);";
Assertions.assertEquals(expectedStr,
ELBus.ifOpt(ELBus.or("a", "b", "c"), "d").elseOpt("e").toEL(true));
System.out.println(expectedStr);
- expectedStr = "IF(\n\tOR(\n\t\tnode(\"a\"),\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t),\n\tnode(\"d\")\n).ELIF(\n\tOR(\n\t\tnode(\"f1\"),\n\t\tnode(\"f2\")\n\t),\n\tnode(\"e\")\n)";
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.ifOpt(ELBus.or("a", "b", "c"), "d").elseOpt("e").toEL(true)));
+ expectedStr = "IF(\n\tOR(\n\t\tnode(\"a\"),\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t),\n\tnode(\"d\")\n).ELIF(\n\tOR(\n\t\tnode(\"f1\"),\n\t\tnode(\"f2\")\n\t),\n\tnode(\"e\")\n);";
Assertions.assertEquals(expectedStr,
ELBus.ifOpt(ELBus.or("a", "b", "c"), "d").elIfOpt(ELBus.or("f1", "f2"), "e").toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.ifOpt(ELBus.or("a", "b", "c"), "d").elIfOpt(ELBus.or("f1", "f2"), "e").toEL(true)));
}
// 非表达式测试
@Test
public void testIf15(){
- String expectedStr = "IF(NOT(node(\"a\")),node(\"b\"),node(\"c\"))";
+ String expectedStr = "IF(NOT(node(\"a\")),node(\"b\"),node(\"c\"));";
Assertions.assertEquals(expectedStr,
ELBus.ifOpt(ELBus.not("a"), "b", "c").toEL());
System.out.println(expectedStr);
- expectedStr = "IF(NOT(node(\"a\")),node(\"b\")).ELSE(node(\"c\"))";
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.ifOpt(ELBus.not("a"), "b", "c").toEL()));
+ expectedStr = "IF(NOT(node(\"a\")),node(\"b\")).ELSE(node(\"c\"));";
Assertions.assertEquals(expectedStr,
ELBus.ifOpt(ELBus.not("a"), "b").elseOpt("c").toEL());
System.out.println(expectedStr);
- expectedStr = "IF(NOT(node(\"a\")),node(\"b\")).ELIF(NOT(node(\"f\")),node(\"c\"))";
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.ifOpt(ELBus.not("a"), "b").elseOpt("c").toEL()));
+ expectedStr = "IF(NOT(node(\"a\")),node(\"b\")).ELIF(NOT(node(\"f\")),node(\"c\"));";
Assertions.assertEquals(expectedStr,
ELBus.ifOpt(ELBus.not("a"), "b").elIfOpt(ELBus.not("f"), "c").toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.ifOpt(ELBus.not("a"), "b").elIfOpt(ELBus.not("f"), "c").toEL()));
}
// 格式化输出测试
@Test
public void testIf16(){
- String expectedStr = "IF(\n\tNOT(\n\t\tnode(\"a\")\n\t),\n\tnode(\"b\"),\n\tnode(\"c\")\n)";
+ String expectedStr = "IF(\n\tNOT(\n\t\tnode(\"a\")\n\t),\n\tnode(\"b\"),\n\tnode(\"c\")\n);";
Assertions.assertEquals(expectedStr,
ELBus.ifOpt(ELBus.not("a"), "b", "c").toEL(true));
System.out.println(expectedStr);
- expectedStr = "IF(\n\tNOT(\n\t\tnode(\"a\")\n\t),\n\tnode(\"b\")\n).ELSE(\n\tnode(\"c\")\n)";
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.ifOpt(ELBus.not("a"), "b", "c").toEL(true)));
+ expectedStr = "IF(\n\tNOT(\n\t\tnode(\"a\")\n\t),\n\tnode(\"b\")\n).ELSE(\n\tnode(\"c\")\n);";
Assertions.assertEquals(expectedStr,
ELBus.ifOpt(ELBus.not("a"), "b").elseOpt("c").toEL(true));
System.out.println(expectedStr);
- expectedStr = "IF(\n\tNOT(\n\t\tnode(\"a\")\n\t),\n\tnode(\"b\")\n).ELIF(\n\tNOT(\n\t\tnode(\"f\")\n\t),\n\tnode(\"c\")\n)";
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.ifOpt(ELBus.not("a"), "b").elseOpt("c").toEL(true)));
+ expectedStr = "IF(\n\tNOT(\n\t\tnode(\"a\")\n\t),\n\tnode(\"b\")\n).ELIF(\n\tNOT(\n\t\tnode(\"f\")\n\t),\n\tnode(\"c\")\n);";
Assertions.assertEquals(expectedStr,
ELBus.ifOpt(ELBus.not("a"), "b").elIfOpt(ELBus.not("f"), "c").toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.ifOpt(ELBus.not("a"), "b").elIfOpt(ELBus.not("f"), "c").toEL(true)));
}
// 属性测试
@Test
public void testIf17(){
- String expectedStr = "IF(node(\"a\"),node(\"b\"),node(\"c\")).id(\"this is a id\").tag(\"this is a tag\").maxWaitSeconds(6)";
+ String expectedStr = "IF(node(\"a\"),node(\"b\"),node(\"c\")).id(\"this is a id\").tag(\"this is a tag\").maxWaitSeconds(6);";
Assertions.assertEquals(expectedStr,
ELBus.ifOpt("a", "b", "c").id("this is a id").tag("this is a tag").maxWaitSeconds(6).toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.ifOpt("a", "b", "c").id("this is a id").tag("this is a tag").maxWaitSeconds(6).toEL()));
}
// 格式化输出
@Test
public void testIf18(){
- String expectedStr = "IF(\n\tnode(\"a\"),\n\tnode(\"b\"),\n\tnode(\"c\")\n).id(\"this is a id\").tag(\"this is a tag\").maxWaitSeconds(6)";
+ String expectedStr = "IF(\n\tnode(\"a\"),\n\tnode(\"b\"),\n\tnode(\"c\")\n).id(\"this is a id\").tag(\"this is a tag\").maxWaitSeconds(6);";
Assertions.assertEquals(expectedStr,
ELBus.ifOpt("a", "b", "c").id("this is a id").tag("this is a tag").maxWaitSeconds(6).toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.ifOpt("a", "b", "c").id("this is a id").tag("this is a tag").maxWaitSeconds(6).toEL(true)));
}
// data map 测试
@Test
@@ -217,10 +248,11 @@ public class IfELBuilderTest extends BaseTest {
Map name2Value = new HashMap();
name2Value.put("name", "zhangsan");
name2Value.put("age", 18);
- String expectedStr = "ifData = '{\"name\":\"zhangsan\",\"age\":18}';\nIF(node(\"a\"),node(\"b\"),node(\"c\")).data(ifData)";
+ String expectedStr = "ifData = '{\"name\":\"zhangsan\",\"age\":18}';\nIF(node(\"a\"),node(\"b\"),node(\"c\").data(ifData));";
Assertions.assertEquals(expectedStr,
- ELBus.ifOpt("a", "b", "c").data("ifData", name2Value).toEL());
+ ELBus.ifOpt("a", "b", ELBus.node("c").data("ifData", name2Value)).toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.ifOpt("a", "b", ELBus.node("c").data("ifData", name2Value)).toEL()));
}
// 格式化输出
@Test
@@ -228,26 +260,29 @@ public class IfELBuilderTest extends BaseTest {
Map name2Value = new HashMap();
name2Value.put("name", "zhangsan");
name2Value.put("age", 18);
- String expectedStr = "ifData = '{\"name\":\"zhangsan\",\"age\":18}';\nIF(\n\tnode(\"a\"),\n\tnode(\"b\"),\n\tnode(\"c\")\n).data(ifData)";
+ String expectedStr = "ifData = '{\"name\":\"zhangsan\",\"age\":18}';\nIF(\n\tnode(\"a\"),\n\tnode(\"b\"),\n\tnode(\"c\").data(ifData)\n);";
Assertions.assertEquals(expectedStr,
- ELBus.ifOpt("a", "b", "c").data("ifData", name2Value).toEL(true));
+ ELBus.ifOpt("a", "b", ELBus.node("c").data("ifData", name2Value)).toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.ifOpt("a", "b", ELBus.node("c").data("ifData", name2Value)).toEL(true)));
}
// data JsonStr 测试
@Test
public void testIf21(){
- String expectedStr = "ifData = '{\"name\":\"zhangsan\",\"age\":18}';\nIF(node(\"a\"),node(\"b\"),node(\"c\")).data(ifData)";
+ String expectedStr = "ifData = '{\"name\":\"zhangsan\",\"age\":18}';\nIF(node(\"a\"),node(\"b\"),node(\"c\").data(ifData));";
Assertions.assertEquals(expectedStr,
- ELBus.ifOpt("a", "b", "c").data("ifData", "{\"name\":\"zhangsan\",\"age\":18}").toEL());
+ ELBus.ifOpt("a", "b", ELBus.node("c").data("ifData", "'{\"name\":\"zhangsan\",\"age\":18}'")).toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.ifOpt("a", "b", ELBus.node("c").data("ifData", "'{\"name\":\"zhangsan\",\"age\":18}'")).toEL()));
}
// 格式化输出
@Test
public void testIf22(){
- String expectedStr = "ifData = '{\"name\":\"zhangsan\",\"age\":18}';\nIF(\n\tnode(\"a\"),\n\tnode(\"b\"),\n\tnode(\"c\")\n).data(ifData)";
+ String expectedStr = "ifData = '{\"name\":\"zhangsan\",\"age\":18}';\nIF(\n\tnode(\"a\"),\n\tnode(\"b\"),\n\tnode(\"c\").data(ifData)\n);";
Assertions.assertEquals(expectedStr,
- ELBus.ifOpt("a", "b", "c").data("ifData", "{\"name\":\"zhangsan\",\"age\":18}").toEL(true));
+ ELBus.ifOpt("a", "b", ELBus.node("c").data("ifData", "'{\"name\":\"zhangsan\",\"age\":18}'")).toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.ifOpt("a", "b", ELBus.node("c").data("ifData", "'{\"name\":\"zhangsan\",\"age\":18}'")).toEL(true)));
}
private static class ParamClass{
private String name;
@@ -265,10 +300,11 @@ public class IfELBuilderTest extends BaseTest {
ParamClass name2Value = new ParamClass();
name2Value.name = "zhangsan";
name2Value.age = 18;
- String expectedStr = "ifData = '{\"name\":\"zhangsan\",\"age\":18}';\nIF(node(\"a\"),node(\"b\"),node(\"c\")).data(ifData)";
+ String expectedStr = "ifData = '{\"name\":\"zhangsan\",\"age\":18}';\nIF(node(\"a\"),node(\"b\"),node(\"c\").data(ifData));";
Assertions.assertEquals(expectedStr,
- ELBus.ifOpt("a", "b", "c").data("ifData", name2Value).toEL());
+ ELBus.ifOpt("a", "b", ELBus.node("c").data("ifData", name2Value)).toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.ifOpt("a", "b", ELBus.node("c").data("ifData", name2Value)).toEL()));
}
// 格式化输出
@Test
@@ -276,10 +312,11 @@ public class IfELBuilderTest extends BaseTest {
ParamClass name2Value = new ParamClass();
name2Value.name = "zhangsan";
name2Value.age = 18;
- String expectedStr = "ifData = '{\"name\":\"zhangsan\",\"age\":18}';\nIF(\n\tnode(\"a\"),\n\tnode(\"b\"),\n\tnode(\"c\")\n).data(ifData)";
+ String expectedStr = "ifData = '{\"name\":\"zhangsan\",\"age\":18}';\nIF(\n\tnode(\"a\"),\n\tnode(\"b\"),\n\tnode(\"c\").data(ifData)\n);";
Assertions.assertEquals(expectedStr,
- ELBus.ifOpt("a", "b", "c").data("ifData", name2Value).toEL(true));
+ ELBus.ifOpt("a", "b", ELBus.node("c").data("ifData", name2Value)).toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.ifOpt("a", "b", ELBus.node("c").data("ifData", name2Value)).toEL(true)));
}
}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/LogicELBuilderTest.java b/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/LogicELBuilderTest.java
index f65887506..199dd63ce 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/LogicELBuilderTest.java
+++ b/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/LogicELBuilderTest.java
@@ -1,6 +1,6 @@
package com.yomahub.liteflow.test.builder;
-import com.yomahub.liteflow.builder.el.ELBus;
+import com.yomahub.liteflow.builder.el.*;
import com.yomahub.liteflow.test.BaseTest;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@@ -22,82 +22,92 @@ public class LogicELBuilderTest extends BaseTest {
// 与或非表达式调用 测试
@Test
public void testlogic1(){
- String expectedStr = "AND(node(\"a\"),OR(node(\"b\"),node(\"c\")),NOT(node(\"d\")))";
+ String expectedStr = "AND(node(\"a\"),OR(node(\"b\"),node(\"c\")),NOT(node(\"d\")));";
Assertions.assertEquals(expectedStr,
ELBus.and("a", ELBus.or("b", "c"), ELBus.not("d")).toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.and("a", ELBus.or("b", "c"), ELBus.not("d")).toEL()));
}
@Test
public void testlogic2(){
- String expectedStr = "AND(\n\tnode(\"a\"),\n\tOR(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t),\n\tNOT(\n\t\tnode(\"d\")\n\t)\n)";
+ String expectedStr = "AND(\n\tnode(\"a\"),\n\tOR(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t),\n\tNOT(\n\t\tnode(\"d\")\n\t)\n);";
Assertions.assertEquals(expectedStr,
ELBus.and("a", ELBus.or("b", "c"), ELBus.not("d")).toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.and("a", ELBus.or("b", "c"), ELBus.not("d")).toEL(true)));
}
@Test
public void testlogic3(){
- String expectedStr = "AND(node(\"a\"),OR(node(\"b\"),node(\"c\")),NOT(node(\"d\")))";
+ String expectedStr = "AND(node(\"a\"),OR(node(\"b\"),node(\"c\")),NOT(node(\"d\")));";
Assertions.assertEquals(expectedStr,
ELBus.and("a").and(ELBus.or("b").or("c")).and(ELBus.not("d")).toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.and("a").and(ELBus.or("b").or("c")).and(ELBus.not("d")).toEL()));
}
@Test
public void testlogic4(){
- String expectedStr = "AND(\n\tnode(\"a\"),\n\tOR(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t),\n\tNOT(\n\t\tnode(\"d\")\n\t)\n)";
+ String expectedStr = "AND(\n\tnode(\"a\"),\n\tOR(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t),\n\tNOT(\n\t\tnode(\"d\")\n\t)\n);";
Assertions.assertEquals(expectedStr,
ELBus.and("a").and(ELBus.or("b").or("c")).and(ELBus.not("d")).toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.and("a").and(ELBus.or("b").or("c")).and(ELBus.not("d")).toEL(true)));
}
// 属性设置
@Test
public void testlogic5(){
- String expectedStr = "AND(node(\"a\"),OR(node(\"b\"),node(\"c\")).id(\"this is a id\").maxWaitSeconds(4),NOT(node(\"d\")).tag(\"this is a tag\"))";
+ String expectedStr = "AND(node(\"a\"),OR(node(\"b\"),node(\"c\")).id(\"this is a id\"),NOT(node(\"d\")).tag(\"this is a tag\")).maxWaitSeconds(4);";
Assertions.assertEquals(expectedStr,
- ELBus.and("a", ELBus.or("b", "c").id("this is a id").maxWaitSeconds(4), ELBus.not("d").tag("this is a tag")).toEL());
+ ELBus.and("a", ELBus.or("b", "c").id("this is a id"), ELBus.not("d").tag("this is a tag")).maxWaitSeconds(4).toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.and("a", ELBus.or("b", "c").id("this is a id"), ELBus.not("d").tag("this is a tag")).maxWaitSeconds(4).toEL()));
}
@Test
public void testlogic6(){
- String expectedStr = "AND(\n\tnode(\"a\"),\n\tOR(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t).id(\"this is a id\").maxWaitSeconds(4),\n\tNOT(\n\t\tnode(\"d\")\n\t).tag(\"this is a tag\")\n)";
+ String expectedStr = "AND(\n\tnode(\"a\"),\n\tOR(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t).id(\"this is a id\"),\n\tNOT(\n\t\tnode(\"d\")\n\t).tag(\"this is a tag\")\n).maxWaitSeconds(4);";
Assertions.assertEquals(expectedStr,
- ELBus.and("a", ELBus.or("b", "c").id("this is a id").maxWaitSeconds(4), ELBus.not("d").tag("this is a tag")).toEL(true));
+ ELBus.and("a", ELBus.or("b", "c").id("this is a id"), ELBus.not("d").tag("this is a tag")).maxWaitSeconds(4).toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.and("a", ELBus.or("b", "c").id("this is a id"), ELBus.not("d").tag("this is a tag")).maxWaitSeconds(4).toEL(true)));
}
@Test
public void testlogic7(){
- String expectedStr = "andData = '{\"name\":\"zhangsan\",\"age\":18}';\nAND(node(\"a\"),OR(node(\"b\"),node(\"c\")),NOT(node(\"d\"))).data(andData)";
+ String expectedStr = "andData = '{\"name\":\"zhangsan\",\"age\":18}';\nAND(node(\"a\"),OR(node(\"b\"),node(\"c\")),NOT(node(\"d\").data(andData)));";
Assertions.assertEquals(expectedStr,
- ELBus.and("a", ELBus.or("b", "c"), ELBus.not("d")).data("andData", "{\"name\":\"zhangsan\",\"age\":18}").toEL());
+ ELBus.and("a", ELBus.or("b", "c"), ELBus.not(ELBus.node("d").data("andData", "'{\"name\":\"zhangsan\",\"age\":18}'"))).toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.and("a", ELBus.or("b", "c"), ELBus.not(ELBus.node("d").data("andData", "'{\"name\":\"zhangsan\",\"age\":18}'"))).toEL()));
}
@Test
public void testlogic8(){
- String expectedStr = "andData = '{\"name\":\"zhangsan\",\"age\":18}';\nAND(\n\tnode(\"a\"),\n\tOR(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t),\n\tNOT(\n\t\tnode(\"d\")\n\t)\n).data(andData)";
+ String expectedStr = "andData = '{\"name\":\"zhangsan\",\"age\":18}';\nAND(\n\tnode(\"a\"),\n\tOR(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t),\n\tNOT(\n\t\tnode(\"d\").data(andData)\n\t)\n);";
Assertions.assertEquals(expectedStr,
- ELBus.and("a", ELBus.or("b", "c"), ELBus.not("d")).data("andData", "{\"name\":\"zhangsan\",\"age\":18}").toEL(true));
+ ELBus.and("a", ELBus.or("b", "c"), ELBus.not(ELBus.node("d").data("andData", "'{\"name\":\"zhangsan\",\"age\":18}'"))).toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.and("a", ELBus.or("b", "c"), ELBus.not(ELBus.node("d").data("andData", "'{\"name\":\"zhangsan\",\"age\":18}'"))).toEL(true)));
}
@Test
public void testlogic9(){
Map name2Value = new HashMap();
name2Value.put("name", "zhangsan");
name2Value.put("age", 18);
- String expectedStr = "orData = '{\"name\":\"zhangsan\",\"age\":18}';\nAND(node(\"a\"),OR(node(\"b\"),node(\"c\")),NOT(node(\"d\"))).data(orData)";
+ String expectedStr = "orData = '{\"name\":\"zhangsan\",\"age\":18}';\nAND(node(\"a\"),OR(node(\"b\"),node(\"c\")),NOT(node(\"d\").data(orData)));";
Assertions.assertEquals(expectedStr,
- ELBus.and("a", ELBus.or("b", "c"), ELBus.not("d")).data("orData", name2Value).toEL());
+ ELBus.and("a", ELBus.or("b", "c"), ELBus.not(ELBus.node("d").data("orData", name2Value))).toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.and("a", ELBus.or("b", "c"), ELBus.not(ELBus.node("d").data("orData", name2Value))).toEL()));
}
@Test
public void testlogic10(){
Map name2Value = new HashMap();
name2Value.put("name", "zhangsan");
name2Value.put("age", 18);
- String expectedStr = "orData = '{\"name\":\"zhangsan\",\"age\":18}';\nAND(\n\tnode(\"a\"),\n\tOR(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t),\n\tNOT(\n\t\tnode(\"d\")\n\t)\n).data(orData)";
+ String expectedStr = "orData = '{\"name\":\"zhangsan\",\"age\":18}';\nAND(\n\tnode(\"a\"),\n\tOR(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t),\n\tNOT(\n\t\tnode(\"d\").data(orData)\n\t)\n);";
Assertions.assertEquals(expectedStr,
- ELBus.and("a", ELBus.or("b", "c"), ELBus.not("d")).data("orData", name2Value).toEL(true));
+ ELBus.and("a", ELBus.or("b", "c"), ELBus.not(ELBus.node("d").data("orData", name2Value))).toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.and("a", ELBus.or("b", "c"), ELBus.not(ELBus.node("d").data("orData", name2Value))).toEL(true)));
}
private static class ParamClass{
private String name;
@@ -114,58 +124,83 @@ public class LogicELBuilderTest extends BaseTest {
ParamClass name2Value = new ParamClass();
name2Value.name = "zhangsan";
name2Value.age = 18;
- String expectedStr = "notData = '{\"name\":\"zhangsan\",\"age\":18}';\nAND(node(\"a\"),OR(node(\"b\"),node(\"c\")),NOT(node(\"d\")).data(notData))";
+ String expectedStr = "notData = '{\"name\":\"zhangsan\",\"age\":18}';\nAND(node(\"a\"),OR(node(\"b\"),node(\"c\")),NOT(node(\"d\").data(notData)));";
Assertions.assertEquals(expectedStr,
- ELBus.and("a", ELBus.or("b", "c"), ELBus.not("d").data("notData", name2Value)).toEL());
+ ELBus.and("a", ELBus.or("b", "c"), ELBus.not(ELBus.node("d").data("notData", name2Value))).toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.and("a", ELBus.or("b", "c"), ELBus.not(ELBus.node("d").data("notData", name2Value))).toEL()));
}
@Test
public void testlogic12(){
ParamClass name2Value = new ParamClass();
name2Value.name = "zhangsan";
name2Value.age = 18;
- String expectedStr = "notData = '{\"name\":\"zhangsan\",\"age\":18}';\nAND(\n\tnode(\"a\"),\n\tOR(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t),\n\tNOT(\n\t\tnode(\"d\")\n\t).data(notData)\n)";
+ String expectedStr = "notData = '{\"name\":\"zhangsan\",\"age\":18}';\nAND(\n\tnode(\"a\"),\n\tOR(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t),\n\tNOT(\n\t\tnode(\"d\").data(notData)\n\t)\n);";
Assertions.assertEquals(expectedStr,
- ELBus.and("a", ELBus.or("b", "c"), ELBus.not("d").data("notData", name2Value)).toEL(true));
+ ELBus.and("a", ELBus.or("b", "c"), ELBus.not(ELBus.node("d").data("notData", name2Value))).toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.and("a", ELBus.or("b", "c"), ELBus.not(ELBus.node("d").data("notData", name2Value))).toEL(true)));
}
// NOT调用方法补充测试
@Test
public void testLogic13(){
- String expectedStr = "NOT(node(\"a\"))";
+ String expectedStr = "NOT(node(\"a\"));";
Assertions.assertEquals(expectedStr,
ELBus.not(ELBus.node("a")).toEL());
System.out.println(expectedStr);
- expectedStr = "NOT(AND(node(\"a\"),node(\"b\"),node(\"c\")))";
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.not(ELBus.node("a")).toEL()));
+ expectedStr = "NOT(AND(node(\"a\"),node(\"b\"),node(\"c\")));";
Assertions.assertEquals(expectedStr,
ELBus.not(ELBus.and("a", "b", "c")).toEL());
System.out.println(expectedStr);
- expectedStr = "NOT(OR(node(\"a\"),node(\"b\"),node(\"c\")))";
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.not(ELBus.and("a", "b", "c")).toEL()));
+ expectedStr = "NOT(OR(node(\"a\"),node(\"b\"),node(\"c\")));";
Assertions.assertEquals(expectedStr,
ELBus.not(ELBus.or("a", "b", "c")).toEL());
System.out.println(expectedStr);
- expectedStr = "NOT(NOT(node(\"a\")))";
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.not(ELBus.or("a", "b", "c")).toEL()));
+ expectedStr = "NOT(NOT(node(\"a\")));";
Assertions.assertEquals(expectedStr,
ELBus.not(ELBus.not(ELBus.node("a"))).toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.not(ELBus.not(ELBus.node("a"))).toEL()));
}
@Test
public void testLogic14(){
- String expectedStr = "NOT(\n\tnode(\"a\")\n)";
+ String expectedStr = "NOT(\n\tnode(\"a\")\n);";
Assertions.assertEquals(expectedStr,
ELBus.not(ELBus.node("a")).toEL(true));
System.out.println(expectedStr);
- expectedStr = "NOT(\n\tAND(\n\t\tnode(\"a\"),\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t)\n)";
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.not(ELBus.node("a")).toEL(true)));
+ expectedStr = "NOT(\n\tAND(\n\t\tnode(\"a\"),\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t)\n);";
Assertions.assertEquals(expectedStr,
ELBus.not(ELBus.and("a", "b", "c")).toEL(true));
System.out.println(expectedStr);
- expectedStr = "NOT(\n\tOR(\n\t\tnode(\"a\"),\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t)\n)";
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.not(ELBus.and("a", "b", "c")).toEL(true)));
+ expectedStr = "NOT(\n\tOR(\n\t\tnode(\"a\"),\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t)\n);";
Assertions.assertEquals(expectedStr,
ELBus.not(ELBus.or("a", "b", "c")).toEL(true));
System.out.println(expectedStr);
- expectedStr = "NOT(\n\tNOT(\n\t\tnode(\"a\")\n\t)\n)";
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.not(ELBus.or("a", "b", "c")).toEL(true)));
+ expectedStr = "NOT(\n\tNOT(\n\t\tnode(\"a\")\n\t)\n);";
Assertions.assertEquals(expectedStr,
ELBus.not(ELBus.not(ELBus.node("a"))).toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.not(ELBus.not(ELBus.node("a"))).toEL(true)));
+ }
+
+ @Test
+ public void testLogic(){
+ AndELWrapper andEl = ELBus.and("a", "b").id("this is a id").tag("this is a tag").maxWaitSeconds(5);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(andEl.toEL()));
+ OrELWrapper orEl = ELBus.or("a", "b").maxWaitSeconds(3);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(orEl.toEL()));
+ NotELWrapper notEl = ELBus.not("a").maxWaitSeconds(2);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(notEl.toEL()));
+
+// Assertions.assertTrue(LiteFlowChainELBuilder.validate("AND(node(\"a\"),OR(node(\"b\"),node(\"c\")).id(\"this is a id\"),NOT(node(\"d\")).tag(\"this is a tag\").maxWaitSeconds(3))"));
+
+// ThenELWrapper thenELWrapper = ELBus.then(ELBus.when("a", "b", ELBus.when("c", "d").maxWaitSeconds(3)));
+// Assertions.assertTrue(LiteFlowChainELBuilder.validate(thenELWrapper.toEL()));
}
}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/LoopELBuilderTest.java b/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/LoopELBuilderTest.java
index b5c6182ce..f3d1ea60b 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/LoopELBuilderTest.java
+++ b/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/LoopELBuilderTest.java
@@ -1,6 +1,7 @@
package com.yomahub.liteflow.test.builder;
import com.yomahub.liteflow.builder.el.ELBus;
+import com.yomahub.liteflow.builder.el.LiteFlowChainELBuilder;
import com.yomahub.liteflow.test.BaseTest;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@@ -22,159 +23,189 @@ public class LoopELBuilderTest extends BaseTest {
// for 限定次数循环
@Test
public void testLoop1(){
- String expectedStr = "FOR(3).DO(THEN(node(\"a\"),node(\"b\"),node(\"c\"))).BREAK(node(\"d\"))";
+ String expectedStr = "FOR(3).DO(THEN(node(\"a\"),node(\"b\"),node(\"c\"))).BREAK(node(\"d\"));";
Assertions.assertEquals(expectedStr,
ELBus.forOpt(3).doOpt(ELBus.then("a", "b", "c")).breakOpt("d").toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.forOpt(3).doOpt(ELBus.then("a", "b", "c")).breakOpt("d").toEL()));
}
// 格式化输出
@Test
public void testLoop2(){
- String expectedStr = "FOR(3).DO(\n\tTHEN(\n\t\tnode(\"a\"),\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t)\n).BREAK(\n\tnode(\"d\")\n)";
+ String expectedStr = "FOR(3).DO(\n\tTHEN(\n\t\tnode(\"a\"),\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t)\n).BREAK(\n\tnode(\"d\")\n);";
Assertions.assertEquals(expectedStr,
ELBus.forOpt(3).doOpt(ELBus.then("a", "b", "c")).breakOpt("d").toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.forOpt(3).doOpt(ELBus.then("a", "b", "c")).breakOpt("d").toEL(true)));
}
// for 单节点循环测试
@Test
public void testLoop3(){
- String expectedStr = "FOR(node(\"a\")).DO(WHEN(node(\"b\"),node(\"c\"),node(\"d\"))).BREAK(AND(node(\"e\"),node(\"f\")))";
+ String expectedStr = "FOR(node(\"a\")).DO(WHEN(node(\"b\"),node(\"c\"),node(\"d\"))).BREAK(AND(node(\"e\"),node(\"f\")));";
Assertions.assertEquals(expectedStr,
ELBus.forOpt("a").doOpt(ELBus.when("b", "c", "d")).breakOpt(ELBus.and("e", "f")).toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.forOpt("a").doOpt(ELBus.when("b", "c", "d")).breakOpt(ELBus.and("e", "f")).toEL()));
}
@Test
public void testLoop4(){
- String expectedStr = "FOR(\n\tnode(\"a\")\n).DO(\n\tWHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\"),\n\t\tnode(\"d\")\n\t)\n).BREAK(\n\tAND(\n\t\tnode(\"e\"),\n\t\tnode(\"f\")\n\t)\n)";
+ String expectedStr = "FOR(\n\tnode(\"a\")\n).DO(\n\tWHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\"),\n\t\tnode(\"d\")\n\t)\n).BREAK(\n\tAND(\n\t\tnode(\"e\"),\n\t\tnode(\"f\")\n\t)\n);";
Assertions.assertEquals(expectedStr,
ELBus.forOpt(ELBus.node("a")).doOpt(ELBus.when("b", "c", "d")).breakOpt(ELBus.and("e", "f")).toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.forOpt(ELBus.node("a")).doOpt(ELBus.when("b", "c", "d")).breakOpt(ELBus.and("e", "f")).toEL(true)));
}
// parallel语句测试
@Test
public void testLoop5(){
- String expectedStr = "FOR(node(\"a\")).parallel(true).DO(WHEN(node(\"b\"),node(\"c\"),node(\"d\"))).BREAK(node(\"e\"))";
+ String expectedStr = "FOR(node(\"a\")).parallel(true).DO(WHEN(node(\"b\"),node(\"c\"),node(\"d\"))).BREAK(node(\"e\"));";
Assertions.assertEquals(expectedStr,
ELBus.forOpt("a").doOpt(ELBus.when("b", "c", "d")).breakOpt("e").parallel(true).toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.forOpt("a").doOpt(ELBus.when("b", "c", "d")).breakOpt("e").parallel(true).toEL()));
}
@Test
public void testLoop6(){
- String expectedStr = "FOR(\n\tnode(\"a\")\n).parallel(true).DO(\n\tWHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\"),\n\t\tnode(\"d\")\n\t)\n).BREAK(\n\tnode(\"e\")\n)";
+ String expectedStr = "FOR(\n\tnode(\"a\")\n).parallel(true).DO(\n\tWHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\"),\n\t\tnode(\"d\")\n\t)\n).BREAK(\n\tnode(\"e\")\n);";
Assertions.assertEquals(expectedStr,
ELBus.forOpt("a").doOpt(ELBus.when("b", "c", "d")).breakOpt("e").parallel(true).toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.forOpt("a").doOpt(ELBus.when("b", "c", "d")).breakOpt("e").parallel(true).toEL(true)));
}
// 属性测试
@Test
public void testLoop7(){
- String expectedStr = "forData = '{\"name\":\"zhangsan\",\"age\":18}';\nFOR(node(\"a\")).DO(WHEN(node(\"b\"),node(\"c\"),node(\"d\"))).BREAK(node(\"e\")).id(\"this is a id\").tag(\"this is a tag\").data(forData).maxWaitSeconds(3)";
+ String expectedStr = "forData = '{\"name\":\"zhangsan\",\"age\":18}';\nFOR(node(\"a\")).DO(WHEN(node(\"b\"),node(\"c\"),node(\"d\"))).BREAK(node(\"e\").data(forData)).id(\"this is a id\").tag(\"this is a tag\").maxWaitSeconds(3);";
Assertions.assertEquals(expectedStr,
- ELBus.forOpt("a").doOpt(ELBus.when("b", "c", "d")).breakOpt("e").id("this is a id").tag("this is a tag").maxWaitSeconds(3).data("forData", "{\"name\":\"zhangsan\",\"age\":18}").toEL());
+ ELBus.forOpt("a").doOpt(ELBus.when("b", "c", "d")).breakOpt(ELBus.node("e").data("forData", "'{\"name\":\"zhangsan\",\"age\":18}'")).id("this is a id").tag("this is a tag").maxWaitSeconds(3).toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.forOpt("a").doOpt(ELBus.when("b", "c", "d")).breakOpt(ELBus.node("e").data("forData", "'{\"name\":\"zhangsan\",\"age\":18}'")).id("this is a id").tag("this is a tag").maxWaitSeconds(3).toEL()));
}
@Test
public void testLoop8(){
- String expectedStr = "forData = '{\"name\":\"zhangsan\",\"age\":18}';\nFOR(\n\tnode(\"a\")\n).DO(\n\tWHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\"),\n\t\tnode(\"d\")\n\t)\n).BREAK(\n\tnode(\"e\")\n).id(\"this is a id\").tag(\"this is a tag\").data(forData).maxWaitSeconds(3)";
+ String expectedStr = "forData = '{\"name\":\"zhangsan\",\"age\":18}';\nFOR(\n\tnode(\"a\")\n).DO(\n\tWHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\"),\n\t\tnode(\"d\")\n\t)\n).BREAK(\n\tnode(\"e\").data(forData)\n).id(\"this is a id\").tag(\"this is a tag\").maxWaitSeconds(3);";
Assertions.assertEquals(expectedStr,
- ELBus.forOpt(ELBus.node("a")).doOpt(ELBus.when("b", "c", "d")).breakOpt("e").id("this is a id").tag("this is a tag").maxWaitSeconds(3).data("forData", "{\"name\":\"zhangsan\",\"age\":18}").toEL(true));
+ ELBus.forOpt(ELBus.node("a")).doOpt(ELBus.when("b", "c", "d")).breakOpt(ELBus.node("e").data("forData", "'{\"name\":\"zhangsan\",\"age\":18}'")).id("this is a id").tag("this is a tag").maxWaitSeconds(3).toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.forOpt(ELBus.node("a")).doOpt(ELBus.when("b", "c", "d")).breakOpt(ELBus.node("e").data("forData", "'{\"name\":\"zhangsan\",\"age\":18}'")).id("this is a id").tag("this is a tag").maxWaitSeconds(3).toEL(true)));
}
// while调用测试
@Test
public void testLoop9(){
- String expectedStr = "WHILE(node(\"a\")).DO(THEN(node(\"b\"),node(\"c\"))).BREAK(node(\"f\"))";
+ String expectedStr = "WHILE(node(\"a\")).DO(THEN(node(\"b\"),node(\"c\"))).BREAK(node(\"f\"));";
Assertions.assertEquals(expectedStr,
ELBus.whileOpt("a").doOpt(ELBus.then("b", "c")).breakOpt("f").toEL());
Assertions.assertEquals(expectedStr,
ELBus.whileOpt(ELBus.node("a")).doOpt(ELBus.then("b", "c")).breakOpt("f").toEL());
System.out.println(expectedStr);
- expectedStr = "WHILE(AND(node(\"a\"),node(\"b\"))).DO(node(\"c\")).BREAK(node(\"d\"))";
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.whileOpt("a").doOpt(ELBus.then("b", "c")).breakOpt("f").toEL()));
+
+ expectedStr = "WHILE(AND(node(\"a\"),node(\"b\"))).DO(node(\"c\")).BREAK(node(\"d\"));";
Assertions.assertEquals(expectedStr,
ELBus.whileOpt(ELBus.and("a", "b")).doOpt("c").breakOpt("d").toEL());
System.out.println(expectedStr);
- expectedStr = "WHILE(OR(node(\"a\"),node(\"b\"))).DO(node(\"c\")).BREAK(node(\"d\"))";
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.whileOpt(ELBus.and("a", "b")).doOpt("c").breakOpt("d").toEL()));
+
+ expectedStr = "WHILE(OR(node(\"a\"),node(\"b\"))).DO(node(\"c\")).BREAK(node(\"d\"));";
Assertions.assertEquals(expectedStr,
ELBus.whileOpt(ELBus.or("a", "b")).doOpt("c").breakOpt("d").toEL());
System.out.println(expectedStr);
- expectedStr = "WHILE(NOT(node(\"a\"))).DO(node(\"c\")).BREAK(node(\"d\"))";
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.whileOpt(ELBus.or("a", "b")).doOpt("c").breakOpt("d").toEL()));
+
+ expectedStr = "WHILE(NOT(node(\"a\"))).DO(node(\"c\")).BREAK(node(\"d\"));";
Assertions.assertEquals(expectedStr,
ELBus.whileOpt(ELBus.not("a")).doOpt("c").breakOpt("d").toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.whileOpt(ELBus.not("a")).doOpt("c").breakOpt("d").toEL()));
}
@Test
public void testLoop10(){
- String expectedStr = "WHILE(\n\tnode(\"a\")\n).DO(\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t)\n).BREAK(\n\tnode(\"f\")\n)";
+ String expectedStr = "WHILE(\n\tnode(\"a\")\n).DO(\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t)\n).BREAK(\n\tnode(\"f\")\n);";
Assertions.assertEquals(expectedStr,
ELBus.whileOpt("a").doOpt(ELBus.then("b", "c")).breakOpt("f").toEL(true));
Assertions.assertEquals(expectedStr,
ELBus.whileOpt(ELBus.node("a")).doOpt(ELBus.then("b", "c")).breakOpt("f").toEL(true));
System.out.println(expectedStr);
- expectedStr = "WHILE(\n\tAND(\n\t\tnode(\"a\"),\n\t\tnode(\"b\")\n\t)\n).DO(\n\tnode(\"c\")\n).BREAK(\n\tnode(\"d\")\n)";
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.whileOpt("a").doOpt(ELBus.then("b", "c")).breakOpt("f").toEL(true)));
+
+ expectedStr = "WHILE(\n\tAND(\n\t\tnode(\"a\"),\n\t\tnode(\"b\")\n\t)\n).DO(\n\tnode(\"c\")\n).BREAK(\n\tnode(\"d\")\n);";
Assertions.assertEquals(expectedStr,
ELBus.whileOpt(ELBus.and("a", "b")).doOpt("c").breakOpt("d").toEL(true));
System.out.println(expectedStr);
- expectedStr = "WHILE(\n\tOR(\n\t\tnode(\"a\"),\n\t\tnode(\"b\")\n\t)\n).DO(\n\tnode(\"c\")\n).BREAK(\n\tnode(\"d\")\n)";
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.whileOpt(ELBus.and("a", "b")).doOpt("c").breakOpt("d").toEL(true)));
+
+ expectedStr = "WHILE(\n\tOR(\n\t\tnode(\"a\"),\n\t\tnode(\"b\")\n\t)\n).DO(\n\tnode(\"c\")\n).BREAK(\n\tnode(\"d\")\n);";
Assertions.assertEquals(expectedStr,
ELBus.whileOpt(ELBus.or("a", "b")).doOpt("c").breakOpt("d").toEL(true));
System.out.println(expectedStr);
- expectedStr = "WHILE(\n\tNOT(\n\t\tnode(\"a\")\n\t)\n).DO(\n\tnode(\"c\")\n).BREAK(\n\tnode(\"d\")\n)";
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.whileOpt(ELBus.or("a", "b")).doOpt("c").breakOpt("d").toEL(true)));
+
+ expectedStr = "WHILE(\n\tNOT(\n\t\tnode(\"a\")\n\t)\n).DO(\n\tnode(\"c\")\n).BREAK(\n\tnode(\"d\")\n);";
Assertions.assertEquals(expectedStr,
ELBus.whileOpt(ELBus.not("a")).doOpt("c").breakOpt("d").toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.whileOpt(ELBus.not("a")).doOpt("c").breakOpt("d").toEL(true)));
}
// while属性调用测试
@Test
public void testLoop11(){
- String expectedStr = "whileData = '{\"name\":\"zhangsan\",\"age\":18}';\nWHILE(node(\"a\")).parallel(true).DO(THEN(node(\"b\"),node(\"c\"))).BREAK(node(\"d\")).id(\"this is a ig\").tag(\"this is a tag\").data(whileData).maxWaitSeconds(3)";
+ String expectedStr = "whileData = '{\"name\":\"zhangsan\",\"age\":18}';\nWHILE(node(\"a\")).parallel(true).DO(THEN(node(\"b\"),node(\"c\"))).BREAK(node(\"d\").data(whileData)).id(\"this is a ig\").tag(\"this is a tag\").maxWaitSeconds(3);";
Assertions.assertEquals(expectedStr,
- ELBus.whileOpt("a").doOpt(ELBus.then("b", "c")).breakOpt("d").id("this is a ig").tag("this is a tag").maxWaitSeconds(3).parallel(true).data("whileData", "{\"name\":\"zhangsan\",\"age\":18}").toEL());
+ ELBus.whileOpt("a").doOpt(ELBus.then("b", "c")).breakOpt(ELBus.node("d").data("whileData", "'{\"name\":\"zhangsan\",\"age\":18}'")).id("this is a ig").tag("this is a tag").maxWaitSeconds(3).parallel(true).toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.whileOpt("a").doOpt(ELBus.then("b", "c")).breakOpt(ELBus.node("d").data("whileData", "'{\"name\":\"zhangsan\",\"age\":18}'")).id("this is a ig").tag("this is a tag").maxWaitSeconds(3).parallel(true).toEL()));
}
@Test
public void testLoop12(){
- String expectedStr = "whileData = '{\"name\":\"zhangsan\",\"age\":18}';\nWHILE(\n\tnode(\"a\")\n).parallel(true).DO(\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t)\n).BREAK(\n\tnode(\"d\")\n).id(\"this is a ig\").tag(\"this is a tag\").data(whileData).maxWaitSeconds(3)";
+ String expectedStr = "whileData = '{\"name\":\"zhangsan\",\"age\":18}';\nWHILE(\n\tnode(\"a\")\n).parallel(true).DO(\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t)\n).BREAK(\n\tnode(\"d\").data(whileData)\n).id(\"this is a ig\").tag(\"this is a tag\").maxWaitSeconds(3);";
Assertions.assertEquals(expectedStr,
- ELBus.whileOpt("a").doOpt(ELBus.then("b", "c")).breakOpt("d").id("this is a ig").tag("this is a tag").maxWaitSeconds(3).parallel(true).data("whileData", "{\"name\":\"zhangsan\",\"age\":18}").toEL(true));
+ ELBus.whileOpt("a").doOpt(ELBus.then("b", "c")).breakOpt(ELBus.node("d").data("whileData", "'{\"name\":\"zhangsan\",\"age\":18}'")).id("this is a ig").tag("this is a tag").maxWaitSeconds(3).parallel(true).toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.whileOpt("a").doOpt(ELBus.then("b", "c")).breakOpt(ELBus.node("d").data("whileData", "'{\"name\":\"zhangsan\",\"age\":18}'")).id("this is a ig").tag("this is a tag").maxWaitSeconds(3).parallel(true).toEL(true)));
}
// Iterator 调用测试
@Test
public void testLoop13(){
- String expectedStr = "ITERATOR(node(\"a\")).DO(WHEN(node(\"b\"),node(\"c\")))";
+ String expectedStr = "ITERATOR(node(\"a\")).DO(WHEN(node(\"b\"),node(\"c\")));";
Assertions.assertEquals(expectedStr,
ELBus.iteratorOpt("a").doOpt(ELBus.when("b", "c")).toEL());
System.out.println(expectedStr);
- expectedStr = "ITERATOR(node(\"a\")).DO(WHEN(node(\"b\"),node(\"c\")))";
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.iteratorOpt("a").doOpt(ELBus.when("b", "c")).toEL()));
+ expectedStr = "ITERATOR(node(\"a\")).DO(WHEN(node(\"b\"),node(\"c\")));";
Assertions.assertEquals(expectedStr,
ELBus.iteratorOpt(ELBus.node("a")).doOpt(ELBus.when("b", "c")).toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.iteratorOpt(ELBus.node("a")).doOpt(ELBus.when("b", "c")).toEL()));
}
@Test
public void testLoop14(){
- String expectedStr = "ITERATOR(\n\tnode(\"a\")\n).DO(\n\tWHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t)\n)";
+ String expectedStr = "ITERATOR(\n\tnode(\"a\")\n).DO(\n\tWHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t)\n);";
Assertions.assertEquals(expectedStr,
ELBus.iteratorOpt("a").doOpt(ELBus.when("b", "c")).toEL(true));
System.out.println(expectedStr);
- expectedStr = "ITERATOR(\n\tnode(\"a\")\n).DO(\n\tWHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t)\n)";
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.iteratorOpt("a").doOpt(ELBus.when("b", "c")).toEL(true)));
+ expectedStr = "ITERATOR(\n\tnode(\"a\")\n).DO(\n\tWHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t)\n);";
Assertions.assertEquals(expectedStr,
ELBus.iteratorOpt(ELBus.node("a")).doOpt(ELBus.when("b", "c")).toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.iteratorOpt(ELBus.node("a")).doOpt(ELBus.when("b", "c")).toEL(true)));
}
// iterator 属性测试
@Test
public void testLoop15(){
- String expectedStr = "iteratorData = '{\"name\":\"zhangsan\",\"age\":18}';\nITERATOR(node(\"a\")).parallel(true).DO(THEN(node(\"b\"),node(\"c\"))).id(\"this is a ig\").tag(\"this is a tag\").data(iteratorData).maxWaitSeconds(3)";
+ String expectedStr = "iteratorData = '{\"name\":\"zhangsan\",\"age\":18}';\nITERATOR(node(\"a\")).parallel(true).DO(THEN(node(\"b\"),node(\"c\").data(iteratorData))).id(\"this is a ig\").tag(\"this is a tag\").maxWaitSeconds(3);";
Assertions.assertEquals(expectedStr,
- ELBus.iteratorOpt("a").doOpt(ELBus.then("b", "c")).id("this is a ig").tag("this is a tag").maxWaitSeconds(3).parallel(true).data("iteratorData", "{\"name\":\"zhangsan\",\"age\":18}").toEL());
+ ELBus.iteratorOpt("a").doOpt(ELBus.then("b", ELBus.node("c").data("iteratorData", "'{\"name\":\"zhangsan\",\"age\":18}'"))).id("this is a ig").tag("this is a tag").maxWaitSeconds(3).parallel(true).toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.iteratorOpt("a").doOpt(ELBus.then("b", ELBus.node("c").data("iteratorData", "'{\"name\":\"zhangsan\",\"age\":18}'"))).id("this is a ig").tag("this is a tag").maxWaitSeconds(3).parallel(true).toEL()));
}
@Test
public void testLoop16(){
- String expectedStr = "iteratorData = '{\"name\":\"zhangsan\",\"age\":18}';\nITERATOR(\n\tnode(\"a\")\n).parallel(true).DO(\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t)\n).id(\"this is a ig\").tag(\"this is a tag\").data(iteratorData).maxWaitSeconds(3)";
+ String expectedStr = "iteratorData = '{\"name\":\"zhangsan\",\"age\":18}';\nITERATOR(\n\tnode(\"a\")\n).parallel(true).DO(\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\").data(iteratorData)\n\t)\n).id(\"this is a ig\").tag(\"this is a tag\").maxWaitSeconds(3);";
Assertions.assertEquals(expectedStr,
- ELBus.iteratorOpt("a").doOpt(ELBus.then("b", "c")).id("this is a ig").tag("this is a tag").maxWaitSeconds(3).parallel(true).data("iteratorData", "{\"name\":\"zhangsan\",\"age\":18}").toEL(true));
+ ELBus.iteratorOpt("a").doOpt(ELBus.then("b", ELBus.node("c").data("iteratorData", "'{\"name\":\"zhangsan\",\"age\":18}'"))).id("this is a ig").tag("this is a tag").maxWaitSeconds(3).parallel(true).toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.iteratorOpt("a").doOpt(ELBus.then("b", ELBus.node("c").data("iteratorData", "'{\"name\":\"zhangsan\",\"age\":18}'"))).id("this is a ig").tag("this is a tag").maxWaitSeconds(3).parallel(true).toEL(true)));
}
// data Map 参数 测试
@Test
@@ -183,20 +214,23 @@ public class LoopELBuilderTest extends BaseTest {
name2Value.put("name", "zhangsan");
name2Value.put("age", 18);
String expectedStr = "forData = '{\"name\":\"zhangsan\",\"age\":18}';\n" +
- "FOR(node(\"a\")).DO(THEN(node(\"b\"),node(\"c\"))).data(forData)";
+ "FOR(node(\"a\")).DO(THEN(node(\"b\"),node(\"c\").data(forData)));";
Assertions.assertEquals(expectedStr,
- ELBus.forOpt("a").doOpt(ELBus.then("b", "c")).data("forData", name2Value).toEL());
+ ELBus.forOpt("a").doOpt(ELBus.then("b", ELBus.node("c").data("forData", name2Value))).toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.forOpt("a").doOpt(ELBus.then("b", ELBus.node("c").data("forData", name2Value))).toEL()));
expectedStr = "whileData = '{\"name\":\"zhangsan\",\"age\":18}';\n" +
- "WHILE(node(\"a\")).DO(THEN(node(\"b\"),node(\"c\"))).data(whileData)";
+ "WHILE(node(\"a\")).DO(THEN(node(\"b\"),node(\"c\").data(whileData)));";
Assertions.assertEquals(expectedStr,
- ELBus.whileOpt("a").doOpt(ELBus.then("b", "c")).data("whileData", name2Value).toEL());
+ ELBus.whileOpt("a").doOpt(ELBus.then("b", ELBus.node("c").data("whileData", name2Value))).toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.whileOpt("a").doOpt(ELBus.then("b", ELBus.node("c").data("whileData", name2Value))).toEL()));
expectedStr = "iteratorData = '{\"name\":\"zhangsan\",\"age\":18}';\n" +
- "ITERATOR(node(\"a\")).DO(THEN(node(\"b\"),node(\"c\"))).data(iteratorData)";
+ "ITERATOR(node(\"a\")).DO(THEN(node(\"b\"),node(\"c\").data(iteratorData)));";
Assertions.assertEquals(expectedStr,
- ELBus.iteratorOpt("a").doOpt(ELBus.then("b", "c")).data("iteratorData", name2Value).toEL());
+ ELBus.iteratorOpt("a").doOpt(ELBus.then("b", ELBus.node("c").data("iteratorData", name2Value))).toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.iteratorOpt("a").doOpt(ELBus.then("b", ELBus.node("c").data("iteratorData", name2Value))).toEL()));
}
@Test
@@ -205,20 +239,23 @@ public class LoopELBuilderTest extends BaseTest {
name2Value.put("name", "zhangsan");
name2Value.put("age", 18);
String expectedStr = "forData = '{\"name\":\"zhangsan\",\"age\":18}';\n" +
- "FOR(\n\tnode(\"a\")\n).DO(\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t)\n).data(forData)";
+ "FOR(\n\tnode(\"a\")\n).DO(\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\").data(forData)\n\t)\n);";
Assertions.assertEquals(expectedStr,
- ELBus.forOpt("a").doOpt(ELBus.then("b", "c")).data("forData", name2Value).toEL(true));
+ ELBus.forOpt("a").doOpt(ELBus.then("b", ELBus.node("c").data("forData", name2Value))).toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.forOpt("a").doOpt(ELBus.then("b", ELBus.node("c").data("forData", name2Value))).toEL(true)));
expectedStr = "whileData = '{\"name\":\"zhangsan\",\"age\":18}';\n" +
- "WHILE(\n\tnode(\"a\")\n).DO(\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t)\n).data(whileData)";
+ "WHILE(\n\tnode(\"a\")\n).DO(\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\").data(whileData)\n\t)\n);";
Assertions.assertEquals(expectedStr,
- ELBus.whileOpt("a").doOpt(ELBus.then("b", "c")).data("whileData", name2Value).toEL(true));
+ ELBus.whileOpt("a").doOpt(ELBus.then("b", ELBus.node("c").data("whileData", name2Value))).toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.whileOpt("a").doOpt(ELBus.then("b", ELBus.node("c").data("whileData", name2Value))).toEL(true)));
expectedStr = "iteratorData = '{\"name\":\"zhangsan\",\"age\":18}';\n" +
- "ITERATOR(\n\tnode(\"a\")\n).DO(\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t)\n).data(iteratorData)";
+ "ITERATOR(\n\tnode(\"a\")\n).DO(\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\").data(iteratorData)\n\t)\n);";
Assertions.assertEquals(expectedStr,
- ELBus.iteratorOpt("a").doOpt(ELBus.then("b", "c")).data("iteratorData", name2Value).toEL(true));
+ ELBus.iteratorOpt("a").doOpt(ELBus.then("b", ELBus.node("c").data("iteratorData", name2Value))).toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.iteratorOpt("a").doOpt(ELBus.then("b", ELBus.node("c").data("iteratorData", name2Value))).toEL(true)));
}
private static class ParamClass{
private String name;
@@ -237,20 +274,23 @@ public class LoopELBuilderTest extends BaseTest {
name2Value.age = 18;
name2Value.name = "zhangsan";
String expectedStr = "forData = '{\"name\":\"zhangsan\",\"age\":18}';\n" +
- "FOR(node(\"a\")).DO(THEN(node(\"b\"),node(\"c\"))).data(forData)";
+ "FOR(node(\"a\")).DO(THEN(node(\"b\"),node(\"c\").data(forData)));";
Assertions.assertEquals(expectedStr,
- ELBus.forOpt("a").doOpt(ELBus.then("b", "c")).data("forData", name2Value).toEL());
+ ELBus.forOpt("a").doOpt(ELBus.then("b", ELBus.node("c").data("forData", name2Value))).toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.forOpt("a").doOpt(ELBus.then("b", ELBus.node("c").data("forData", name2Value))).toEL()));
expectedStr = "whileData = '{\"name\":\"zhangsan\",\"age\":18}';\n" +
- "WHILE(node(\"a\")).DO(THEN(node(\"b\"),node(\"c\"))).data(whileData)";
+ "WHILE(node(\"a\")).DO(THEN(node(\"b\"),node(\"c\").data(whileData)));";
Assertions.assertEquals(expectedStr,
- ELBus.whileOpt("a").doOpt(ELBus.then("b", "c")).data("whileData", name2Value).toEL());
+ ELBus.whileOpt("a").doOpt(ELBus.then("b", ELBus.node("c").data("whileData", name2Value))).toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.whileOpt("a").doOpt(ELBus.then("b", ELBus.node("c").data("whileData", name2Value))).toEL()));
expectedStr = "iteratorData = '{\"name\":\"zhangsan\",\"age\":18}';\n" +
- "ITERATOR(node(\"a\")).DO(THEN(node(\"b\"),node(\"c\"))).data(iteratorData)";
+ "ITERATOR(node(\"a\")).DO(THEN(node(\"b\"),node(\"c\").data(iteratorData)));";
Assertions.assertEquals(expectedStr,
- ELBus.iteratorOpt("a").doOpt(ELBus.then("b", "c")).data("iteratorData", name2Value).toEL());
+ ELBus.iteratorOpt("a").doOpt(ELBus.then("b", ELBus.node("c").data("iteratorData", name2Value))).toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.iteratorOpt("a").doOpt(ELBus.then("b", ELBus.node("c").data("iteratorData", name2Value))).toEL()));
}
@Test
@@ -259,20 +299,23 @@ public class LoopELBuilderTest extends BaseTest {
name2Value.age = 18;
name2Value.name = "zhangsan";
String expectedStr = "forData = '{\"name\":\"zhangsan\",\"age\":18}';\n" +
- "FOR(\n\tnode(\"a\")\n).DO(\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t)\n).data(forData)";
+ "FOR(\n\tnode(\"a\")\n).DO(\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\").data(forData)\n\t)\n);";
Assertions.assertEquals(expectedStr,
- ELBus.forOpt("a").doOpt(ELBus.then("b", "c")).data("forData", name2Value).toEL(true));
+ ELBus.forOpt("a").doOpt(ELBus.then("b", ELBus.node("c").data("forData", name2Value))).toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.forOpt("a").doOpt(ELBus.then("b", ELBus.node("c").data("forData", name2Value))).toEL(true)));
expectedStr = "whileData = '{\"name\":\"zhangsan\",\"age\":18}';\n" +
- "WHILE(\n\tnode(\"a\")\n).DO(\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t)\n).data(whileData)";
+ "WHILE(\n\tnode(\"a\")\n).DO(\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\").data(whileData)\n\t)\n);";
Assertions.assertEquals(expectedStr,
- ELBus.whileOpt("a").doOpt(ELBus.then("b", "c")).data("whileData", name2Value).toEL(true));
+ ELBus.whileOpt("a").doOpt(ELBus.then("b", ELBus.node("c").data("whileData", name2Value))).toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.whileOpt("a").doOpt(ELBus.then("b", ELBus.node("c").data("whileData", name2Value))).toEL(true)));
expectedStr = "iteratorData = '{\"name\":\"zhangsan\",\"age\":18}';\n" +
- "ITERATOR(\n\tnode(\"a\")\n).DO(\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t)\n).data(iteratorData)";
+ "ITERATOR(\n\tnode(\"a\")\n).DO(\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\").data(iteratorData)\n\t)\n);";
Assertions.assertEquals(expectedStr,
- ELBus.iteratorOpt("a").doOpt(ELBus.then("b", "c")).data("iteratorData", name2Value).toEL(true));
+ ELBus.iteratorOpt("a").doOpt(ELBus.then("b", ELBus.node("c").data("iteratorData", name2Value))).toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.iteratorOpt("a").doOpt(ELBus.then("b", ELBus.node("c").data("iteratorData", name2Value))).toEL(true)));
}
}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/NodeELBuilderTest.java b/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/NodeELBuilderTest.java
index abbd7e004..b4446a503 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/NodeELBuilderTest.java
+++ b/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/NodeELBuilderTest.java
@@ -1,6 +1,7 @@
package com.yomahub.liteflow.test.builder;
import com.yomahub.liteflow.builder.el.ELBus;
+import com.yomahub.liteflow.builder.el.LiteFlowChainELBuilder;
import com.yomahub.liteflow.builder.el.NodeELWrapper;
import com.yomahub.liteflow.test.BaseTest;
import org.junit.jupiter.api.Assertions;
@@ -22,47 +23,51 @@ import java.util.Map;
public class NodeELBuilderTest extends BaseTest {
@Test
public void testNodeEL1(){
- String jsonStr = "{\"name\":\"zhangsan\",\"age\":18}";
- String expectedStr = "nodeData = '{\"name\":\"zhangsan\",\"age\":18}'\n" +
- "node(\"a\").tag(\"node a tag\").data(nodeData).maxWaitSeconds(4)";
+ String jsonStr = "'{\"name\":\"zhangsan\",\"age\":18}'";
+ String expectedStr = "nodeData = '{\"name\":\"zhangsan\",\"age\":18}';\n" +
+ "node(\"a\").tag(\"node a tag\").data(nodeData).maxWaitSeconds(4);";
NodeELWrapper node = ELBus.node("a").maxWaitSeconds(4).tag("node a tag").data("nodeData", jsonStr);
Assertions.assertEquals(expectedStr,
node.toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(node.toEL()));
}
@Test
public void testNodeEL2(){
- String jsonStr = "{\"name\":\"zhangsan\",\"age\":18}";
- String expectedStr = "nodeData = '{\"name\":\"zhangsan\",\"age\":18}'\n" +
- "node(\"a\").tag(\"node a tag\").data(nodeData).maxWaitSeconds(4)";
+ String jsonStr = "'{\"name\":\"zhangsan\",\"age\":18}'";
+ String expectedStr = "nodeData = '{\"name\":\"zhangsan\",\"age\":18}';\n" +
+ "node(\"a\").tag(\"node a tag\").data(nodeData).maxWaitSeconds(4);";
NodeELWrapper node = ELBus.node("a").maxWaitSeconds(4).tag("node a tag").data("nodeData", jsonStr);
Assertions.assertEquals(expectedStr,
node.toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(node.toEL(true)));
}
@Test
public void testNodeEL3(){
Map name2Value = new HashMap<>();
name2Value.put("name", "zhangsan");
name2Value.put("age", 18);
- String expectedStr = "nodeData = '{\"name\":\"zhangsan\",\"age\":18}'\n" +
- "node(\"a\").tag(\"node a tag\").data(nodeData).maxWaitSeconds(4)";
+ String expectedStr = "nodeData = '{\"name\":\"zhangsan\",\"age\":18}';\n" +
+ "node(\"a\").tag(\"node a tag\").data(nodeData).maxWaitSeconds(4);";
NodeELWrapper node = ELBus.node("a").maxWaitSeconds(4).tag("node a tag").data("nodeData", name2Value);
Assertions.assertEquals(expectedStr,
node.toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(node.toEL()));
}
@Test
public void testNodeEL4(){
Map name2Value = new HashMap<>();
name2Value.put("name", "zhangsan");
name2Value.put("age", 18);
- String expectedStr = "nodeData = '{\"name\":\"zhangsan\",\"age\":18}'\n" +
- "node(\"a\").tag(\"node a tag\").data(nodeData).maxWaitSeconds(4)";
+ String expectedStr = "nodeData = '{\"name\":\"zhangsan\",\"age\":18}';\n" +
+ "node(\"a\").tag(\"node a tag\").data(nodeData).maxWaitSeconds(4);";
NodeELWrapper node = ELBus.node("a").maxWaitSeconds(4).tag("node a tag").data("nodeData", name2Value);
Assertions.assertEquals(expectedStr,
node.toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(node.toEL(true)));
}
private static class ParamClass{
private String name;
@@ -79,23 +84,25 @@ public class NodeELBuilderTest extends BaseTest {
ParamClass name2Value = new ParamClass();
name2Value.age = 18;
name2Value.name = "zhangsan";
- String expectedStr = "nodeData = '{\"name\":\"zhangsan\",\"age\":18}'\n" +
- "node(\"a\").tag(\"node a tag\").data(nodeData).maxWaitSeconds(4)";
+ String expectedStr = "nodeData = '{\"name\":\"zhangsan\",\"age\":18}';\n" +
+ "node(\"a\").tag(\"node a tag\").data(nodeData).maxWaitSeconds(4);";
NodeELWrapper node = ELBus.node("a").maxWaitSeconds(4).tag("node a tag").data("nodeData", name2Value);
Assertions.assertEquals(expectedStr,
node.toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(node.toEL()));
}
@Test
public void testNodeEL6(){
ParamClass name2Value = new ParamClass();
name2Value.age = 18;
name2Value.name = "zhangsan";
- String expectedStr = "nodeData = '{\"name\":\"zhangsan\",\"age\":18}'\n" +
- "node(\"a\").tag(\"node a tag\").data(nodeData).maxWaitSeconds(4)";
+ String expectedStr = "nodeData = '{\"name\":\"zhangsan\",\"age\":18}';\n" +
+ "node(\"a\").tag(\"node a tag\").data(nodeData).maxWaitSeconds(4);";
NodeELWrapper node = ELBus.node("a").maxWaitSeconds(4).tag("node a tag").data("nodeData", name2Value);
Assertions.assertEquals(expectedStr,
node.toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(node.toEL(true)));
}
}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/SwitchELBuilderTest.java b/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/SwitchELBuilderTest.java
index 82c85c92c..6a6525516 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/SwitchELBuilderTest.java
+++ b/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/SwitchELBuilderTest.java
@@ -1,6 +1,7 @@
package com.yomahub.liteflow.test.builder;
import com.yomahub.liteflow.builder.el.ELBus;
+import com.yomahub.liteflow.builder.el.LiteFlowChainELBuilder;
import com.yomahub.liteflow.test.BaseTest;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@@ -23,55 +24,61 @@ public class SwitchELBuilderTest extends BaseTest {
// Switch调用方法测试
@Test
public void testSwitch1(){
- String expectedStr = "SWITCH(node(\"a\")).TO(node(\"b\"),node(\"c\"),node(\"d\")).DEFAULT(node(\"f\"))";
+ String expectedStr = "SWITCH(node(\"a\")).TO(node(\"b\"),node(\"c\"),node(\"d\")).DEFAULT(node(\"f\"));";
Assertions.assertEquals(expectedStr,
ELBus.switchOpt("a").to("b", "c", "d").defaultOpt("f").toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.switchOpt("a").to("b", "c", "d").defaultOpt("f").toEL()));
}
// 格式化输出测试
@Test
public void testSwitch2(){
- String expectedStr = "SWITCH(node(\"a\")).TO(\n\tnode(\"b\"),\n\tnode(\"c\"),\n\tnode(\"d\")\n).DEFAULT(\n\tnode(\"f\")\n)";
+ String expectedStr = "SWITCH(node(\"a\")).TO(\n\tnode(\"b\"),\n\tnode(\"c\"),\n\tnode(\"d\")\n).DEFAULT(\n\tnode(\"f\")\n);";
Assertions.assertEquals(expectedStr,
ELBus.switchOpt("a").to("b", "c", "d").defaultOpt("f").toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.switchOpt("a").to("b", "c", "d").defaultOpt("f").toEL(true)));
}
// switch和THEN when嵌套调用测试
@Test
public void testSwitch3(){
- String expectedStr = "SWITCH(node(\"a\")).TO(node(\"b\"),THEN(node(\"c\"),node(\"d\")),WHEN(node(\"e\"),node(\"f\"))).DEFAULT(THEN(node(\"g\"),node(\"h\")))";
+ String expectedStr = "SWITCH(node(\"a\")).TO(node(\"b\"),THEN(node(\"c\"),node(\"d\")),WHEN(node(\"e\"),node(\"f\"))).DEFAULT(THEN(node(\"g\"),node(\"h\")));";
Assertions.assertEquals(expectedStr,
ELBus.switchOpt("a").to("b", ELBus.then("c", "d"), ELBus.when("e", "f")).defaultOpt(ELBus.then("g", "h")).toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.switchOpt("a").to("b", ELBus.then("c", "d"), ELBus.when("e", "f")).defaultOpt(ELBus.then("g", "h")).toEL()));
}
// 格式化输出测试
@Test
public void testSwitch4(){
- String expectedStr = "SWITCH(node(\"a\")).TO(\n\tnode(\"b\"),\n\tTHEN(\n\t\tnode(\"c\"),\n\t\tnode(\"d\")\n\t),\n\tWHEN(\n\t\tnode(\"e\"),\n\t\tnode(\"f\")\n\t)\n).DEFAULT(\n\tTHEN(\n\t\tnode(\"g\"),\n\t\tnode(\"h\")\n\t)\n)";
+ String expectedStr = "SWITCH(node(\"a\")).TO(\n\tnode(\"b\"),\n\tTHEN(\n\t\tnode(\"c\"),\n\t\tnode(\"d\")\n\t),\n\tWHEN(\n\t\tnode(\"e\"),\n\t\tnode(\"f\")\n\t)\n).DEFAULT(\n\tTHEN(\n\t\tnode(\"g\"),\n\t\tnode(\"h\")\n\t)\n);";
Assertions.assertEquals(expectedStr,
ELBus.switchOpt("a").to("b", ELBus.then("c", "d"), ELBus.when("e", "f")).defaultOpt(ELBus.then("g", "h")).toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.switchOpt("a").to("b", ELBus.then("c", "d"), ELBus.when("e", "f")).defaultOpt(ELBus.then("g", "h")).toEL(true)));
}
// 属性设置测试
@Test
public void testSwitch5(){
- String expectedStr = "SWITCH(node(\"a\")).TO(node(\"b\"),node(\"c\"),node(\"d\")).id(\"this is a id\").tag(\"this is a tag\").maxWaitSeconds(5)";
+ String expectedStr = "SWITCH(node(\"a\")).TO(node(\"b\"),node(\"c\"),node(\"d\")).id(\"this is a id\").tag(\"this is a tag\").maxWaitSeconds(5);";
Assertions.assertEquals(expectedStr,
ELBus.switchOpt("a").to("b", "c", "d").id("this is a id").tag("this is a tag").maxWaitSeconds(5).toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.switchOpt("a").to("b", "c", "d").id("this is a id").tag("this is a tag").maxWaitSeconds(5).toEL()));
}
// 格式化输出测试
@Test
public void testSwitch6(){
- String expectedStr = "SWITCH(node(\"a\")).TO(\n\tnode(\"b\"),\n\tnode(\"c\"),\n\tnode(\"d\")\n).id(\"this is a id\").tag(\"this is a tag\").maxWaitSeconds(5)";
+ String expectedStr = "SWITCH(node(\"a\")).TO(\n\tnode(\"b\"),\n\tnode(\"c\"),\n\tnode(\"d\")\n).id(\"this is a id\").tag(\"this is a tag\").maxWaitSeconds(5);";
Assertions.assertEquals(expectedStr,
ELBus.switchOpt("a").to("b", "c", "d").id("this is a id").tag("this is a tag").maxWaitSeconds(5).toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.switchOpt("a").to("b", "c", "d").id("this is a id").tag("this is a tag").maxWaitSeconds(5).toEL(true)));
}
// data属性测试
@@ -80,10 +87,11 @@ public class SwitchELBuilderTest extends BaseTest {
Map name2Value = new HashMap();
name2Value.put("name", "zhangsan");
name2Value.put("age", 18);
- String expectedStr = "switchData = '{\"name\":\"zhangsan\",\"age\":18}';\nSWITCH(node(\"a\")).TO(node(\"b\"),node(\"c\"),node(\"d\")).data(switchData)";
+ String expectedStr = "switchData = '{\"name\":\"zhangsan\",\"age\":18}';\nSWITCH(node(\"a\")).TO(node(\"b\"),node(\"c\"),node(\"d\").data(switchData));";
Assertions.assertEquals(expectedStr,
- ELBus.switchOpt("a").to("b", "c", "d").data("switchData", name2Value).toEL());
+ ELBus.switchOpt("a").to("b", "c", ELBus.node("d").data("switchData", name2Value)).toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.switchOpt("a").to("b", "c",ELBus.node("d").data("switchData", name2Value)).toEL()));
}
@Test
@@ -91,28 +99,31 @@ public class SwitchELBuilderTest extends BaseTest {
Map name2Value = new HashMap();
name2Value.put("name", "zhangsan");
name2Value.put("age", 18);
- String expectedStr = "switchData = '{\"name\":\"zhangsan\",\"age\":18}';\nSWITCH(node(\"a\")).TO(\n\tnode(\"b\"),\n\tnode(\"c\"),\n\tnode(\"d\")\n).data(switchData)";
+ String expectedStr = "switchData = '{\"name\":\"zhangsan\",\"age\":18}';\nSWITCH(node(\"a\")).TO(\n\tnode(\"b\"),\n\tnode(\"c\"),\n\tnode(\"d\").data(switchData)\n);";
Assertions.assertEquals(expectedStr,
- ELBus.switchOpt("a").to("b", "c", "d").data("switchData", name2Value).toEL(true));
+ ELBus.switchOpt("a").to("b", "c", ELBus.node("d").data("switchData", name2Value)).toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.switchOpt("a").to("b", "c", ELBus.node("d").data("switchData", name2Value)).toEL(true)));
}
@Test
public void testSwitch9(){
- String jsonStr = "{\"name\":\"zhangsan\",\"age\":18}";
- String expectedStr = "switchData = '{\"name\":\"zhangsan\",\"age\":18}';\nSWITCH(node(\"a\")).TO(node(\"b\"),node(\"c\"),node(\"d\")).data(switchData)";
+ String jsonStr = "'{\"name\":\"zhangsan\",\"age\":18}'";
+ String expectedStr = "switchData = '{\"name\":\"zhangsan\",\"age\":18}';\nSWITCH(node(\"a\")).TO(node(\"b\"),node(\"c\"),node(\"d\").data(switchData));";
Assertions.assertEquals(expectedStr,
- ELBus.switchOpt("a").to("b", "c", "d").data("switchData", jsonStr).toEL());
+ ELBus.switchOpt("a").to("b", "c", ELBus.node("d").data("switchData", jsonStr)).toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.switchOpt("a").to("b", "c", ELBus.node("d").data("switchData", jsonStr)).toEL()));
}
@Test
public void testSwitch10(){
- String jsonStr = "{\"name\":\"zhangsan\",\"age\":18}";
- String expectedStr = "switchData = '{\"name\":\"zhangsan\",\"age\":18}';\nSWITCH(node(\"a\")).TO(\n\tnode(\"b\"),\n\tnode(\"c\"),\n\tnode(\"d\")\n).data(switchData)";
+ String jsonStr = "'{\"name\":\"zhangsan\",\"age\":18}'";
+ String expectedStr = "switchData = '{\"name\":\"zhangsan\",\"age\":18}';\nSWITCH(node(\"a\")).TO(\n\tnode(\"b\"),\n\tnode(\"c\"),\n\tnode(\"d\").data(switchData)\n);";
Assertions.assertEquals(expectedStr,
- ELBus.switchOpt("a").to("b", "c", "d").data("switchData", jsonStr).toEL(true));
+ ELBus.switchOpt("a").to("b", "c", ELBus.node("d").data("switchData", jsonStr)).toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.switchOpt("a").to("b", "c", ELBus.node("d").data("switchData", jsonStr)).toEL(true)));
}
private static class ParamClass{
@@ -131,10 +142,11 @@ public class SwitchELBuilderTest extends BaseTest {
ParamClass name2Value = new ParamClass();
name2Value.name = "zhangsan";
name2Value.age = 18;
- String expectedStr = "switchData = '{\"name\":\"zhangsan\",\"age\":18}';\nSWITCH(node(\"a\")).TO(node(\"b\"),node(\"c\"),node(\"d\")).data(switchData)";
+ String expectedStr = "switchData = '{\"name\":\"zhangsan\",\"age\":18}';\nSWITCH(node(\"a\")).TO(node(\"b\"),node(\"c\"),node(\"d\").data(switchData));";
Assertions.assertEquals(expectedStr,
- ELBus.switchOpt("a").to("b", "c", "d").data("switchData", name2Value).toEL());
+ ELBus.switchOpt("a").to("b", "c", ELBus.node("d").data("switchData", name2Value)).toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.switchOpt("a").to("b", "c", ELBus.node("d").data("switchData", name2Value)).toEL()));
}
@Test
@@ -142,10 +154,11 @@ public class SwitchELBuilderTest extends BaseTest {
ParamClass name2Value = new ParamClass();
name2Value.name = "zhangsan";
name2Value.age = 18;
- String expectedStr = "switchData = '{\"name\":\"zhangsan\",\"age\":18}';\nSWITCH(node(\"a\")).TO(\n\tnode(\"b\"),\n\tnode(\"c\"),\n\tnode(\"d\")\n).data(switchData)";
+ String expectedStr = "switchData = '{\"name\":\"zhangsan\",\"age\":18}';\nSWITCH(node(\"a\")).TO(\n\tnode(\"b\"),\n\tnode(\"c\"),\n\tnode(\"d\").data(switchData)\n);";
Assertions.assertEquals(expectedStr,
- ELBus.switchOpt("a").to("b", "c", "d").data("switchData", name2Value).toEL(true));
+ ELBus.switchOpt("a").to("b", "c", ELBus.node("d").data("switchData", name2Value)).toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.switchOpt("a").to("b", "c", ELBus.node("d").data("switchData", name2Value)).toEL(true)));
}
}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/TestContext.java b/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/TestContext.java
new file mode 100644
index 000000000..90a7c4fb8
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/TestContext.java
@@ -0,0 +1,25 @@
+package com.yomahub.liteflow.test.builder;
+
+import cn.hutool.core.collection.ConcurrentHashSet;
+
+import java.util.Set;
+
+/**
+ * EL表达式装配并执行测试
+ *
+ * @author gezuao
+ * @since 2.11.1
+ */
+public class TestContext {
+
+ private Set set = new ConcurrentHashSet<>();
+
+ public void add2Set(String str) {
+ set.add(str);
+ }
+
+ public Set getSet() {
+ return set;
+ }
+
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/ThenELBuilderTest.java b/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/ThenELBuilderTest.java
index 8c347bf18..89cd92dfb 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/ThenELBuilderTest.java
+++ b/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/ThenELBuilderTest.java
@@ -1,6 +1,7 @@
package com.yomahub.liteflow.test.builder;
import com.yomahub.liteflow.builder.el.ELBus;
+import com.yomahub.liteflow.builder.el.LiteFlowChainELBuilder;
import com.yomahub.liteflow.test.BaseTest;
import com.yomahub.liteflow.util.JsonUtil;
import org.junit.jupiter.api.Assertions;
@@ -24,87 +25,99 @@ public class ThenELBuilderTest extends BaseTest {
// then组件测试
@Test
public void testThen1(){
- Assertions.assertEquals("THEN(node(\"a\"),node(\"b\"))",
+ Assertions.assertEquals("THEN(node(\"a\"),node(\"b\"));",
ELBus.then("a", "b").toEL());
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.then("a", "b").toEL()));
}
// 格式化输出测试
@Test
public void testThen2(){
Assertions.assertEquals("THEN(\n\tnode(\"a\")," +
- "\n\tnode(\"b\")\n)",
+ "\n\tnode(\"b\")\n);",
ELBus.then("a", "b").toEL(true));
System.out.println("THEN(\n\tnode(\"a\")," +
- "\n\tnode(\"b\")\n)");
+ "\n\tnode(\"b\")\n);");
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.then("a", "b").toEL(true)));
}
// then组件then方法调用测试
@Test
public void testThen3(){
- Assertions.assertEquals("THEN(node(\"a\"),node(\"b\"),node(\"c\"))",
+ Assertions.assertEquals("THEN(node(\"a\"),node(\"b\"),node(\"c\"));",
ELBus.then("a", "b").then("c").toEL());
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.then("a", "b").then("c").toEL()));
}
// 格式化输出测试
@Test
public void testThen4(){
Assertions.assertEquals("THEN(\n\tnode(\"a\"),\n\tnode(\"b\")," +
- "\n\tnode(\"c\")\n)",
+ "\n\tnode(\"c\")\n);",
ELBus.then("a", "b").then("c").toEL(true));
System.out.println("THEN(\n\tnode(\"a\"),\n\tnode(\"b\")," +
- "\n\tnode(\"c\")\n)");
+ "\n\tnode(\"c\")\n);");
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.then("a", "b").then("c").toEL(true)));
}
// then组件嵌套调用测试
@Test
public void testThen5(){
- Assertions.assertEquals("THEN(node(\"a\"),THEN(node(\"b\"),node(\"c\")),node(\"d\"))",
+ Assertions.assertEquals("THEN(node(\"a\"),THEN(node(\"b\"),node(\"c\")),node(\"d\"));",
ELBus.then("a", ELBus.then("b").then("c")).then("d").toEL());
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.then("a", ELBus.then("b").then("c")).then("d").toEL()));
}
// 格式化输出测试
@Test
public void testThen6(){
- Assertions.assertEquals("THEN(\n\tnode(\"a\"),\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t),\n\tnode(\"d\")\n)",
+ Assertions.assertEquals("THEN(\n\tnode(\"a\"),\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t),\n\tnode(\"d\")\n);",
ELBus.then("a", ELBus.then("b").then("c")).then("d").toEL(true));
- System.out.println("THEN(\n\tnode(\"a\"),\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t),\n\tnode(\"d\")\n)");
+ System.out.println("THEN(\n\tnode(\"a\"),\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t),\n\tnode(\"d\")\n);");
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.then("a", ELBus.then("b").then("c")).then("d").toEL(true)));
}
// pre组件测试
@Test
public void testThen7(){
- Assertions.assertEquals("THEN(PRE(node(\"p\")),PRE(node(\"pp\")),node(\"a\"),THEN(node(\"b\"),node(\"c\")),node(\"d\"))",
+ Assertions.assertEquals("THEN(PRE(node(\"p\")),PRE(node(\"pp\")),node(\"a\"),THEN(node(\"b\"),node(\"c\")),node(\"d\"));",
ELBus.then("a", ELBus.then("b").then("c")).then("d").pre("p").pre("pp").toEL());
- System.out.println("THEN(PRE(node(\"p\")),PRE(node(\"pp\")),node(\"a\"),THEN(node(\"b\"),node(\"c\")),node(\"d\"))");
+ System.out.println("THEN(PRE(node(\"p\")),PRE(node(\"pp\")),node(\"a\"),THEN(node(\"b\"),node(\"c\")),node(\"d\"));");
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.then("a", ELBus.then("b").then("c")).then("d").pre("p").pre("pp").toEL()));
}
// 格式化输出测试
@Test
public void testThen8(){
- Assertions.assertEquals("THEN(\n\tPRE(\n\t\tnode(\"p\")\n\t),\n\tPRE(\n\t\tnode(\"pp\")\n\t),\n\tnode(\"a\"),\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t),\n\tnode(\"d\")\n)",
+ Assertions.assertEquals("THEN(\n\tPRE(\n\t\tnode(\"p\")\n\t),\n\tPRE(\n\t\tnode(\"pp\")\n\t),\n\tnode(\"a\"),\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t),\n\tnode(\"d\")\n);",
ELBus.then("a", ELBus.then("b").then("c")).then("d").pre("p").pre("pp").toEL(true));
- System.out.println("THEN(\n\tPRE(\n\t\tnode(\"p\")\n\t),\n\tPRE(\n\t\tnode(\"pp\")\n\t),\n\tnode(\"a\"),\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t),\n\tnode(\"d\")\n)");
+ System.out.println("THEN(\n\tPRE(\n\t\tnode(\"p\")\n\t),\n\tPRE(\n\t\tnode(\"pp\")\n\t),\n\tnode(\"a\"),\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t),\n\tnode(\"d\")\n);");
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.then("a", ELBus.then("b").then("c")).then("d").pre("p").pre("pp").toEL(true)));
}
// pre finally 格式测试
@Test
public void testThen9(){
- Assertions.assertEquals("THEN(PRE(node(\"p\")),node(\"a\"),THEN(node(\"b\"),node(\"c\")),node(\"d\"),FINALLY(node(\"f\")))",
+ Assertions.assertEquals("THEN(PRE(node(\"p\")),node(\"a\"),THEN(node(\"b\"),node(\"c\")),node(\"d\"),FINALLY(node(\"f\")));",
ELBus.then("a", ELBus.then("b").then("c")).then("d").pre("p").finallyOpt("f").toEL());
- System.out.println("THEN(PRE(node(\"p\")),node(\"a\"),THEN(node(\"b\"),node(\"c\")),node(\"d\"),FINALLY(node(\"f\")))");
+ System.out.println("THEN(PRE(node(\"p\")),node(\"a\"),THEN(node(\"b\"),node(\"c\")),node(\"d\"),FINALLY(node(\"f\")));");
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.then("a", ELBus.then("b").then("c")).then("d").pre("p").finallyOpt("f").toEL()));
}
// 格式化输出测试
@Test
public void testThen10(){
- Assertions.assertEquals("THEN(\n\tPRE(\n\t\tnode(\"p\")\n\t),\n\tnode(\"a\"),\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t),\n\tnode(\"d\"),\n\tFINALLY(\n\t\tnode(\"f\")\n\t)\n)",
+ Assertions.assertEquals("THEN(\n\tPRE(\n\t\tnode(\"p\")\n\t),\n\tnode(\"a\"),\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t),\n\tnode(\"d\"),\n\tFINALLY(\n\t\tnode(\"f\")\n\t)\n);",
ELBus.then("a", ELBus.then("b").then("c")).then("d").pre("p").finallyOpt("f").toEL(true));
- System.out.println("THEN(\n\tPRE(\n\t\tnode(\"p\")\n\t),\n\tnode(\"a\"),\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t),\n\tnode(\"d\"),\n\tFINALLY(\n\t\tnode(\"f\")\n\t)\n)");
+ System.out.println("THEN(\n\tPRE(\n\t\tnode(\"p\")\n\t),\n\tnode(\"a\"),\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t),\n\tnode(\"d\"),\n\tFINALLY(\n\t\tnode(\"f\")\n\t)\n);");
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.then("a", ELBus.then("b").then("c")).then("d").pre("p").finallyOpt("f").toEL(true)));
}
// 属性设置测试
@Test
public void testThen11(){
- Assertions.assertEquals("THEN(PRE(node(\"p\")),node(\"a\"),THEN(node(\"b\"),node(\"c\")).id(\"this is a id\"),node(\"d\"),FINALLY(node(\"f\"))).tag(\"this is a tag\")",
+ Assertions.assertEquals("THEN(PRE(node(\"p\")),node(\"a\"),THEN(node(\"b\"),node(\"c\")).id(\"this is a id\"),node(\"d\"),FINALLY(node(\"f\"))).tag(\"this is a tag\");",
ELBus.then("a", ELBus.then("b").then("c").id("this is a id")).tag("this is a tag").then("d").pre("p").finallyOpt("f").toEL());
- System.out.println("THEN(PRE(node(\"p\")),node(\"a\"),THEN(node(\"b\"),node(\"c\")).id(\"this is a id\"),node(\"d\"),FINALLY(node(\"f\"))).tag(\"this is a tag\")");
+ System.out.println("THEN(PRE(node(\"p\")),node(\"a\"),THEN(node(\"b\"),node(\"c\")).id(\"this is a id\"),node(\"d\"),FINALLY(node(\"f\"))).tag(\"this is a tag\");");
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.then("a", ELBus.then("b").then("c").id("this is a id")).tag("this is a tag").then("d").pre("p").finallyOpt("f").toEL()));
}
// 格式化输出测试
@Test
public void testThen12(){
- Assertions.assertEquals("THEN(\n\tPRE(\n\t\tnode(\"p\")\n\t),\n\tnode(\"a\"),\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t).id(\"this is a id\"),\n\tnode(\"d\"),\n\tFINALLY(\n\t\tnode(\"f\")\n\t)\n).tag(\"this is a tag\")",
+ Assertions.assertEquals("THEN(\n\tPRE(\n\t\tnode(\"p\")\n\t),\n\tnode(\"a\"),\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t).id(\"this is a id\"),\n\tnode(\"d\"),\n\tFINALLY(\n\t\tnode(\"f\")\n\t)\n).tag(\"this is a tag\");",
ELBus.then("a", ELBus.then("b").then("c").id("this is a id")).tag("this is a tag").then("d").pre("p").finallyOpt("f").toEL(true));
- System.out.println("THEN(\n\tPRE(\n\t\tnode(\"p\")\n\t),\n\tnode(\"a\"),\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t).id(\"this is a id\"),\n\tnode(\"d\"),\n\tFINALLY(\n\t\tnode(\"f\")\n\t)\n).tag(\"this is a tag\")");
+ System.out.println("THEN(\n\tPRE(\n\t\tnode(\"p\")\n\t),\n\tnode(\"a\"),\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t).id(\"this is a id\"),\n\tnode(\"d\"),\n\tFINALLY(\n\t\tnode(\"f\")\n\t)\n).tag(\"this is a tag\");");
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.then("a", ELBus.then("b").then("c").id("this is a id")).tag("this is a tag").then("d").pre("p").finallyOpt("f").toEL(true)));
}
// data属性测试
@Test
@@ -113,9 +126,10 @@ public class ThenELBuilderTest extends BaseTest {
name2Value.put("name", "zhangsan");
name2Value.put("age", 18);
System.out.println(JsonUtil.toJsonString(name2Value));
- Assertions.assertEquals("thenData = '{\"name\":\"zhangsan\",\"age\":18}';\nTHEN(PRE(node(\"p\")),node(\"a\"),THEN(node(\"b\"),node(\"c\")).id(\"this is a id\"),node(\"d\"),FINALLY(node(\"f\"))).tag(\"this is a tag\").data(thenData)",
- ELBus.then("a", ELBus.then("b").then("c").id("this is a id")).tag("this is a tag").then("d").data("thenData", name2Value).pre("p").finallyOpt("f").toEL());
- System.out.println("thenData = '{\"name\":\"zhangsan\",\"age\":18}';\nTHEN(PRE(node(\"p\")),node(\"a\"),THEN(node(\"b\"),node(\"c\")).id(\"this is a id\"),node(\"d\"),FINALLY(node(\"f\"))).tag(\"this is a tag\").data(thenData)");
+ Assertions.assertEquals("thenData = '{\"name\":\"zhangsan\",\"age\":18}';\nTHEN(PRE(node(\"p\")),node(\"a\"),THEN(node(\"b\"),node(\"c\")).id(\"this is a id\"),node(\"d\").data(thenData),FINALLY(node(\"f\"))).tag(\"this is a tag\");",
+ ELBus.then("a", ELBus.then("b").then("c").id("this is a id")).tag("this is a tag").then(ELBus.node("d").data("thenData", name2Value)).pre("p").finallyOpt("f").toEL());
+ System.out.println("thenData = '{\"name\":\"zhangsan\",\"age\":18}';\nTHEN(PRE(node(\"p\")),node(\"a\"),THEN(node(\"b\"),node(\"c\")).id(\"this is a id\"),node(\"d\").data(thenData),FINALLY(node(\"f\"))).tag(\"this is a tag\");");
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.then("a", ELBus.then("b").then("c").id("this is a id")).tag("this is a tag").then(ELBus.node("d").data("thenData", name2Value)).pre("p").finallyOpt("f").toEL()));
}
// 格式化输出测试
@Test
@@ -123,23 +137,26 @@ public class ThenELBuilderTest extends BaseTest {
Map name2Value = new HashMap();
name2Value.put("name", "zhangsan");
name2Value.put("age", 18);
- Assertions.assertEquals("thenData = '{\"name\":\"zhangsan\",\"age\":18}';\nTHEN(\n\tPRE(\n\t\tnode(\"p\")\n\t),\n\tnode(\"a\"),\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t).id(\"this is a id\"),\n\tnode(\"d\"),\n\tFINALLY(\n\t\tnode(\"f\")\n\t)\n).tag(\"this is a tag\").data(thenData)",
- ELBus.then("a", ELBus.then("b").then("c").id("this is a id")).tag("this is a tag").then("d").data("thenData", name2Value).pre("p").finallyOpt("f").toEL(true));
- System.out.println("thenData = '{\"name\":\"zhangsan\",\"age\":18}';\nTHEN(\n\tPRE(\n\t\tnode(\"p\")\n\t),\n\tnode(\"a\"),\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t).id(\"this is a id\"),\n\tnode(\"d\"),\n\tFINALLY(\n\t\tnode(\"f\")\n\t)\n).tag(\"this is a tag\").data(thenData)");
+ Assertions.assertEquals("thenData = '{\"name\":\"zhangsan\",\"age\":18}';\nTHEN(\n\tPRE(\n\t\tnode(\"p\")\n\t),\n\tnode(\"a\"),\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t).id(\"this is a id\"),\n\tnode(\"d\").data(thenData),\n\tFINALLY(\n\t\tnode(\"f\")\n\t)\n).tag(\"this is a tag\");",
+ ELBus.then("a", ELBus.then("b").then("c").id("this is a id")).tag("this is a tag").then(ELBus.node("d").data("thenData", name2Value)).pre("p").finallyOpt("f").toEL(true));
+ System.out.println("thenData = '{\"name\":\"zhangsan\",\"age\":18}';\nTHEN(\n\tPRE(\n\t\tnode(\"p\")\n\t),\n\tnode(\"a\"),\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t).id(\"this is a id\"),\n\tnode(\"d\").data(thenData),\n\tFINALLY(\n\t\tnode(\"f\")\n\t)\n).tag(\"this is a tag\");");
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.then("a", ELBus.then("b").then("c").id("this is a id")).tag("this is a tag").then(ELBus.node("d").data("thenData", name2Value)).pre("p").finallyOpt("f").toEL(true)));
}
// data属性测试 Json字符串赋值data
@Test
public void testThen15(){
- Assertions.assertEquals("thenData = '{\"name\":\"zhangsan\",\"age\":18}';\nTHEN(PRE(node(\"p\")),node(\"a\"),THEN(node(\"b\"),node(\"c\")).id(\"this is a id\"),node(\"d\"),FINALLY(node(\"f\"))).tag(\"this is a tag\").data(thenData)",
- ELBus.then("a", ELBus.then("b").then("c").id("this is a id")).tag("this is a tag").then("d").data("thenData", "{\"name\":\"zhangsan\",\"age\":18}").pre("p").finallyOpt("f").toEL());
- System.out.println("thenData = '{\"name\":\"zhangsan\",\"age\":18}';\nTHEN(PRE(node(\"p\")),node(\"a\"),THEN(node(\"b\"),node(\"c\")).id(\"this is a id\"),node(\"d\"),FINALLY(node(\"f\"))).tag(\"this is a tag\").data(thenData)");
+ Assertions.assertEquals("thenData = '{\"name\":\"zhangsan\",\"age\":18}';\nTHEN(PRE(node(\"p\")),node(\"a\"),THEN(node(\"b\"),node(\"c\")).id(\"this is a id\"),node(\"d\").data(thenData),FINALLY(node(\"f\"))).tag(\"this is a tag\");",
+ ELBus.then("a", ELBus.then("b").then("c").id("this is a id")).tag("this is a tag").then(ELBus.node("d").data("thenData", "'{\"name\":\"zhangsan\",\"age\":18}'")).pre("p").finallyOpt("f").toEL());
+ System.out.println("thenData = '{\"name\":\"zhangsan\",\"age\":18}';\nTHEN(PRE(node(\"p\")),node(\"a\"),THEN(node(\"b\"),node(\"c\")).id(\"this is a id\"),node(\"d\").data(thenData),FINALLY(node(\"f\"))).tag(\"this is a tag\");");
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.then("a", ELBus.then("b").then("c").id("this is a id")).tag("this is a tag").then(ELBus.node("d").data("thenData", "'{\"name\":\"zhangsan\",\"age\":18}'")).pre("p").finallyOpt("f").toEL()));
}
// 格式化输出测试 Json字符串赋值data
@Test
public void testThen16(){
- Assertions.assertEquals("thenData = '{\"name\":\"zhangsan\",\"age\":18}';\nTHEN(\n\tPRE(\n\t\tnode(\"p\")\n\t),\n\tnode(\"a\"),\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t).id(\"this is a id\"),\n\tnode(\"d\"),\n\tFINALLY(\n\t\tnode(\"f\")\n\t)\n).tag(\"this is a tag\").data(thenData)",
- ELBus.then("a", ELBus.then("b").then("c").id("this is a id")).tag("this is a tag").then("d").data("thenData", "{\"name\":\"zhangsan\",\"age\":18}").pre("p").finallyOpt("f").toEL(true));
- System.out.println("thenData = '{\"name\":\"zhangsan\",\"age\":18}';\nTHEN(\n\tPRE(\n\t\tnode(\"p\")\n\t),\n\tnode(\"a\"),\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t).id(\"this is a id\"),\n\tnode(\"d\"),\n\tFINALLY(\n\t\tnode(\"f\")\n\t)\n).tag(\"this is a tag\").data(thenData)");
+ Assertions.assertEquals("thenData = '{\"name\":\"zhangsan\",\"age\":18}';\nTHEN(\n\tPRE(\n\t\tnode(\"p\")\n\t),\n\tnode(\"a\"),\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t).id(\"this is a id\"),\n\tnode(\"d\").data(thenData),\n\tFINALLY(\n\t\tnode(\"f\")\n\t)\n).tag(\"this is a tag\");",
+ ELBus.then("a", ELBus.then("b").then("c").id("this is a id")).tag("this is a tag").then(ELBus.node("d").data("thenData", "'{\"name\":\"zhangsan\",\"age\":18}'")).pre("p").finallyOpt("f").toEL(true));
+ System.out.println("thenData = '{\"name\":\"zhangsan\",\"age\":18}';\nTHEN(\n\tPRE(\n\t\tnode(\"p\")\n\t),\n\tnode(\"a\"),\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t).id(\"this is a id\"),\n\tnode(\"d\").data(thenData),\n\tFINALLY(\n\t\tnode(\"f\")\n\t)\n).tag(\"this is a tag\");");
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.then("a", ELBus.then("b").then("c").id("this is a id")).tag("this is a tag").then(ELBus.node("d").data("thenData", "'{\"name\":\"zhangsan\",\"age\":18}'")).pre("p").finallyOpt("f").toEL(true)));
}
private static class ParamClass{
private String name;
@@ -157,9 +174,10 @@ public class ThenELBuilderTest extends BaseTest {
ParamClass name2Value = new ParamClass();
name2Value.name = "zhangsan";
name2Value.age = 18;
- Assertions.assertEquals("thenData = '{\"name\":\"zhangsan\",\"age\":18}';\nTHEN(PRE(node(\"p\")),node(\"a\"),THEN(node(\"b\"),node(\"c\")).id(\"this is a id\"),node(\"d\"),FINALLY(node(\"f\"))).tag(\"this is a tag\").data(thenData)",
- ELBus.then("a", ELBus.then("b").then("c").id("this is a id")).tag("this is a tag").then("d").data("thenData", name2Value).pre("p").finallyOpt("f").toEL());
- System.out.println("thenData = '{\"name\":\"zhangsan\",\"age\":18}';\nTHEN(PRE(node(\"p\")),node(\"a\"),THEN(node(\"b\"),node(\"c\")).id(\"this is a id\"),node(\"d\"),FINALLY(node(\"f\"))).tag(\"this is a tag\").data(thenData)");
+ Assertions.assertEquals("thenData = '{\"name\":\"zhangsan\",\"age\":18}';\nTHEN(PRE(node(\"p\")),node(\"a\"),THEN(node(\"b\"),node(\"c\")).id(\"this is a id\"),node(\"d\").data(thenData),FINALLY(node(\"f\"))).tag(\"this is a tag\");",
+ ELBus.then("a", ELBus.then("b").then("c").id("this is a id")).tag("this is a tag").then(ELBus.node("d").data("thenData", name2Value)).pre("p").finallyOpt("f").toEL());
+ System.out.println("thenData = '{\"name\":\"zhangsan\",\"age\":18}';\nTHEN(PRE(node(\"p\")),node(\"a\"),THEN(node(\"b\"),node(\"c\")).id(\"this is a id\"),node(\"d\").data(thenData),FINALLY(node(\"f\"))).tag(\"this is a tag\");");
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.then("a", ELBus.then("b").then("c").id("this is a id")).tag("this is a tag").then(ELBus.node("d").data("thenData", name2Value)).pre("p").finallyOpt("f").toEL()));
}
// 格式化输出测试
@Test
@@ -167,24 +185,27 @@ public class ThenELBuilderTest extends BaseTest {
ParamClass name2Value = new ParamClass();
name2Value.name = "zhangsan";
name2Value.age = 18;
- Assertions.assertEquals("thenData = '{\"name\":\"zhangsan\",\"age\":18}';\nTHEN(\n\tPRE(\n\t\tnode(\"p\")\n\t),\n\tnode(\"a\"),\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t).id(\"this is a id\"),\n\tnode(\"d\"),\n\tFINALLY(\n\t\tnode(\"f\")\n\t)\n).tag(\"this is a tag\").data(thenData)",
- ELBus.then("a", ELBus.then("b").then("c").id("this is a id")).tag("this is a tag").then("d").data("thenData", name2Value).pre("p").finallyOpt("f").toEL(true));
- System.out.println("thenData = '{\"name\":\"zhangsan\",\"age\":18}';\nTHEN(\n\tPRE(\n\t\tnode(\"p\")\n\t),\n\tnode(\"a\"),\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t).id(\"this is a id\"),\n\tnode(\"d\"),\n\tFINALLY(\n\t\tnode(\"f\")\n\t)\n).tag(\"this is a tag\").data(thenData)");
+ Assertions.assertEquals("thenData = '{\"name\":\"zhangsan\",\"age\":18}';\nTHEN(\n\tPRE(\n\t\tnode(\"p\")\n\t),\n\tnode(\"a\"),\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t).id(\"this is a id\"),\n\tnode(\"d\").data(thenData),\n\tFINALLY(\n\t\tnode(\"f\")\n\t)\n).tag(\"this is a tag\");",
+ ELBus.then("a", ELBus.then("b").then("c").id("this is a id")).tag("this is a tag").then(ELBus.node("d").data("thenData", name2Value)).pre("p").finallyOpt("f").toEL(true));
+ System.out.println("thenData = '{\"name\":\"zhangsan\",\"age\":18}';\nTHEN(\n\tPRE(\n\t\tnode(\"p\")\n\t),\n\tnode(\"a\"),\n\tTHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t).id(\"this is a id\"),\n\tnode(\"d\").data(thenData),\n\tFINALLY(\n\t\tnode(\"f\")\n\t)\n).tag(\"this is a tag\");");
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.then("a", ELBus.then("b").then("c").id("this is a id")).tag("this is a tag").then(ELBus.node("d").data("thenData", name2Value)).pre("p").finallyOpt("f").toEL(true)));
}
// maxWaitSecond测试
@Test
public void testThen19(){
- String expectedStr = "THEN(node(\"a\"),node(\"b\")).maxWaitSeconds(5)";
+ String expectedStr = "THEN(node(\"a\"),node(\"b\")).maxWaitSeconds(5);";
Assertions.assertEquals(expectedStr,
ELBus.then("a").then("b").maxWaitSeconds(5).toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.then("a").then("b").maxWaitSeconds(5).toEL()));
}
// 格式化输出测试
@Test
public void testThen20(){
- String expectedStr = "THEN(\n\tnode(\"a\"),\n\tnode(\"b\")\n).maxWaitSeconds(5)";
+ String expectedStr = "THEN(\n\tnode(\"a\"),\n\tnode(\"b\")\n).maxWaitSeconds(5);";
Assertions.assertEquals(expectedStr,
ELBus.then("a").then("b").maxWaitSeconds(5).toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.then("a").then("b").maxWaitSeconds(5).toEL(true)));
}
}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/WhenELBuilderTest.java b/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/WhenELBuilderTest.java
index 127fceaa4..2208be038 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/WhenELBuilderTest.java
+++ b/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/WhenELBuilderTest.java
@@ -1,6 +1,8 @@
package com.yomahub.liteflow.test.builder;
import com.yomahub.liteflow.builder.el.ELBus;
+import com.yomahub.liteflow.builder.el.LiteFlowChainELBuilder;
+import com.yomahub.liteflow.builder.el.WhenELWrapper;
import com.yomahub.liteflow.test.BaseTest;
import com.yomahub.liteflow.util.JsonUtil;
import org.junit.jupiter.api.Assertions;
@@ -8,6 +10,7 @@ import org.junit.jupiter.api.Test;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
+import javax.annotation.meta.When;
import java.util.HashMap;
import java.util.Map;
@@ -23,95 +26,107 @@ public class WhenELBuilderTest extends BaseTest {
// then组件测试
@Test
public void testWhen1(){
- String expectedStr = "WHEN(node(\"a\"),node(\"b\"))";
+ String expectedStr = "WHEN(node(\"a\"),node(\"b\"));";
Assertions.assertEquals(expectedStr,
ELBus.when("a", "b").toEL());
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.when("a", "b").toEL()));
}
// 格式化输出测试
@Test
public void testWhen2(){
- String expectedStr = "WHEN(\n\tnode(\"a\"),\n\tnode(\"b\")\n)";
+ String expectedStr = "WHEN(\n\tnode(\"a\"),\n\tnode(\"b\")\n);";
Assertions.assertEquals(expectedStr,
ELBus.when("a", "b").toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.when("a", "b").toEL(true)));
}
// then组件then方法调用测试
@Test
public void testWhen3(){
- String expectedStr = "WHEN(node(\"a\"),node(\"b\"),node(\"c\"))";
+ String expectedStr = "WHEN(node(\"a\"),node(\"b\"),node(\"c\"));";
Assertions.assertEquals(expectedStr,
ELBus.when("a", "b").when("c").toEL());
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.when("a", "b").when("c").toEL()));
}
// 格式化输出测试
@Test
public void testWhen4(){
- String expectedStr = "WHEN(\n\tnode(\"a\"),\n\tnode(\"b\"),\n\tnode(\"c\")\n)";
+ String expectedStr = "WHEN(\n\tnode(\"a\"),\n\tnode(\"b\"),\n\tnode(\"c\")\n);";
Assertions.assertEquals(expectedStr,
ELBus.when("a", "b").when("c").toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.when("a", "b").when("c").toEL(true)));
}
// then组件嵌套调用测试
@Test
public void testWhen5(){
- String expectedStr = "WHEN(node(\"a\"),WHEN(node(\"b\"),node(\"c\")),node(\"d\"))";
+ String expectedStr = "WHEN(node(\"a\"),WHEN(node(\"b\"),node(\"c\")),node(\"d\"));";
Assertions.assertEquals(expectedStr,
ELBus.when("a", ELBus.when("b").when("c")).when("d").toEL());
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.when("a", ELBus.when("b").when("c")).when("d").toEL()));
}
// 格式化输出测试
@Test
public void testWhen6(){
- String expectedStr = "WHEN(\n\tnode(\"a\"),\n\tWHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t),\n\tnode(\"d\")\n)";
+ String expectedStr = "WHEN(\n\tnode(\"a\"),\n\tWHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t),\n\tnode(\"d\")\n);";
Assertions.assertEquals(expectedStr,
ELBus.when("a", ELBus.when("b").when("c")).when("d").toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.when("a", ELBus.when("b").when("c")).when("d").toEL(true)));
}
// WHEN特有属性测试 any ignoreError customThreadExecutor must
@Test
public void testWhen7(){
- String expectedStr = "WHEN(node(\"a\"),node(\"b\"),WHEN(node(\"c\"),node(\"d\")).any(true).threadPool(\"WhenELBuilderTest.customThreadPool\").id(\"node1\")).ignoreError(true).must(\"a\", \"task1\", \"node1\")";
+ String expectedStr = "WHEN(node(\"a\"),node(\"b\"),WHEN(node(\"c\"),node(\"d\")).any(true).threadPool(\"com.yomahub.liteflow.test.builder.customTreadExecutor.CustomThreadExecutor1\").id(\"node1\")).ignoreError(true).must(\"a\", \"task1\", \"node1\");";
Assertions.assertEquals(expectedStr,
- ELBus.when("a", "b", ELBus.when("c").when("d").customThreadExecutor("WhenELBuilderTest.customThreadPool").id("node1").any(true)).ignoreError(true).must("a", "task1", "node1").toEL());
+ ELBus.when("a", "b", ELBus.when("c").when("d").id("node1").customThreadExecutor("com.yomahub.liteflow.test.builder.customTreadExecutor.CustomThreadExecutor1").any(true)).ignoreError(true).must("a", "task1", "node1").toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.when("a", "b", ELBus.when("c").when("d").id("node1").customThreadExecutor("com.yomahub.liteflow.test.builder.customTreadExecutor.CustomThreadExecutor1").any(true)).ignoreError(true).must("a", "task1", "node1").toEL()));
}
// 格式化输出测试
@Test
public void testWhen8(){
- String expectedStr = "WHEN(\n\tnode(\"a\"),\n\tnode(\"b\"),\n\tWHEN(\n\t\tnode(\"c\"),\n\t\tnode(\"d\")\n\t).any(true).threadPool(\"WhenELBuilderTest.customThreadPool\").id(\"node1\")\n).ignoreError(true).must(\"a\", \"task1\", \"node1\")";
+ String expectedStr = "WHEN(\n\tnode(\"a\"),\n\tnode(\"b\"),\n\tWHEN(\n\t\tnode(\"c\"),\n\t\tnode(\"d\")\n\t).any(true).threadPool(\"com.yomahub.liteflow.test.builder.customTreadExecutor.CustomThreadExecutor1\").id(\"node1\")\n).ignoreError(true).must(\"a\", \"task1\", \"node1\");";
Assertions.assertEquals(expectedStr,
- ELBus.when("a", "b", ELBus.when("c").when("d").customThreadExecutor("WhenELBuilderTest.customThreadPool").id("node1").any(true)).ignoreError(true).must("a", "task1", "node1").toEL(true));
+ ELBus.when("a", "b", ELBus.when("c").when("d").customThreadExecutor("com.yomahub.liteflow.test.builder.customTreadExecutor.CustomThreadExecutor1").id("node1").any(true)).ignoreError(true).must("a", "task1", "node1").toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.when("a", "b", ELBus.when("c").when("d").customThreadExecutor("com.yomahub.liteflow.test.builder.customTreadExecutor.CustomThreadExecutor1").id("node1").any(true)).ignoreError(true).must("a", "task1", "node1").toEL(true)));
}
// maxWaitSeconds 属性测试
@Test
public void testWhen9(){
- String expectedStr = "WHEN(node(\"a\"),node(\"b\")).maxWaitSeconds(5)";
+ String expectedStr = "WHEN(node(\"a\"),node(\"b\")).maxWaitSeconds(5);";
Assertions.assertEquals(expectedStr,
ELBus.when("a", "b").maxWaitSeconds(5).toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.when("a", "b").maxWaitSeconds(5).toEL()));
}
// 格式化输出测试
@Test
public void testWhen10(){
- String expectedStr = "WHEN(\n\tnode(\"a\"),\n\tnode(\"b\")\n).maxWaitSeconds(5)";
+ String expectedStr = "WHEN(\n\tnode(\"a\"),\n\tnode(\"b\")\n).maxWaitSeconds(5);";
Assertions.assertEquals(expectedStr,
ELBus.when("a", "b").maxWaitSeconds(5).toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.when("a", "b").maxWaitSeconds(5).toEL(true)));
}
// 属性设置测试
@Test
public void testWhen11(){
- String expectedStr = "WHEN(node(\"a\"),WHEN(node(\"b\"),node(\"c\")).id(\"this is a id\"),node(\"d\")).tag(\"this is a tag\")";
+ String expectedStr = "WHEN(node(\"a\"),WHEN(node(\"b\"),node(\"c\")).id(\"this is a id\"),node(\"d\")).tag(\"this is a tag\");";
Assertions.assertEquals(expectedStr,
ELBus.when("a", ELBus.when("b").when("c").id("this is a id")).when("d").tag("this is a tag").toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.when("a", ELBus.when("b").when("c").id("this is a id")).when("d").tag("this is a tag").toEL()));
}
// 格式化输出测试
@Test
public void testWhen12(){
- String expectedStr = "WHEN(\n\tnode(\"a\"),\n\tWHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t).id(\"this is a id\"),\n\tnode(\"d\")\n).tag(\"this is a tag\")";
+ String expectedStr = "WHEN(\n\tnode(\"a\"),\n\tWHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t).id(\"this is a id\"),\n\tnode(\"d\")\n).tag(\"this is a tag\");";
Assertions.assertEquals(expectedStr,
ELBus.when("a", ELBus.when("b").when("c").id("this is a id")).when("d").tag("this is a tag").toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.when("a", ELBus.when("b").when("c").id("this is a id")).when("d").tag("this is a tag").toEL(true)));
}
// data属性测试
@Test
@@ -120,10 +135,11 @@ public class WhenELBuilderTest extends BaseTest {
name2Value.put("name", "zhangsan");
name2Value.put("age", 18);
System.out.println(JsonUtil.toJsonString(name2Value));
- String expectedStr = "whenData = '{\"name\":\"zhangsan\",\"age\":18}';\nWHEN(node(\"a\"),WHEN(node(\"b\"),node(\"c\")).id(\"this is a id\").data(whenData),node(\"d\")).tag(\"this is a tag\")";
+ String expectedStr = "whenData = '{\"name\":\"zhangsan\",\"age\":18}';\nWHEN(node(\"a\"),WHEN(node(\"b\"),node(\"c\").data(whenData)).id(\"this is a id\"),node(\"d\")).tag(\"this is a tag\");";
Assertions.assertEquals(expectedStr,
- ELBus.when("a", ELBus.when("b").when("c").data("whenData", name2Value).id("this is a id")).when("d").tag("this is a tag").toEL(false));
+ ELBus.when("a", ELBus.when("b").when(ELBus.node("c").data("whenData", name2Value)).id("this is a id")).when("d").tag("this is a tag").toEL(false));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.when("a", ELBus.when("b").when(ELBus.node("c").data("whenData", name2Value)).id("this is a id")).when("d").tag("this is a tag").toEL(false)));
}
// 格式化输出测试
@Test
@@ -131,26 +147,29 @@ public class WhenELBuilderTest extends BaseTest {
Map name2Value = new HashMap<>();
name2Value.put("name", "zhangsan");
name2Value.put("age", 18);
- String expectedStr = "whenData = '{\"name\":\"zhangsan\",\"age\":18}';\nWHEN(\n\tnode(\"a\"),\n\tWHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t).id(\"this is a id\").data(whenData),\n\tnode(\"d\")\n).tag(\"this is a tag\")";
+ String expectedStr = "whenData = '{\"name\":\"zhangsan\",\"age\":18}';\nWHEN(\n\tnode(\"a\"),\n\tWHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\").data(whenData)\n\t).id(\"this is a id\"),\n\tnode(\"d\")\n).tag(\"this is a tag\");";
Assertions.assertEquals(expectedStr,
- ELBus.when("a", ELBus.when("b").when("c").data("whenData", name2Value).id("this is a id")).when("d").tag("this is a tag").toEL(true));
+ ELBus.when("a", ELBus.when("b").when(ELBus.node("c").data("whenData", name2Value)).id("this is a id")).when("d").tag("this is a tag").toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.when("a", ELBus.when("b").when(ELBus.node("c").data("whenData", name2Value)).id("this is a id")).when("d").tag("this is a tag").toEL(true)));
}
// data属性测试 Json字符串赋值data
@Test
public void testWhen15(){
- String expectedStr = "whenData = '{\"name\":\"zhangsan\",\"age\":18}';\nWHEN(node(\"a\"),WHEN(node(\"b\"),node(\"c\")).id(\"this is a id\").data(whenData),node(\"d\")).tag(\"this is a tag\")";
+ String expectedStr = "whenData = '{\"name\":\"zhangsan\",\"age\":18}';\nWHEN(node(\"a\"),WHEN(node(\"b\"),node(\"c\").data(whenData)).id(\"this is a id\"),node(\"d\")).tag(\"this is a tag\");";
Assertions.assertEquals(expectedStr,
- ELBus.when("a", ELBus.when("b").when("c").data("whenData", "{\"name\":\"zhangsan\",\"age\":18}").id("this is a id")).when("d").tag("this is a tag").toEL());
+ ELBus.when("a", ELBus.when("b").when(ELBus.node("c").data("whenData", "'{\"name\":\"zhangsan\",\"age\":18}'")).id("this is a id")).when("d").tag("this is a tag").toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.when("a", ELBus.when("b").when(ELBus.node("c").data("whenData", "'{\"name\":\"zhangsan\",\"age\":18}'")).id("this is a id")).when("d").tag("this is a tag").toEL()));
}
// 格式化输出测试 Json字符串赋值data
@Test
public void testWhen16(){
- String expectedStr = "whenData = '{\"name\":\"zhangsan\",\"age\":18}';\nWHEN(\n\tnode(\"a\"),\n\tWHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t).id(\"this is a id\").data(whenData),\n\tnode(\"d\")\n).tag(\"this is a tag\")";
+ String expectedStr = "whenData = '{\"name\":\"zhangsan\",\"age\":18}';\nWHEN(\n\tnode(\"a\"),\n\tWHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\").data(whenData)\n\t).id(\"this is a id\"),\n\tnode(\"d\")\n).tag(\"this is a tag\");";
Assertions.assertEquals(expectedStr,
- ELBus.when("a", ELBus.when("b").when("c").data("whenData", "{\"name\":\"zhangsan\",\"age\":18}").id("this is a id")).when("d").tag("this is a tag").toEL(true));
+ ELBus.when("a", ELBus.when("b").when(ELBus.node("c").data("whenData", "'{\"name\":\"zhangsan\",\"age\":18}'")).id("this is a id")).when("d").tag("this is a tag").toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.when("a", ELBus.when("b").when(ELBus.node("c").data("whenData", "'{\"name\":\"zhangsan\",\"age\":18}'")).id("this is a id")).when("d").tag("this is a tag").toEL(true)));
}
private static class ParamClass{
private String name;
@@ -168,10 +187,11 @@ public class WhenELBuilderTest extends BaseTest {
ParamClass name2Value = new ParamClass();
name2Value.name = "zhangsan";
name2Value.age = 18;
- String expectedStr = "whenData = '{\"name\":\"zhangsan\",\"age\":18}';\nWHEN(node(\"a\"),WHEN(node(\"b\"),node(\"c\")).id(\"this is a id\").data(whenData),node(\"d\")).tag(\"this is a tag\")";
+ String expectedStr = "whenData = '{\"name\":\"zhangsan\",\"age\":18}';\nWHEN(node(\"a\"),WHEN(node(\"b\"),node(\"c\").data(whenData)).id(\"this is a id\"),node(\"d\")).tag(\"this is a tag\");";
Assertions.assertEquals(expectedStr,
- ELBus.when("a", ELBus.when("b").when("c").data("whenData", name2Value).id("this is a id")).when("d").tag("this is a tag").toEL());
+ ELBus.when("a", ELBus.when("b").when(ELBus.node("c").data("whenData", name2Value)).id("this is a id")).when("d").tag("this is a tag").toEL());
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.when("a", ELBus.when("b").when(ELBus.node("c").data("whenData", name2Value)).id("this is a id")).when("d").tag("this is a tag").toEL()));
}
// 格式化输出测试
@Test
@@ -179,9 +199,16 @@ public class WhenELBuilderTest extends BaseTest {
ParamClass name2Value = new ParamClass();
name2Value.name = "zhangsan";
name2Value.age = 18;
- String expectedStr = "whenData = '{\"name\":\"zhangsan\",\"age\":18}';\nWHEN(\n\tnode(\"a\"),\n\tWHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\")\n\t).id(\"this is a id\").data(whenData),\n\tnode(\"d\")\n).tag(\"this is a tag\")";
+ String expectedStr = "whenData = '{\"name\":\"zhangsan\",\"age\":18}';\nWHEN(\n\tnode(\"a\"),\n\tWHEN(\n\t\tnode(\"b\"),\n\t\tnode(\"c\").data(whenData)\n\t).id(\"this is a id\"),\n\tnode(\"d\")\n).tag(\"this is a tag\");";
Assertions.assertEquals(expectedStr,
- ELBus.when("a", ELBus.when("b").when("c").data("whenData", name2Value).id("this is a id")).when("d").tag("this is a tag").toEL(true));
+ ELBus.when("a", ELBus.when("b").when(ELBus.node("c").data("whenData", name2Value)).id("this is a id")).when("d").tag("this is a tag").toEL(true));
System.out.println(expectedStr);
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(ELBus.when("a", ELBus.when("b").when(ELBus.node("c").data("whenData", name2Value)).id("this is a id")).when("d").tag("this is a tag").toEL(true)));
+ }
+
+ @Test
+ public void testWHEN(){
+ WhenELWrapper el = ELBus.when("a", "b", "c").customThreadExecutor("com.yomahub.liteflow.test.builder.customTreadExecutor.CustomThreadExecutor1");
+ Assertions.assertTrue(LiteFlowChainELBuilder.validate(el.toEL()));
}
}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/cmp/ACmp.java b/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/cmp/ACmp.java
new file mode 100644
index 000000000..239f7150a
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/cmp/ACmp.java
@@ -0,0 +1,21 @@
+package com.yomahub.liteflow.test.builder.cmp;
+
+import com.yomahub.liteflow.core.NodeComponent;
+import org.springframework.stereotype.Component;
+
+/**
+ * EL表达式装配并执行测试
+ *
+ * @author gezuao
+ * @since 2.11.1
+ */
+@Component("a")
+public class ACmp extends NodeComponent {
+
+ @Override
+ public void process() {
+ System.out.println(this.getCmpData(String.class));
+ System.out.println("ACmp executed!");
+ }
+
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/cmp/BCmp.java b/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/cmp/BCmp.java
new file mode 100644
index 000000000..39be023de
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/cmp/BCmp.java
@@ -0,0 +1,25 @@
+package com.yomahub.liteflow.test.builder.cmp;
+
+import com.yomahub.liteflow.core.NodeComponent;
+import com.yomahub.liteflow.slot.DefaultContext;
+import com.yomahub.liteflow.test.builder.vo.User;
+import org.springframework.stereotype.Component;
+
+/**
+ * EL表达式装配并执行测试
+ *
+ * @author gezuao
+ * @since 2.11.1
+ */
+@Component("b")
+public class BCmp extends NodeComponent {
+
+ @Override
+ public void process() {
+ User user = this.getCmpData(User.class);
+ DefaultContext context = this.getFirstContextBean();
+ context.setData("user", user);
+ System.out.println("BCmp executed!");
+ }
+
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/cmp/CCmp.java b/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/cmp/CCmp.java
new file mode 100644
index 000000000..5f2434285
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/cmp/CCmp.java
@@ -0,0 +1,24 @@
+package com.yomahub.liteflow.test.builder.cmp;
+
+import com.yomahub.liteflow.core.NodeComponent;
+import com.yomahub.liteflow.test.builder.TestContext;
+import org.springframework.stereotype.Component;
+
+/**
+ * EL表达式装配并执行测试
+ *
+ * @author gezuao
+ * @since 2.11.1
+ */
+@Component("c")
+public class CCmp extends NodeComponent {
+
+ @Override
+ public void process() {
+ String data = this.getCmpData(String.class);
+ TestContext context = this.getFirstContextBean();
+ context.add2Set(data);
+ System.out.println("CCmp executed!");
+ }
+
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/customTreadExecutor/CustomThreadExecutor1.java b/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/customTreadExecutor/CustomThreadExecutor1.java
new file mode 100644
index 000000000..4a4d95409
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/customTreadExecutor/CustomThreadExecutor1.java
@@ -0,0 +1,29 @@
+package com.yomahub.liteflow.test.builder.customTreadExecutor;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.yomahub.liteflow.property.LiteflowConfig;
+import com.yomahub.liteflow.property.LiteflowConfigGetter;
+import com.yomahub.liteflow.thread.ExecutorBuilder;
+
+import java.util.concurrent.ExecutorService;
+
+/**
+ * EL表达式装配并执行测试
+ *
+ * @author gezuao
+ * @since 2.11.1
+ */
+public class CustomThreadExecutor1 implements ExecutorBuilder {
+
+ @Override
+ public ExecutorService buildExecutor() {
+ LiteflowConfig liteflowConfig = LiteflowConfigGetter.get();
+ // 只有在非spring的场景下liteflowConfig才会为null
+ if (ObjectUtil.isNull(liteflowConfig)) {
+ liteflowConfig = new LiteflowConfig();
+ }
+ return buildDefaultExecutor(liteflowConfig.getWhenMaxWorkers(), liteflowConfig.getWhenMaxWorkers(),
+ liteflowConfig.getWhenQueueLimit(), "customer-when-1-thead-");
+ }
+
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/vo/User.java b/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/vo/User.java
new file mode 100644
index 000000000..c75b056ee
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/vo/User.java
@@ -0,0 +1,43 @@
+package com.yomahub.liteflow.test.builder.vo;
+
+import java.util.Date;
+
+/**
+ * EL表达式装配并执行测试
+ *
+ * @author gezuao
+ * @since 2.11.1
+ */
+public class User {
+
+ private String name;
+
+ private int age;
+
+ private Date birth;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getAge() {
+ return age;
+ }
+
+ public void setAge(int age) {
+ this.age = age;
+ }
+
+ public Date getBirth() {
+ return birth;
+ }
+
+ public void setBirth(Date birth) {
+ this.birth = birth;
+ }
+
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-declare-multi-springboot/src/test/java/com/yomahub/liteflow/test/rollback/RollbackELDeclMultiSpringbootTest.java b/liteflow-testcase-el/liteflow-testcase-el-declare-multi-springboot/src/test/java/com/yomahub/liteflow/test/rollback/RollbackELDeclMultiSpringbootTest.java
index 022dc9aec..8fcc1c34b 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-declare-multi-springboot/src/test/java/com/yomahub/liteflow/test/rollback/RollbackELDeclMultiSpringbootTest.java
+++ b/liteflow-testcase-el/liteflow-testcase-el-declare-multi-springboot/src/test/java/com/yomahub/liteflow/test/rollback/RollbackELDeclMultiSpringbootTest.java
@@ -100,4 +100,12 @@ public class RollbackELDeclMultiSpringbootTest extends BaseTest {
Assertions.assertEquals("321", context.getData("test"));
}
+ @Test
+ // 对重试的测试
+ public void testRetry() throws Exception {
+ LiteflowResponse response = flowExecutor.execute2Resp("chain10", "arg");
+ Assertions.assertFalse(response.isSuccess());
+ Assertions.assertEquals("n==>m", response.getRollbackStepStr());
+ }
+
}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-declare-multi-springboot/src/test/java/com/yomahub/liteflow/test/rollback/cmp/CmpConfig.java b/liteflow-testcase-el/liteflow-testcase-el-declare-multi-springboot/src/test/java/com/yomahub/liteflow/test/rollback/cmp/CmpConfig.java
index 1c1e43ad8..b88545014 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-declare-multi-springboot/src/test/java/com/yomahub/liteflow/test/rollback/cmp/CmpConfig.java
+++ b/liteflow-testcase-el/liteflow-testcase-el-declare-multi-springboot/src/test/java/com/yomahub/liteflow/test/rollback/cmp/CmpConfig.java
@@ -3,6 +3,7 @@ package com.yomahub.liteflow.test.rollback.cmp;
import cn.hutool.core.collection.ListUtil;
import com.yomahub.liteflow.annotation.LiteflowComponent;
import com.yomahub.liteflow.annotation.LiteflowMethod;
+import com.yomahub.liteflow.annotation.LiteflowRetry;
import com.yomahub.liteflow.core.NodeComponent;
import com.yomahub.liteflow.enums.LiteFlowMethodEnum;
import com.yomahub.liteflow.enums.NodeTypeEnum;
@@ -145,4 +146,32 @@ public class CmpConfig {
System.out.println("XCmp rollback!");
}
+ private int flag = 0;
+ @LiteflowRetry(5)
+ @LiteflowMethod(value = LiteFlowMethodEnum.PROCESS, nodeId = "m")
+ public void processM(NodeComponent bindCmp) {
+ if(flag < 2) {
+ flag ++;
+ throw new RuntimeException();
+ }
+ System.out.println("MCmp executed!");
+ }
+
+ @LiteflowMethod(value = LiteFlowMethodEnum.ROLLBACK, nodeId = "m")
+ public void rollbackM() throws Exception {
+ System.out.println("MCmp rollback!");
+ }
+
+ @LiteflowRetry(3)
+ @LiteflowMethod(value = LiteFlowMethodEnum.PROCESS, nodeId = "n")
+ public void processN(NodeComponent bindCmp) {
+ System.out.println("NCmp executed!");
+ throw new RuntimeException();
+ }
+
+ @LiteflowMethod(value = LiteFlowMethodEnum.ROLLBACK, nodeId = "n")
+ public void rollbackN() throws Exception {
+ System.out.println("NCmp rollback!");
+ }
+
}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-declare-multi-springboot/src/test/resources/rollback/flow.el.xml b/liteflow-testcase-el/liteflow-testcase-el-declare-multi-springboot/src/test/resources/rollback/flow.el.xml
index 887403167..a6db91b48 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-declare-multi-springboot/src/test/resources/rollback/flow.el.xml
+++ b/liteflow-testcase-el/liteflow-testcase-el-declare-multi-springboot/src/test/resources/rollback/flow.el.xml
@@ -35,4 +35,8 @@
THEN(a.tag("1"), a.tag("2"), a.tag("3"), d);
+
+
+ THEN( m, n );
+
\ No newline at end of file
diff --git a/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java b/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
index df1e70c4c..251c9aab1 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
+++ b/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
@@ -18,6 +18,7 @@ public class BaseTest {
SpiFactoryCleaner.clean();
LiteflowConfigGetter.clean();
FlowInitHook.cleanHook();
+ FlowBus.clearStat();
}
}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/rollback/RollbackELDeclSpringbootTest.java b/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/rollback/RollbackELDeclSpringbootTest.java
index c89f3c72c..952c8567e 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/rollback/RollbackELDeclSpringbootTest.java
+++ b/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/rollback/RollbackELDeclSpringbootTest.java
@@ -102,4 +102,12 @@ public class RollbackELDeclSpringbootTest extends BaseTest {
Assertions.assertEquals("321", context.getData("test"));
}
+ @Test
+ // 对重试的测试
+ public void testRetry() throws Exception {
+ LiteflowResponse response = flowExecutor.execute2Resp("chain10", "arg");
+ Assertions.assertFalse(response.isSuccess());
+ Assertions.assertEquals("n==>m", response.getRollbackStepStr());
+ }
+
}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/rollback/cmp/MCmp.java b/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/rollback/cmp/MCmp.java
new file mode 100644
index 000000000..975de743c
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/rollback/cmp/MCmp.java
@@ -0,0 +1,25 @@
+package com.yomahub.liteflow.test.rollback.cmp;
+
+import com.yomahub.liteflow.annotation.LiteflowRetry;
+import com.yomahub.liteflow.core.NodeComponent;
+import org.springframework.stereotype.Component;
+
+@Component("m")
+@LiteflowRetry(5)
+public class MCmp extends NodeComponent {
+
+ private int flag = 0;
+ @Override
+ public void process() {
+ if(flag < 2) {
+ flag ++;
+ throw new RuntimeException();
+ }
+ System.out.println("MCmp executed!");
+ }
+
+ @Override
+ public void rollback() throws Exception {
+ System.out.println("MCmp rollback!");
+ }
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/rollback/cmp/NCmp.java b/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/rollback/cmp/NCmp.java
new file mode 100644
index 000000000..65d509968
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/rollback/cmp/NCmp.java
@@ -0,0 +1,20 @@
+package com.yomahub.liteflow.test.rollback.cmp;
+
+import com.yomahub.liteflow.annotation.LiteflowRetry;
+import com.yomahub.liteflow.core.NodeComponent;
+import org.springframework.stereotype.Component;
+
+@Component("n")
+@LiteflowRetry(3)
+public class NCmp extends NodeComponent {
+ @Override
+ public void process() {
+ System.out.println("NCmp executed!");
+ throw new RuntimeException();
+ }
+
+ @Override
+ public void rollback() throws Exception {
+ System.out.println("NCmp rollback!");
+ }
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/resources/rollback/flow.el.xml b/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/resources/rollback/flow.el.xml
index 2e46ba7af..8ab1a1403 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/resources/rollback/flow.el.xml
+++ b/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/resources/rollback/flow.el.xml
@@ -35,4 +35,8 @@
THEN(a.tag("1"), a.tag("2"), a.tag("3"), d);
+
+
+ THEN( m, n );
+
\ No newline at end of file
diff --git a/liteflow-testcase-el/liteflow-testcase-el-etcd-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java b/liteflow-testcase-el/liteflow-testcase-el-etcd-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
index df1e70c4c..251c9aab1 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-etcd-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
+++ b/liteflow-testcase-el/liteflow-testcase-el-etcd-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
@@ -18,6 +18,7 @@ public class BaseTest {
SpiFactoryCleaner.clean();
LiteflowConfigGetter.clean();
FlowInitHook.cleanHook();
+ FlowBus.clearStat();
}
}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-etcd-springboot/src/test/java/com/yomahub/liteflow/test/etcd/EtcdWithXmlELSpringbootTest.java b/liteflow-testcase-el/liteflow-testcase-el-etcd-springboot/src/test/java/com/yomahub/liteflow/test/etcd/EtcdWithXmlELSpringbootTest.java
index 64f6dfdcb..4c6ec29e8 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-etcd-springboot/src/test/java/com/yomahub/liteflow/test/etcd/EtcdWithXmlELSpringbootTest.java
+++ b/liteflow-testcase-el/liteflow-testcase-el-etcd-springboot/src/test/java/com/yomahub/liteflow/test/etcd/EtcdWithXmlELSpringbootTest.java
@@ -50,6 +50,7 @@ public class EtcdWithXmlELSpringbootTest extends BaseTest {
@AfterEach
public void after() {
FlowBus.cleanCache();
+ FlowBus.clearStat();
}
@Test
diff --git a/liteflow-testcase-el/liteflow-testcase-el-nacos-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java b/liteflow-testcase-el/liteflow-testcase-el-nacos-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
index df1e70c4c..b5ba97770 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-nacos-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
+++ b/liteflow-testcase-el/liteflow-testcase-el-nacos-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
@@ -18,6 +18,6 @@ public class BaseTest {
SpiFactoryCleaner.clean();
LiteflowConfigGetter.clean();
FlowInitHook.cleanHook();
+ FlowBus.clearStat();
}
-
}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-nacos-springboot/src/test/java/com/yomahub/liteflow/test/nacos/NacosWithXmlELSpringbootTest.java b/liteflow-testcase-el/liteflow-testcase-el-nacos-springboot/src/test/java/com/yomahub/liteflow/test/nacos/NacosWithXmlELSpringbootTest.java
index 1e33174eb..837888949 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-nacos-springboot/src/test/java/com/yomahub/liteflow/test/nacos/NacosWithXmlELSpringbootTest.java
+++ b/liteflow-testcase-el/liteflow-testcase-el-nacos-springboot/src/test/java/com/yomahub/liteflow/test/nacos/NacosWithXmlELSpringbootTest.java
@@ -42,6 +42,7 @@ public class NacosWithXmlELSpringbootTest extends BaseTest {
@AfterEach
public void after() {
FlowBus.cleanCache();
+ FlowBus.clearStat();
}
@Test
@@ -55,17 +56,17 @@ public class NacosWithXmlELSpringbootTest extends BaseTest {
@Test
public void testNacosWithXml2() throws Exception {
- String flowXml = "THEN(a, b, c);";
- String changedFlowXml = "THEN(a, c);";
+ String flowXml = "THEN(a, b, c);";
+ String changedFlowXml = "THEN(a, c);";
when(nacosConfigService.getConfig(anyString(), anyString(), anyLong())).thenReturn(flowXml)
.thenReturn(changedFlowXml);
- LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg");
+ LiteflowResponse response = flowExecutor.execute2Resp("chain2", "arg");
Assertions.assertEquals("a==>b==>c", response.getExecuteStepStrWithoutTime());
FlowBus.refreshFlowMetaData(FlowParserTypeEnum.TYPE_EL_XML, changedFlowXml);
- response = flowExecutor.execute2Resp("chain1", "arg");
+ response = flowExecutor.execute2Resp("chain2", "arg");
Assertions.assertEquals("a==>c", response.getExecuteStepStrWithoutTime());
}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/BaseTest.java b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/BaseTest.java
index a9494a2aa..507be0173 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/BaseTest.java
+++ b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/BaseTest.java
@@ -18,6 +18,7 @@ public class BaseTest {
LiteflowConfigGetter.clean();
FlowExecutorHolder.clean();
FlowInitHook.cleanHook();
+ FlowBus.clearStat();
}
}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/rollback/RollbackTest.java b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/rollback/RollbackTest.java
index f8d58918e..97498e070 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/rollback/RollbackTest.java
+++ b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/rollback/RollbackTest.java
@@ -99,4 +99,12 @@ public class RollbackTest extends BaseTest {
Assertions.assertEquals("321", context.getData("test"));
}
+ @Test
+ // 对重试的测试
+ public void testRetry() throws Exception {
+ LiteflowResponse response = flowExecutor.execute2Resp("chain10", "arg");
+ Assertions.assertFalse(response.isSuccess());
+ Assertions.assertEquals("n==>m", response.getRollbackStepStr());
+ }
+
}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/rollback/cmp/MCmp.java b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/rollback/cmp/MCmp.java
new file mode 100644
index 000000000..da538e236
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/rollback/cmp/MCmp.java
@@ -0,0 +1,23 @@
+package com.yomahub.liteflow.test.rollback.cmp;
+
+import com.yomahub.liteflow.annotation.LiteflowRetry;
+import com.yomahub.liteflow.core.NodeComponent;
+
+@LiteflowRetry(5)
+public class MCmp extends NodeComponent {
+
+ private int flag = 0;
+ @Override
+ public void process() {
+ if(flag < 2) {
+ flag ++;
+ throw new RuntimeException();
+ }
+ System.out.println("MCmp executed!");
+ }
+
+ @Override
+ public void rollback() throws Exception {
+ System.out.println("MCmp rollback!");
+ }
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/rollback/cmp/NCmp.java b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/rollback/cmp/NCmp.java
new file mode 100644
index 000000000..66d51ef08
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/rollback/cmp/NCmp.java
@@ -0,0 +1,18 @@
+package com.yomahub.liteflow.test.rollback.cmp;
+
+import com.yomahub.liteflow.annotation.LiteflowRetry;
+import com.yomahub.liteflow.core.NodeComponent;
+
+@LiteflowRetry(3)
+public class NCmp extends NodeComponent {
+ @Override
+ public void process() {
+ System.out.println("NCmp executed!");
+ throw new RuntimeException();
+ }
+
+ @Override
+ public void rollback() throws Exception {
+ System.out.println("NCmp rollback!");
+ }
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/resources/rollback/flow.el.xml b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/resources/rollback/flow.el.xml
index 7072cf2b9..da327932d 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/resources/rollback/flow.el.xml
+++ b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/resources/rollback/flow.el.xml
@@ -12,6 +12,8 @@
+
+
THEN( a, b, WHEN(c, d).ignoreError(true), CATCH(e) );
@@ -48,4 +50,8 @@
THEN(a.tag("1"), a.tag("2"), a.tag("3"), d);
+
+
+ THEN( m, n );
+
\ No newline at end of file
diff --git a/liteflow-testcase-el/liteflow-testcase-el-redis-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java b/liteflow-testcase-el/liteflow-testcase-el-redis-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
index e282c0fd0..191dbc898 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-redis-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
+++ b/liteflow-testcase-el/liteflow-testcase-el-redis-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
@@ -18,5 +18,6 @@ public class BaseTest {
SpiFactoryCleaner.clean();
LiteflowConfigGetter.clean();
FlowInitHook.cleanHook();
+ FlowBus.clearStat();
}
}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-redis-springboot/src/test/java/com/yomahub/liteflow/test/redis/RedisWithXmlELSubscribeSpringbootTest.java b/liteflow-testcase-el/liteflow-testcase-el-redis-springboot/src/test/java/com/yomahub/liteflow/test/redis/RedisWithXmlELSubscribeSpringbootTest.java
index 523d13d0d..a5388e8dc 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-redis-springboot/src/test/java/com/yomahub/liteflow/test/redis/RedisWithXmlELSubscribeSpringbootTest.java
+++ b/liteflow-testcase-el/liteflow-testcase-el-redis-springboot/src/test/java/com/yomahub/liteflow/test/redis/RedisWithXmlELSubscribeSpringbootTest.java
@@ -18,6 +18,7 @@ import org.junit.jupiter.api.extension.ExtendWith;
import org.redisson.Redisson;
import org.redisson.api.RMapCache;
import org.redisson.api.RedissonClient;
+import org.redisson.client.codec.StringCodec;
import org.redisson.config.Config;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
@@ -60,8 +61,8 @@ public class RedisWithXmlELSubscribeSpringbootTest extends BaseTest {
Config config = new Config();
config.useSingleServer().setAddress("redis://127.0.0.1:6379").setDatabase(1);
redissonClient = Redisson.create(config);
- RMapCache chainKey = redissonClient.getMapCache("testChainKey");
- RMapCache scriptKey = redissonClient.getMapCache("testScriptKey");
+ RMapCache chainKey = redissonClient.getMapCache("testChainKey", StringCodec.INSTANCE);
+ RMapCache scriptKey = redissonClient.getMapCache("testScriptKey", StringCodec.INSTANCE);
scriptKey.put("s1:script:脚本s1:groovy", "defaultContext.setData(\"test1\",\"hello s1\");");
scriptKey.put("s2:script:脚本s2:js", "defaultContext.setData(\"test2\",\"hello s2\");");
scriptKey.put("s3:script:脚本s3", "defaultContext.setData(\"test3\",\"hello s3\");");
@@ -183,8 +184,8 @@ public class RedisWithXmlELSubscribeSpringbootTest extends BaseTest {
//redis内规则数据数据清空
public static void testCleanData() {
if (ObjectUtil.isNotNull(redissonClient)) {
- RMapCache chainKey = redissonClient.getMapCache("testChainKey");
- RMapCache scriptKey = redissonClient.getMapCache("testScriptKey");
+ RMapCache chainKey = redissonClient.getMapCache("testChainKey", StringCodec.INSTANCE);
+ RMapCache scriptKey = redissonClient.getMapCache("testScriptKey", StringCodec.INSTANCE);
for (String key : chainKey.keySet()) {
chainKey.remove(key);
}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-aviator-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java b/liteflow-testcase-el/liteflow-testcase-el-script-aviator-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
index df1e70c4c..251c9aab1 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-script-aviator-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-aviator-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
@@ -18,6 +18,7 @@ public class BaseTest {
SpiFactoryCleaner.clean();
LiteflowConfigGetter.clean();
FlowInitHook.cleanHook();
+ FlowBus.clearStat();
}
}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-graaljs-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java b/liteflow-testcase-el/liteflow-testcase-el-script-graaljs-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
index df1e70c4c..251c9aab1 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-script-graaljs-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-graaljs-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
@@ -18,6 +18,7 @@ public class BaseTest {
SpiFactoryCleaner.clean();
LiteflowConfigGetter.clean();
FlowInitHook.cleanHook();
+ FlowBus.clearStat();
}
}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-groovy-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java b/liteflow-testcase-el/liteflow-testcase-el-script-groovy-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
index df1e70c4c..251c9aab1 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-script-groovy-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-groovy-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
@@ -18,6 +18,7 @@ public class BaseTest {
SpiFactoryCleaner.clean();
LiteflowConfigGetter.clean();
FlowInitHook.cleanHook();
+ FlowBus.clearStat();
}
}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-java-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java b/liteflow-testcase-el/liteflow-testcase-el-script-java-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
index df1e70c4c..251c9aab1 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-script-java-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-java-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
@@ -18,6 +18,7 @@ public class BaseTest {
SpiFactoryCleaner.clean();
LiteflowConfigGetter.clean();
FlowInitHook.cleanHook();
+ FlowBus.clearStat();
}
}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-javascript-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java b/liteflow-testcase-el/liteflow-testcase-el-script-javascript-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
index df1e70c4c..251c9aab1 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-script-javascript-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-javascript-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
@@ -18,6 +18,7 @@ public class BaseTest {
SpiFactoryCleaner.clean();
LiteflowConfigGetter.clean();
FlowInitHook.cleanHook();
+ FlowBus.clearStat();
}
}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-lua-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java b/liteflow-testcase-el/liteflow-testcase-el-script-lua-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
index df1e70c4c..251c9aab1 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-script-lua-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-lua-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
@@ -18,6 +18,7 @@ public class BaseTest {
SpiFactoryCleaner.clean();
LiteflowConfigGetter.clean();
FlowInitHook.cleanHook();
+ FlowBus.clearStat();
}
}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-multi-language-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java b/liteflow-testcase-el/liteflow-testcase-el-script-multi-language-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
index df1e70c4c..251c9aab1 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-script-multi-language-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-multi-language-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
@@ -18,6 +18,7 @@ public class BaseTest {
SpiFactoryCleaner.clean();
LiteflowConfigGetter.clean();
FlowInitHook.cleanHook();
+ FlowBus.clearStat();
}
}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-python-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java b/liteflow-testcase-el/liteflow-testcase-el-script-python-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
index df1e70c4c..251c9aab1 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-script-python-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-python-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
@@ -18,6 +18,7 @@ public class BaseTest {
SpiFactoryCleaner.clean();
LiteflowConfigGetter.clean();
FlowInitHook.cleanHook();
+ FlowBus.clearStat();
}
}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-qlexpress-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java b/liteflow-testcase-el/liteflow-testcase-el-script-qlexpress-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
index df1e70c4c..251c9aab1 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-script-qlexpress-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
+++ b/liteflow-testcase-el/liteflow-testcase-el-script-qlexpress-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
@@ -18,6 +18,7 @@ public class BaseTest {
SpiFactoryCleaner.clean();
LiteflowConfigGetter.clean();
FlowInitHook.cleanHook();
+ FlowBus.clearStat();
}
}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-solon/src/test/java/com/yomahub/liteflow/test/BaseTest.java b/liteflow-testcase-el/liteflow-testcase-el-solon/src/test/java/com/yomahub/liteflow/test/BaseTest.java
index 814da97c7..ca79784d0 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-solon/src/test/java/com/yomahub/liteflow/test/BaseTest.java
+++ b/liteflow-testcase-el/liteflow-testcase-el-solon/src/test/java/com/yomahub/liteflow/test/BaseTest.java
@@ -16,6 +16,7 @@ public class BaseTest {
SpiFactoryCleaner.clean();
LiteflowConfigGetter.clean();
FlowInitHook.cleanHook();
+ FlowBus.clearStat();
}
}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-solon/src/test/java/com/yomahub/liteflow/test/rollback/RollbackSpringbootTest.java b/liteflow-testcase-el/liteflow-testcase-el-solon/src/test/java/com/yomahub/liteflow/test/rollback/RollbackSpringbootTest.java
index 07d7486f6..fdaa63d62 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-solon/src/test/java/com/yomahub/liteflow/test/rollback/RollbackSpringbootTest.java
+++ b/liteflow-testcase-el/liteflow-testcase-el-solon/src/test/java/com/yomahub/liteflow/test/rollback/RollbackSpringbootTest.java
@@ -94,4 +94,12 @@ public class RollbackSpringbootTest extends BaseTest {
Assertions.assertEquals("321", context.getData("test"));
}
+ @Test
+ // 对重试的测试
+ public void testRetry() throws Exception {
+ LiteflowResponse response = flowExecutor.execute2Resp("chain10", "arg");
+ Assertions.assertFalse(response.isSuccess());
+ Assertions.assertEquals("n==>m", response.getRollbackStepStr());
+ }
+
}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-solon/src/test/java/com/yomahub/liteflow/test/rollback/cmp/MCmp.java b/liteflow-testcase-el/liteflow-testcase-el-solon/src/test/java/com/yomahub/liteflow/test/rollback/cmp/MCmp.java
new file mode 100644
index 000000000..5e7b10944
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-solon/src/test/java/com/yomahub/liteflow/test/rollback/cmp/MCmp.java
@@ -0,0 +1,25 @@
+package com.yomahub.liteflow.test.rollback.cmp;
+
+import com.yomahub.liteflow.annotation.LiteflowRetry;
+import com.yomahub.liteflow.core.NodeComponent;
+import org.noear.solon.annotation.Component;
+
+@Component("m")
+@LiteflowRetry(5)
+public class MCmp extends NodeComponent {
+
+ private int flag = 0;
+ @Override
+ public void process() {
+ if(flag < 2) {
+ flag ++;
+ throw new RuntimeException();
+ }
+ System.out.println("MCmp executed!");
+ }
+
+ @Override
+ public void rollback() throws Exception {
+ System.out.println("MCmp rollback!");
+ }
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-solon/src/test/java/com/yomahub/liteflow/test/rollback/cmp/NCmp.java b/liteflow-testcase-el/liteflow-testcase-el-solon/src/test/java/com/yomahub/liteflow/test/rollback/cmp/NCmp.java
new file mode 100644
index 000000000..34abed913
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-solon/src/test/java/com/yomahub/liteflow/test/rollback/cmp/NCmp.java
@@ -0,0 +1,20 @@
+package com.yomahub.liteflow.test.rollback.cmp;
+
+import com.yomahub.liteflow.annotation.LiteflowRetry;
+import com.yomahub.liteflow.core.NodeComponent;
+import org.noear.solon.annotation.Component;
+
+@Component("n")
+@LiteflowRetry(3)
+public class NCmp extends NodeComponent {
+ @Override
+ public void process() {
+ System.out.println("NCmp executed!");
+ throw new RuntimeException();
+ }
+
+ @Override
+ public void rollback() throws Exception {
+ System.out.println("NCmp rollback!");
+ }
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-solon/src/test/resources/rollback/flow.el.xml b/liteflow-testcase-el/liteflow-testcase-el-solon/src/test/resources/rollback/flow.el.xml
index 2e46ba7af..8ab1a1403 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-solon/src/test/resources/rollback/flow.el.xml
+++ b/liteflow-testcase-el/liteflow-testcase-el-solon/src/test/resources/rollback/flow.el.xml
@@ -35,4 +35,8 @@
THEN(a.tag("1"), a.tag("2"), a.tag("3"), d);
+
+
+ THEN( m, n );
+
\ No newline at end of file
diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
index df1e70c4c..251c9aab1 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
+++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
@@ -18,6 +18,7 @@ public class BaseTest {
SpiFactoryCleaner.clean();
LiteflowConfigGetter.clean();
FlowInitHook.cleanHook();
+ FlowBus.clearStat();
}
}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/rollback/RollbackSpringbootTest.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/rollback/RollbackSpringbootTest.java
index 8e230f7fa..133806e92 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/rollback/RollbackSpringbootTest.java
+++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/rollback/RollbackSpringbootTest.java
@@ -2,6 +2,8 @@ package com.yomahub.liteflow.test.rollback;
import com.yomahub.liteflow.core.FlowExecutor;
import com.yomahub.liteflow.flow.LiteflowResponse;
+import com.yomahub.liteflow.property.LiteflowConfig;
+import com.yomahub.liteflow.property.LiteflowConfigGetter;
import com.yomahub.liteflow.slot.DefaultContext;
import com.yomahub.liteflow.test.BaseTest;
import org.junit.jupiter.api.Assertions;
@@ -97,4 +99,12 @@ public class RollbackSpringbootTest extends BaseTest {
Assertions.assertFalse(response.isSuccess());
Assertions.assertEquals("321", context.getData("test"));
}
+
+ @Test
+ // 对重试的测试
+ public void testRetry() throws Exception {
+ LiteflowResponse response = flowExecutor.execute2Resp("chain10", "arg");
+ Assertions.assertFalse(response.isSuccess());
+ Assertions.assertEquals("n==>m", response.getRollbackStepStr());
+ }
}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/rollback/cmp/MCmp.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/rollback/cmp/MCmp.java
new file mode 100644
index 000000000..975de743c
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/rollback/cmp/MCmp.java
@@ -0,0 +1,25 @@
+package com.yomahub.liteflow.test.rollback.cmp;
+
+import com.yomahub.liteflow.annotation.LiteflowRetry;
+import com.yomahub.liteflow.core.NodeComponent;
+import org.springframework.stereotype.Component;
+
+@Component("m")
+@LiteflowRetry(5)
+public class MCmp extends NodeComponent {
+
+ private int flag = 0;
+ @Override
+ public void process() {
+ if(flag < 2) {
+ flag ++;
+ throw new RuntimeException();
+ }
+ System.out.println("MCmp executed!");
+ }
+
+ @Override
+ public void rollback() throws Exception {
+ System.out.println("MCmp rollback!");
+ }
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/rollback/cmp/NCmp.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/rollback/cmp/NCmp.java
new file mode 100644
index 000000000..65d509968
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/rollback/cmp/NCmp.java
@@ -0,0 +1,20 @@
+package com.yomahub.liteflow.test.rollback.cmp;
+
+import com.yomahub.liteflow.annotation.LiteflowRetry;
+import com.yomahub.liteflow.core.NodeComponent;
+import org.springframework.stereotype.Component;
+
+@Component("n")
+@LiteflowRetry(3)
+public class NCmp extends NodeComponent {
+ @Override
+ public void process() {
+ System.out.println("NCmp executed!");
+ throw new RuntimeException();
+ }
+
+ @Override
+ public void rollback() throws Exception {
+ System.out.println("NCmp rollback!");
+ }
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/rollback/flow.el.xml b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/rollback/flow.el.xml
index 2e46ba7af..8ab1a1403 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/rollback/flow.el.xml
+++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/rollback/flow.el.xml
@@ -35,4 +35,8 @@
THEN(a.tag("1"), a.tag("2"), a.tag("3"), d);
+
+
+ THEN( m, n );
+
\ No newline at end of file
diff --git a/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/BaseTest.java b/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/BaseTest.java
index df1e70c4c..251c9aab1 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/BaseTest.java
+++ b/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/BaseTest.java
@@ -18,6 +18,7 @@ public class BaseTest {
SpiFactoryCleaner.clean();
LiteflowConfigGetter.clean();
FlowInitHook.cleanHook();
+ FlowBus.clearStat();
}
}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/rollback/RollbackSpringTest.java b/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/rollback/RollbackSpringTest.java
index e4b08ccc9..59a4e6160 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/rollback/RollbackSpringTest.java
+++ b/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/rollback/RollbackSpringTest.java
@@ -95,5 +95,13 @@ public class RollbackSpringTest extends BaseTest {
Assertions.assertEquals("321", context.getData("test"));
}
+ @Test
+ // 对重试的测试
+ public void testRetry() throws Exception {
+ LiteflowResponse response = flowExecutor.execute2Resp("chain10", "arg");
+ Assertions.assertFalse(response.isSuccess());
+ Assertions.assertEquals("n==>m", response.getRollbackStepStr());
+ }
+
}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/rollback/cmp/MCmp.java b/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/rollback/cmp/MCmp.java
new file mode 100644
index 000000000..975de743c
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/rollback/cmp/MCmp.java
@@ -0,0 +1,25 @@
+package com.yomahub.liteflow.test.rollback.cmp;
+
+import com.yomahub.liteflow.annotation.LiteflowRetry;
+import com.yomahub.liteflow.core.NodeComponent;
+import org.springframework.stereotype.Component;
+
+@Component("m")
+@LiteflowRetry(5)
+public class MCmp extends NodeComponent {
+
+ private int flag = 0;
+ @Override
+ public void process() {
+ if(flag < 2) {
+ flag ++;
+ throw new RuntimeException();
+ }
+ System.out.println("MCmp executed!");
+ }
+
+ @Override
+ public void rollback() throws Exception {
+ System.out.println("MCmp rollback!");
+ }
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/rollback/cmp/NCmp.java b/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/rollback/cmp/NCmp.java
new file mode 100644
index 000000000..65d509968
--- /dev/null
+++ b/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/rollback/cmp/NCmp.java
@@ -0,0 +1,20 @@
+package com.yomahub.liteflow.test.rollback.cmp;
+
+import com.yomahub.liteflow.annotation.LiteflowRetry;
+import com.yomahub.liteflow.core.NodeComponent;
+import org.springframework.stereotype.Component;
+
+@Component("n")
+@LiteflowRetry(3)
+public class NCmp extends NodeComponent {
+ @Override
+ public void process() {
+ System.out.println("NCmp executed!");
+ throw new RuntimeException();
+ }
+
+ @Override
+ public void rollback() throws Exception {
+ System.out.println("NCmp rollback!");
+ }
+}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/resources/rollback/flow.el.xml b/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/resources/rollback/flow.el.xml
index 2e46ba7af..8ab1a1403 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/resources/rollback/flow.el.xml
+++ b/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/resources/rollback/flow.el.xml
@@ -35,4 +35,8 @@
THEN(a.tag("1"), a.tag("2"), a.tag("3"), d);
+
+
+ THEN( m, n );
+
\ No newline at end of file
diff --git a/liteflow-testcase-el/liteflow-testcase-el-sql-springboot-dynamic/src/test/java/com/yomahub/liteflow/test/BaseTest.java b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot-dynamic/src/test/java/com/yomahub/liteflow/test/BaseTest.java
index eb7287357..048888b78 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-sql-springboot-dynamic/src/test/java/com/yomahub/liteflow/test/BaseTest.java
+++ b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot-dynamic/src/test/java/com/yomahub/liteflow/test/BaseTest.java
@@ -22,6 +22,7 @@ public class BaseTest {
SpiFactoryCleaner.clean();
LiteflowConfigGetter.clean();
FlowInitHook.cleanHook();
+ FlowBus.clearStat();
}
}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
index eb7287357..048888b78 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
+++ b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
@@ -22,6 +22,7 @@ public class BaseTest {
SpiFactoryCleaner.clean();
LiteflowConfigGetter.clean();
FlowInitHook.cleanHook();
+ FlowBus.clearStat();
}
}
diff --git a/liteflow-testcase-el/liteflow-testcase-el-zk-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java b/liteflow-testcase-el/liteflow-testcase-el-zk-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
index df1e70c4c..251c9aab1 100644
--- a/liteflow-testcase-el/liteflow-testcase-el-zk-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
+++ b/liteflow-testcase-el/liteflow-testcase-el-zk-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
@@ -18,6 +18,7 @@ public class BaseTest {
SpiFactoryCleaner.clean();
LiteflowConfigGetter.clean();
FlowInitHook.cleanHook();
+ FlowBus.clearStat();
}
}
diff --git a/pom.xml b/pom.xml
index c736ec756..064dafbe2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -39,7 +39,7 @@
- 2.11.1
+ 2.11.3
UTF-8
UTF-8
8
diff --git a/static/img/yuncheng-banner.png b/static/img/yuncheng-banner.png
new file mode 100644
index 000000000..34db09fe4
Binary files /dev/null and b/static/img/yuncheng-banner.png differ