mirror of
https://github.com/LamGC/ContentGrabbingJi.git
synced 2025-04-29 22:27:33 +00:00
[Add] Framework-API 添加 framework.json 解析功能单元测试;
[Add] JsonFrameworkDescriptorSerializerTest 将 Gson 配置从 JsonFrameworkDescriptorFinder 抽离进行单独测试; [Add] test-framework.json 一个完整的测试用框架配置文件;
This commit is contained in:
parent
48d51b9da5
commit
52d015a4ba
@ -0,0 +1,95 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2020 LamGC
|
||||||
|
*
|
||||||
|
* ContentGrabbingJi is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as
|
||||||
|
* published by the Free Software Foundation, either version 3 of the
|
||||||
|
* License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* ContentGrabbingJi is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package net.lamgc.cgj.bot.framework;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.GsonBuilder;
|
||||||
|
import net.lamgc.cgj.bot.framework.message.BotCodeDescriptor;
|
||||||
|
import net.lamgc.cgj.bot.framework.util.AuthorJsonSerializer;
|
||||||
|
import net.lamgc.cgj.bot.framework.util.BotCodeDescriptorJsonSerializer;
|
||||||
|
import net.lamgc.cgj.bot.framework.util.PlatformJsonSerializer;
|
||||||
|
import net.lamgc.cgj.bot.framework.util.PluginDependencyJsonSerializer;
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.pf4j.PluginDependency;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
public class JsonFrameworkDescriptorSerializerTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void deserializerTest() throws IOException {
|
||||||
|
InputStream resource = getClass().getClassLoader().getResourceAsStream("test-framework.json");
|
||||||
|
if (resource == null) {
|
||||||
|
Assert.fail("未找到测试用资源: test-framework.json");
|
||||||
|
}
|
||||||
|
FrameworkDescriptor descriptor;
|
||||||
|
try (Reader resourceReader = new BufferedReader(new InputStreamReader(resource, StandardCharsets.UTF_8))) {
|
||||||
|
descriptor = getGson().fromJson(resourceReader, DefaultFrameworkDescriptor.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
Assert.assertEquals("cgj-mirai", descriptor.getPluginId());
|
||||||
|
Assert.assertEquals("test", descriptor.getPluginDescription());
|
||||||
|
Assert.assertEquals("3.0.0-alpha", descriptor.getVersion());
|
||||||
|
Assert.assertEquals("=>3.0.0", descriptor.getRequires());
|
||||||
|
Assert.assertEquals("Github@LamGC, Github@mamoe", descriptor.getProvider());
|
||||||
|
Assert.assertEquals("AGPL-3.0", descriptor.getLicense());
|
||||||
|
Assert.assertEquals("com.example.FrameworkMain", descriptor.getPluginClass());
|
||||||
|
|
||||||
|
List<PluginDependency> expectedDependency = new ArrayList<>();
|
||||||
|
expectedDependency.add(new PluginDependency("xxx@1.0.0"));
|
||||||
|
expectedDependency.add(new PluginDependency("xxx optional add->?@1.0.0"));
|
||||||
|
|
||||||
|
Assert.assertEquals(expectedDependency, descriptor.getDependencies());
|
||||||
|
|
||||||
|
Assert.assertEquals("Tencent QQ", descriptor.getPlatform().getPlatformName());
|
||||||
|
Assert.assertEquals("qq", descriptor.getPlatform().getPlatformIdentify());
|
||||||
|
|
||||||
|
List<Author> expectedAuthors = new ArrayList<>();
|
||||||
|
expectedAuthors.add(new Author("LamGC", "https://github.com/LamGC", "lam827@lamgc.net"));
|
||||||
|
|
||||||
|
Assert.assertEquals(expectedAuthors, descriptor.getAuthors());
|
||||||
|
|
||||||
|
List<String> expectedBotCodePatterns = new ArrayList<>();
|
||||||
|
expectedBotCodePatterns.add("(?:\\[mirai:([^:]+)\\])");
|
||||||
|
expectedBotCodePatterns.add("(?:\\[mirai:([^\\]]*)?:(.*?)?\\])");
|
||||||
|
expectedBotCodePatterns.add("(?:\\[mirai:([^\\]]*)?(:(.*?))*?\\])");
|
||||||
|
|
||||||
|
for (Pattern pattern : descriptor.getBotCodeDescriptor().getPatterns()) {
|
||||||
|
if (!expectedBotCodePatterns.contains(pattern.pattern())) {
|
||||||
|
Assert.fail("存在不符的表达式: " + pattern.pattern());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Gson getGson() {
|
||||||
|
return new GsonBuilder()
|
||||||
|
.serializeNulls()
|
||||||
|
.registerTypeAdapter(Author.class, new AuthorJsonSerializer())
|
||||||
|
.registerTypeAdapter(BotCodeDescriptor.class, new BotCodeDescriptorJsonSerializer())
|
||||||
|
.registerTypeAdapter(Platform.class, new PlatformJsonSerializer())
|
||||||
|
.registerTypeAdapter(PluginDependency.class, new PluginDependencyJsonSerializer())
|
||||||
|
.create();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,32 @@
|
|||||||
|
{
|
||||||
|
"id": "cgj-mirai",
|
||||||
|
"description": "test",
|
||||||
|
"version": "3.0.0-alpha",
|
||||||
|
"requiresVersion": "=>3.0.0",
|
||||||
|
"provider": "Github@LamGC, Github@mamoe",
|
||||||
|
"license": "AGPL-3.0",
|
||||||
|
"frameworkClass": "com.example.FrameworkMain",
|
||||||
|
"dependencies": [
|
||||||
|
"xxx@1.0.0",
|
||||||
|
"xxx optional add->?@1.0.0"
|
||||||
|
],
|
||||||
|
|
||||||
|
"platform": {
|
||||||
|
"name": "Tencent QQ",
|
||||||
|
"identify": "qq"
|
||||||
|
},
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "LamGC",
|
||||||
|
"url": "https://github.com/LamGC",
|
||||||
|
"email": "lam827@lamgc.net"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"botCode": {
|
||||||
|
"patterns": [
|
||||||
|
"(?:\\[mirai:([^:]+)\\])",
|
||||||
|
"(?:\\[mirai:([^\\]]*)?:(.*?)?\\])",
|
||||||
|
"(?:\\[mirai:([^\\]]*)?(:(.*?))*?\\])"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user