fix(mockjava): fix MockSchemaParser.visitPrimitive

refactor(mockjava): extract the same .visitObject to JsonVisitor from MockSchemaParser and MockGenerator
style(mockjava)
This commit is contained in:
Frank.R.Wu 2021-08-03 15:45:52 +08:00
parent 14d5a35d25
commit 39b53a672a
7 changed files with 38 additions and 59 deletions

View File

@ -8,13 +8,14 @@ import java.util.Set;
public class JsonUtil {
private static Set<Object> recorded = null;
public static JsonElement toJson(jdk.nashorn.api.scripting.ScriptObjectMirror res) {
recorded = new HashSet<>();
JsonElement jsonElement = copyInternal(res);
recorded.clear();
;
return jsonElement;
}
private static JsonElement copyInternal(Object obj) {
if (recorded.contains(obj)) return JsonNull.INSTANCE;
if (obj == null) return JsonNull.INSTANCE;

View File

@ -6,8 +6,16 @@ import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;
public abstract class JsonVisitor {
JsonElement result;
public JsonElement get() {
return result;
}
public JsonVisitor visit(JsonElement ele) {
if (ele == null) return null;
if (null == ele) {
return null;
}
if (ele.isJsonArray()) {
return visitJsonArray((JsonArray) ele);
} else if (ele.isJsonObject()) {
@ -18,7 +26,20 @@ public abstract class JsonVisitor {
}
}
public abstract JsonVisitor visitObject(JsonObject asJsonObject);
public JsonVisitor visitObject(JsonObject jsonObject) {
JsonObject jo = new JsonObject();
for (String key : jsonObject.keySet()) {
JsonElement origin = jsonObject.get(key);
visit(origin);
JsonElement je = get();
if (origin.isJsonArray()) {
key += "|" + Math.min(((JsonArray) origin).size(), 20);
}
jo.add(key, je);
}
result = jo;
return this;
}
public abstract JsonVisitor visitJsonArray(JsonArray ele);

View File

@ -2,33 +2,11 @@ package org.bdware.mockjava;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;
import org.bdware.mockjava.generator.IntegerGenerator;
public class MockGenerator extends JsonVisitor {
public static MockGenerator instance = new MockGenerator();
JsonElement result;
public JsonElement get() {
return result;
}
@Override
public JsonVisitor visitObject(JsonObject jsonObject) {
JsonObject jo = new JsonObject();
for (String key : jsonObject.keySet()) {
JsonElement origin = jsonObject.get(key);
visit(origin);
JsonElement je = get();
if (origin.isJsonArray()) {
key += "|" + Math.min(((JsonArray) origin).size(), 20);
}
jo.add(key, je);
}
result = jo;
return this;
}
@Override
public JsonVisitor visitJsonArray(JsonArray array) {
@ -43,8 +21,9 @@ public class MockGenerator extends JsonVisitor {
@Override
public JsonVisitor visitPrimitive(JsonPrimitive primitive) {
if (!primitive.isString()) result = primitive.deepCopy();
if (!primitive.isString()) {
result = primitive.deepCopy();
}
ValueGenerator generator = lookupGenerator(primitive.getAsString());
result = generator.generate(null, primitive);
return this;

View File

@ -1,37 +1,14 @@
package org.bdware.mockjava;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;
public class MockSchemaParser extends JsonVisitor {
public static MockSchemaParser instance = new MockSchemaParser();
JsonElement result;
public JsonElement get() {
return result;
}
@Override
public JsonVisitor visitObject(JsonObject jsonObject) {
JsonObject jo = new JsonObject();
for (String key : jsonObject.keySet()) {
JsonElement origin = jsonObject.get(key);
visit(origin);
JsonElement je = get();
if (origin.isJsonArray()) {
key += "|" + Math.min(((JsonArray) origin).size(), 20);
}
jo.add(key, je);
}
result = jo;
return this;
}
@Override
public JsonVisitor visitJsonArray(JsonArray array) {
JsonArray ret = new JsonArray();
JsonArray ret = new JsonArray();
if (array.size() > 0) {
visit(array.get(0));
ret.add(result);
@ -46,8 +23,9 @@ public class MockSchemaParser extends JsonVisitor {
result = new JsonPrimitive("@boolean");
} else if (primitive.isNumber()) {
result = new JsonPrimitive("@integer");
} else {
result = new JsonPrimitive("@string");
}
result = new JsonPrimitive("@string");
return this;
}
}

View File

@ -19,8 +19,8 @@ public class MockUtil {
MOCK_JS_ENGINE = new ScriptEngineManager().getEngineByName("JavaScript");
// System.out.println(MOCK_JS_ENGINE);
try (InputStream mockJs =
MockUtil.class.getClassLoader().getResourceAsStream(MOCK_JS_PATH);
InputStreamReader reader = new InputStreamReader(mockJs); ) {
MockUtil.class.getClassLoader().getResourceAsStream(MOCK_JS_PATH);
InputStreamReader reader = new InputStreamReader(mockJs)) {
MOCK_JS_ENGINE.eval(reader);
} catch (ScriptException | IOException e) {
// log.error("执行MockJs错误", e);
@ -31,7 +31,7 @@ public class MockUtil {
private static boolean isJson(String str) {
try {
JsonObject jsonStr = JsonParser.parseString(str).getAsJsonObject();
JsonParser.parseString(str).getAsJsonObject();
return true;
} catch (Exception e) {
return false;
@ -39,7 +39,7 @@ public class MockUtil {
}
public static Object mock(String template) {
Object result = (ScriptObjectMirror) ScriptObjectMirror.wrap(null, Context.getGlobal());
Object result = ScriptObjectMirror.wrap(null, Context.getGlobal());
if (template.length() > 0) {
try {
//

View File

@ -3,5 +3,5 @@ package org.bdware.mockjava;
import com.google.gson.JsonElement;
public abstract class ValueGenerator {
public abstract JsonElement generate(String preField,JsonElement previous);
public abstract JsonElement generate(String preField, JsonElement previous);
}

View File

@ -9,13 +9,13 @@ import java.util.Random;
@Generator(tag = "@integer")
public class IntegerGenerator extends ValueGenerator {
static Random secureRandom = new SecureRandom();
// TODO
public static IntegerGenerator create(String[] args) {
return new IntegerGenerator();
}
static Random secureRandom = new SecureRandom();
@Override
public JsonElement generate(String preField, JsonElement previous) {
return new JsonPrimitive(secureRandom.nextInt());