From 320858c4d03d4e46da9951ae6059fd3fbfc5d501 Mon Sep 17 00:00:00 2001 From: LamGC Date: Fri, 20 Nov 2020 23:16:14 +0800 Subject: [PATCH] =?UTF-8?q?[Change]=20Framework-API=20=E4=B8=BA=20CharSequ?= =?UTF-8?q?enceMessage=20=E6=9E=84=E9=80=A0=E4=B8=AD=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E9=9D=9E=E7=A9=BA=E6=A3=80=E6=9F=A5,=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=AE=8C=E6=95=B4=E7=9A=84=E5=AF=B9=E5=BA=94=E5=8D=95=E5=85=83?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E7=B1=BB;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [Change] CharSequenceMessage 添加对 content 为 null 的检查, 调整文档; [Change] CharSequenceMessageTest 添加针对 CharSequenceMessage 的完整单元测试类; --- .../message/CharSequenceMessage.java | 14 +++- .../message/CharSequenceMessageTest.java | 70 +++++++++++++++++++ 2 files changed, 82 insertions(+), 2 deletions(-) create mode 100644 ContentGrabbingJi-framework-api/src/test/java/net/lamgc/cgj/bot/framework/message/CharSequenceMessageTest.java diff --git a/ContentGrabbingJi-framework-api/src/main/java/net/lamgc/cgj/bot/framework/message/CharSequenceMessage.java b/ContentGrabbingJi-framework-api/src/main/java/net/lamgc/cgj/bot/framework/message/CharSequenceMessage.java index 8c770b7..94242c5 100644 --- a/ContentGrabbingJi-framework-api/src/main/java/net/lamgc/cgj/bot/framework/message/CharSequenceMessage.java +++ b/ContentGrabbingJi-framework-api/src/main/java/net/lamgc/cgj/bot/framework/message/CharSequenceMessage.java @@ -17,18 +17,28 @@ package net.lamgc.cgj.bot.framework.message; +import java.util.Objects; + /** * 字符序列消息对象. - *

仅包含了一段字符串. + *

仅包含了一段字符序列形式的内容. * @author LamGC */ public final class CharSequenceMessage implements Message { private final CharSequence content; + /** + * 构造一个 CharSequenceMessage. + * @param content 字符序列形式的内容. + * @throws NullPointerException 当 content 为 {@code null}, + * 或 content 为 {@link Message} 且 {@link Message#contentToString()} 返回 {@code null} 时抛出. + */ public CharSequenceMessage(CharSequence content) { + Objects.requireNonNull(content); + if (content instanceof Message) { - this.content = ((Message) content).contentToString(); + this.content = Objects.requireNonNull(((Message) content).contentToString()); } else { this.content = content; } diff --git a/ContentGrabbingJi-framework-api/src/test/java/net/lamgc/cgj/bot/framework/message/CharSequenceMessageTest.java b/ContentGrabbingJi-framework-api/src/test/java/net/lamgc/cgj/bot/framework/message/CharSequenceMessageTest.java new file mode 100644 index 0000000..682bd67 --- /dev/null +++ b/ContentGrabbingJi-framework-api/src/test/java/net/lamgc/cgj/bot/framework/message/CharSequenceMessageTest.java @@ -0,0 +1,70 @@ +/* + * 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 . + */ + +package net.lamgc.cgj.bot.framework.message; + +import org.junit.Assert; +import org.junit.Test; + +import java.lang.reflect.Field; + +/** + * @see CharSequenceMessage + */ +public class CharSequenceMessageTest { + + @Test + public void buildTest() { + final String contentStr = "test"; + + Assert.assertEquals(contentStr, new CharSequenceMessage(contentStr).contentToString()); + Assert.assertEquals(contentStr, new CharSequenceMessage(new StringBuilder(contentStr)).contentToString()); + } + + @Test(expected = NullPointerException.class) + public void nullContentTest() { + new CharSequenceMessage(null); + } + + @Test + public void buildWithMessageTest() throws NoSuchFieldException, IllegalAccessException { + final String testContent = "test123"; + + class TestMessage implements Message { + @Override + public String contentToString() { + return testContent; + } + } + + CharSequenceMessage charSequenceMessage = new CharSequenceMessage(new TestMessage()); + Assert.assertEquals(testContent, charSequenceMessage.contentToString()); + + Field contentField = CharSequenceMessage.class.getDeclaredField("content"); + contentField.setAccessible(true); + Assert.assertFalse(contentField.get(charSequenceMessage) instanceof Message); + } + + @Test + public void toStringTest() { + final String testContent = "test"; + + Assert.assertEquals("CharSequenceMessage{content='" + testContent + "'}", + new CharSequenceMessage(testContent).toString()); + } + +} \ No newline at end of file