mirror of
https://gitee.com/BDWare/MockJava
synced 2025-04-27 14:32:22 +00:00
Compare commits
4 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
97ddefab68 | ||
|
7447d5a079 | ||
|
867cdd2e43 | ||
|
0722b05788 |
90
build.gradle
90
build.gradle
@ -1,8 +1,12 @@
|
||||
plugins {
|
||||
id 'java'
|
||||
id 'java-library'
|
||||
id 'maven-publish'
|
||||
id 'signing'
|
||||
}
|
||||
|
||||
apply from: '../spotless.gradle'
|
||||
|
||||
group 'org.bdware.mockjava'
|
||||
version '0.5.0'
|
||||
|
||||
@ -30,6 +34,7 @@ sourceCompatibility = 1.8
|
||||
//-----------------------
|
||||
|
||||
tasks.processResources.setDuplicatesStrategy(DuplicatesStrategy.INCLUDE)
|
||||
tasks.jar.setDuplicatesStrategy(DuplicatesStrategy.INCLUDE)
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
@ -39,9 +44,86 @@ repositories {
|
||||
|
||||
dependencies {
|
||||
api 'com.google.code.gson:gson:2.8.8'
|
||||
api 'log4j:log4j:1.2.17'
|
||||
// api 'net.dona.doip:doip-sdk:2.1.0'
|
||||
api 'org.apache.logging.log4j:log4j-core:2.17.0'
|
||||
api 'org.apache.logging.log4j:log4j-api:2.17.0'
|
||||
api 'org.apache.logging.log4j:log4j-core:2.17.2'
|
||||
api 'org.apache.logging.log4j:log4j-api:2.17.2'
|
||||
testImplementation 'junit:junit:4.13.2'
|
||||
}
|
||||
task classJar(type: Jar, dependsOn: classes) {
|
||||
classifier = "jar"
|
||||
}
|
||||
task sourceJar(type: Jar, dependsOn: classes) {
|
||||
archiveClassifier = "sources"
|
||||
classifier = "sources"
|
||||
from sourceSets.main.allSource
|
||||
}
|
||||
tasks.withType(Javadoc) {
|
||||
options.addStringOption('Xdoclint:none', '-quiet')
|
||||
}
|
||||
|
||||
task javadocJar(type: Jar, dependsOn: javadoc) {
|
||||
archiveClassifier = 'javadoc'
|
||||
classifier = "javadoc"
|
||||
exclude {
|
||||
details -> details.file.getAbsolutePath().contains("/gm/")
|
||||
}
|
||||
from javadoc.destinationDir
|
||||
}
|
||||
|
||||
|
||||
publishing {
|
||||
publications {
|
||||
mavenJava(MavenPublication) {
|
||||
groupId project.group
|
||||
artifactId "mockjava"
|
||||
version "${version}"
|
||||
from components.java
|
||||
artifact sourceJar
|
||||
artifact javadocJar
|
||||
artifact classJar
|
||||
pom {
|
||||
name = "bdware-mockjava"
|
||||
description = "mockjava"
|
||||
url = "https://gitee.com/BDWare/MockJava"
|
||||
licenses {
|
||||
license {
|
||||
name = "Mulan PSL v2"
|
||||
url = "http://license.coscl.org.cn/MulanPSL2"
|
||||
}
|
||||
}
|
||||
developers {
|
||||
developer {
|
||||
id = "dataware"
|
||||
email = "caihq@pku.edu.cn"
|
||||
}
|
||||
}
|
||||
scm {
|
||||
connection = "scm:git:https://gitee.com/BDWare/MockJava.git"
|
||||
developerConnection = "scm:git:https://gitee.com/BDWare/MockJava.git"
|
||||
url = "https://gitee.com/BDWare/MockJava"
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
repositories {
|
||||
maven {
|
||||
name 'bdwareSnapshotRepository'
|
||||
url 'https://oss.sonatype.org/content/repositories/snapshots'
|
||||
credentials {
|
||||
username = "${NEXUS_USERNAME}"
|
||||
password = "${NEXUS_PASSWORD}"
|
||||
}
|
||||
}
|
||||
maven {
|
||||
name 'bdwareRepository'
|
||||
url 'https://oss.sonatype.org/service/local/staging/deploy/maven2'
|
||||
credentials {
|
||||
username = "${NEXUS_USERNAME}"
|
||||
password = "${NEXUS_PASSWORD}"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
signing {
|
||||
sign publishing.publications.mavenJava
|
||||
}
|
@ -1,65 +0,0 @@
|
||||
package org.bdware.mockjava;
|
||||
|
||||
import com.google.gson.*;
|
||||
import jdk.nashorn.api.scripting.ScriptObjectMirror;
|
||||
|
||||
import java.util.HashSet;
|
||||
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;
|
||||
if (obj.getClass() == jdk.nashorn.internal.runtime.Undefined.class)
|
||||
return JsonNull.INSTANCE;
|
||||
if (obj.getClass() == ScriptObjectMirror.class) {
|
||||
recorded.add(obj);
|
||||
ScriptObjectMirror som = (ScriptObjectMirror) obj;
|
||||
if (som.isFunction()) {
|
||||
return JsonNull.INSTANCE;
|
||||
}
|
||||
if (som.isArray()) {
|
||||
JsonArray jarray = new JsonArray();
|
||||
|
||||
for (String str : som.getOwnKeys(true)) {
|
||||
try {
|
||||
if (Integer.parseInt(str) >= 0)
|
||||
jarray.add(copyInternal(som.getMember(str)));
|
||||
} catch (Exception e) {
|
||||
// System.out.println("[JSONTool] ignore key:"+str);
|
||||
}
|
||||
}
|
||||
return jarray;
|
||||
} else {
|
||||
JsonObject jo = new JsonObject();
|
||||
for (String str : som.getOwnKeys(true)) {
|
||||
jo.add(str, copyInternal(som.getMember(str)));
|
||||
}
|
||||
return jo;
|
||||
}
|
||||
} else if (obj.getClass() == jdk.internal.dynalink.beans.StaticClass.class) {
|
||||
return JsonNull.INSTANCE;
|
||||
} else if (obj instanceof Number) {
|
||||
return new JsonPrimitive((Number) obj);
|
||||
|
||||
} else if (obj instanceof String) {
|
||||
return new JsonPrimitive((String) obj);
|
||||
|
||||
} else if (obj instanceof Character) {
|
||||
return new JsonPrimitive((Character) obj);
|
||||
}
|
||||
if (obj instanceof Boolean) {
|
||||
return new JsonPrimitive((Boolean) obj);
|
||||
}
|
||||
return JsonNull.INSTANCE;
|
||||
}
|
||||
}
|
@ -12,24 +12,28 @@ import java.util.Map;
|
||||
public class MockGenerator extends JsonVisitor {
|
||||
|
||||
public static MockGenerator instance = new MockGenerator();
|
||||
Map<String,ValueGenerator> prefixToGenerator;
|
||||
Map<String, ValueGenerator> prefixToGenerator;
|
||||
JsonElement result;
|
||||
|
||||
public JsonElement get() {
|
||||
return result;
|
||||
}
|
||||
public MockGenerator(Class ...clzs){
|
||||
|
||||
public MockGenerator(Class... clzs) {
|
||||
prefixToGenerator = new HashMap<>();
|
||||
for (Class clz:clzs){
|
||||
Generator generator =(Generator) clz.getAnnotation(Generator.class);
|
||||
if (generator!=null){
|
||||
for (Class clz : clzs) {
|
||||
Generator generator = (Generator) clz.getAnnotation(Generator.class);
|
||||
if (generator != null) {
|
||||
try {
|
||||
prefixToGenerator.put(generator.tag(),(ValueGenerator)clz.getConstructor().newInstance());
|
||||
prefixToGenerator.put(generator.tag(),
|
||||
(ValueGenerator) clz.getConstructor().newInstance());
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public JsonVisitor visitObject(JsonObject jsonObject) {
|
||||
JsonObject jo = new JsonObject();
|
||||
@ -59,9 +63,10 @@ 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( primitive);
|
||||
result = generator.generate(primitive);
|
||||
return this;
|
||||
}
|
||||
|
||||
@ -69,19 +74,19 @@ public class MockGenerator extends JsonVisitor {
|
||||
if (!str.startsWith("@")) {
|
||||
return new ValueGenerator() {
|
||||
@Override
|
||||
public JsonElement generate( JsonElement previous) {
|
||||
public JsonElement generate(JsonElement previous) {
|
||||
return new JsonPrimitive(str);
|
||||
}
|
||||
};
|
||||
}
|
||||
int from = str.indexOf("(");
|
||||
String prefix = from>=0?str.substring(0,from):str;
|
||||
ValueGenerator generator = prefixToGenerator.get(prefix);
|
||||
if (generator==null){
|
||||
String prefix = from >= 0 ? str.substring(0, from) : str;
|
||||
ValueGenerator generator = prefixToGenerator.get(prefix);
|
||||
if (generator == null) {
|
||||
return new ValueGenerator() {
|
||||
@Override
|
||||
public JsonElement generate(JsonElement previous) {
|
||||
return new JsonPrimitive("unknown type, prefix:"+prefix+" all:"+str);
|
||||
return new JsonPrimitive("unknown type, prefix:" + prefix + " all:" + str);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
@ -28,4 +28,4 @@ public class MockSchemaParser extends JsonVisitor {
|
||||
}
|
||||
return this;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -18,9 +18,8 @@ public class MockUtil {
|
||||
static {
|
||||
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)) {
|
||||
try (InputStream 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);
|
||||
@ -58,7 +57,8 @@ public class MockUtil {
|
||||
}
|
||||
|
||||
public static JsonElement parseJsonSchema(JsonElement ele) {
|
||||
if (ele == null) return null;
|
||||
if (ele == null)
|
||||
return null;
|
||||
if (ele.isJsonPrimitive()) {
|
||||
JsonPrimitive primitive = ele.getAsJsonPrimitive();
|
||||
if (primitive.isBoolean()) {
|
||||
|
@ -9,8 +9,10 @@ import java.util.Random;
|
||||
|
||||
@Generator(tag = "@integer")
|
||||
public class IntegerGenerator extends ValueGenerator {
|
||||
public IntegerGenerator(){}
|
||||
static Random secureRandom = new SecureRandom();
|
||||
public IntegerGenerator() {}
|
||||
|
||||
static Random secureRandom = new SecureRandom();
|
||||
|
||||
@Override
|
||||
public JsonElement generate(JsonElement previous) {
|
||||
// TODO parse value here
|
||||
|
@ -5,7 +5,7 @@ import com.google.gson.JsonParser;
|
||||
import org.junit.Test;
|
||||
|
||||
public class MockUtilTest {
|
||||
//TODO @zhanghongwei 把这个测试用例拆多几个
|
||||
// TODO @zhanghongwei 把这个测试用例拆多几个
|
||||
@Test
|
||||
public void main() {
|
||||
// "{'result|min-max':1}":min-max之间的一个数字 如:"{'result|1-100':1}" 返回: {"result":21}
|
||||
@ -14,13 +14,13 @@ public class MockUtilTest {
|
||||
// "{'result':'@datetime'}" "{'result':'@date'}" "{'result':'@time'}"
|
||||
// "{'result':'@cname'}" "{'result':'@name'}" "{'result':'@first'}" "{'result':'@last'}"
|
||||
// "{'result':'@email'}" "{'result':'@ip'}" {'result':'@url'}"
|
||||
// "{'result':'@province'}" "{'result':'@city'}" "{'result':'@county'}"
|
||||
// "{'result':'@province'}" "{'result':'@city'}" "{'result':'@county'}"
|
||||
// {'id':'@integer','email':'@email','password':'@string','name':'@name'}
|
||||
// String template="{'result|1-100':1}";
|
||||
///
|
||||
// Object res = mock("'@email'");
|
||||
// Object res = mock("'@email'");
|
||||
// if (res instanceof ScriptObjectMirror)
|
||||
// System.out.println(JSONTool.copy((ScriptObjectMirror) res));
|
||||
// System.out.println(JSONTool.copy((ScriptObjectMirror) res));
|
||||
// else System.out.println(res);
|
||||
// System.out.println(res);
|
||||
// "{'list|1-5':[{'id|+1':1,'data':'@datetime','nickname': '@cname','email':'@email'}]}
|
||||
@ -35,8 +35,8 @@ public class MockUtilTest {
|
||||
System.out.println(ele2);
|
||||
Object ret = MockUtil.mock(ele2.toString());
|
||||
|
||||
// System.out.println(
|
||||
// (JSONTool.copy((jdk.nashorn.api.scripting.ScriptObjectMirror)
|
||||
// System.out.println(
|
||||
// (JSONTool.copy((jdk.nashorn.api.scripting.ScriptObjectMirror)
|
||||
// mock(ele2.toString()))).toString());
|
||||
|
||||
System.out.println(MockUtil.mock("'@string'"));
|
||||
|
Loading…
x
Reference in New Issue
Block a user