This is an automated email from the ASF dual-hosted git repository.
xiaoyu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shenyu.git
The following commit(s) were added to refs/heads/master by this push:
new f79710d66 added array method of expression in mock plugin (#4256)
f79710d66 is described below
commit f79710d668966dcfbcc4a47dbbc0e44faef16233
Author: 愿凌飞 <[email protected]>
AuthorDate: Mon Dec 12 10:32:54 2022 +0800
added array method of expression in mock plugin (#4256)
---
.../plugin/mock/generator/ExpressionGenerator.java | 6 ++--
.../apache/shenyu/plugin/mock/util/MockUtil.java | 40 +++++++++++++++++++++-
.../mock/generator/ExpressionGeneratorTest.java | 14 ++++++++
3 files changed, 55 insertions(+), 5 deletions(-)
diff --git
a/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/ExpressionGenerator.java
b/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/ExpressionGenerator.java
index 451172bcb..614976e94 100644
---
a/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/ExpressionGenerator.java
+++
b/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/ExpressionGenerator.java
@@ -52,10 +52,6 @@ public class ExpressionGenerator implements
Generator<String> {
CONTEXT.setVariable("req", mockRequest);
Object val = PARSER.parseExpression(expression).getValue(CONTEXT);
-
- if (val instanceof MockUtil.FormatDouble) {
- return val.toString();
- }
return JsonUtils.toJson(val);
}
@@ -92,6 +88,8 @@ public class ExpressionGenerator implements Generator<String>
{
registerMockFunction(context, "current", "current",
String[].class);
+ registerMockFunction(context, "array", "array", Object.class,
int.class);
+
context.addPropertyAccessor(new MapAccessor());
} catch (NoSuchMethodException e) {
diff --git
a/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/util/MockUtil.java
b/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/util/MockUtil.java
index 083be1e92..a2f5e4793 100644
---
a/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/util/MockUtil.java
+++
b/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/util/MockUtil.java
@@ -25,6 +25,7 @@ import org.slf4j.LoggerFactory;
import java.time.DateTimeException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
+import java.util.Arrays;
import java.util.Objects;
import java.util.Random;
@@ -156,7 +157,24 @@ public class MockUtil {
}
- public static class FormatDouble {
+ /**
+ * Generate array.
+ *
+ * @param item item
+ * @param length the length of array
+ * @return array
+ */
+ public static Object[] array(final Object item, final int length) {
+ Object[] array = new Object[length];
+ Arrays.fill(array, item);
+ return array;
+ }
+
+ /**
+ * how to json this Object?
+ * com.fasterxml.jackson.databind.ser.std.NumberSerializer#serialize
+ */
+ public static class FormatDouble extends Number {
private final Double val;
@@ -179,6 +197,26 @@ public class MockUtil {
}
return String.format(format, val);
}
+
+ @Override
+ public int intValue() {
+ return val.intValue();
+ }
+
+ @Override
+ public long longValue() {
+ return val.longValue();
+ }
+
+ @Override
+ public float floatValue() {
+ return val.floatValue();
+ }
+
+ @Override
+ public double doubleValue() {
+ return val;
+ }
}
}
diff --git
a/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/ExpressionGeneratorTest.java
b/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/ExpressionGeneratorTest.java
index 5f412710d..b6ccb0383 100644
---
a/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/ExpressionGeneratorTest.java
+++
b/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/ExpressionGeneratorTest.java
@@ -21,6 +21,7 @@ import com.google.common.collect.ImmutableMap;
import org.apache.shenyu.common.enums.HttpMethodEnum;
import org.apache.shenyu.common.utils.JsonUtils;
import org.apache.shenyu.plugin.mock.api.MockRequest;
+import org.hamcrest.Matchers;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
@@ -136,6 +137,19 @@ public class ExpressionGeneratorTest {
assertThat(val, oneOf("\"shenyu\"", "\"number\"", "1"));
}
+ @Test
+ public void testArrayGenerate() {
+
+ String val =
generator.generate("expression|#array(#array('shenyu',2),2)", mockRequest);
+ assertThat(val,
is("[[\"shenyu\",\"shenyu\"],[\"shenyu\",\"shenyu\"]]"));
+
+ val = generator.generate("expression|#array(#bool(),2)", mockRequest);
+ assertThat(val, oneOf("[true,false]", "[false,true]", "[false,false]",
"[true,true]"));
+
+ val =
generator.generate("expression|#array(#double(10.5,12.0,'%.2f'),2)",
mockRequest);
+ assertThat(val, Matchers.notNullValue());
+ }
+
@Test
public void testGenerateDataFromReq() {