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() {
 

Reply via email to