From 20c9b28e8bd0acee4eacbd98659d7bd7780e0e7e Mon Sep 17 00:00:00 2001 From: sp42 Date: Mon, 15 Apr 2024 23:07:53 +0800 Subject: [PATCH] ci --- .../aj-framework/aj-common-parent/pom.xml | 4 +- aj-backend/aj-framework/aj-framework/pom.xml | 6 +- aj-backend/aj-framework/aj-net/pom.xml | 4 +- aj-backend/aj-framework/aj-util/pom.xml | 2 +- .../main/java/com/ajaxjs/util/XmlHelper.java | 1 - .../java/com/ajaxjs/util/io/Resources.java | 4 +- .../java/com/ajaxjs/util/io/StreamHelper.java | 13 +- .../java/com/ajaxjs/util/TestXmlHelper.java | 113 ++++++++++++++++-- .../src/test/{java => resources}/test.txt | 0 .../aj-util/src/test/resources/test.xml | 4 + .../aj-util/src/test/resources/test2.xml | 1 + aj-backend/aj-iam/aj-iam-server/pom.xml | 2 +- aj-backend/aj-playground/aj-s3client/pom.xml | 2 +- 13 files changed, 133 insertions(+), 23 deletions(-) rename aj-backend/aj-framework/aj-util/src/test/{java => resources}/test.txt (100%) create mode 100644 aj-backend/aj-framework/aj-util/src/test/resources/test.xml create mode 100644 aj-backend/aj-framework/aj-util/src/test/resources/test2.xml diff --git a/aj-backend/aj-framework/aj-common-parent/pom.xml b/aj-backend/aj-framework/aj-common-parent/pom.xml index b3be09ed5..d537b8151 100644 --- a/aj-backend/aj-framework/aj-common-parent/pom.xml +++ b/aj-backend/aj-framework/aj-common-parent/pom.xml @@ -9,7 +9,7 @@ aj-common-parent - 1.8 + 1.9 pom 常见项目的依赖 @@ -148,7 +148,7 @@ com.ajaxjs ajaxjs-framework - 1.1.8 + 1.2.0 \ No newline at end of file diff --git a/aj-backend/aj-framework/aj-framework/pom.xml b/aj-backend/aj-framework/aj-framework/pom.xml index 18941d917..575697a5d 100644 --- a/aj-backend/aj-framework/aj-framework/pom.xml +++ b/aj-backend/aj-framework/aj-framework/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 ajaxjs-framework - 1.1.8 + 1.2.0 aj-framework 轻量级的开发框架 jar @@ -38,14 +38,14 @@ com.ajaxjs ajaxjs-util - 1.1.3 + 1.1.4 com.ajaxjs ajaxjs-net - 1.0.2 + 1.0.3 diff --git a/aj-backend/aj-framework/aj-net/pom.xml b/aj-backend/aj-framework/aj-net/pom.xml index f74df88af..5e0d9e87f 100644 --- a/aj-backend/aj-framework/aj-net/pom.xml +++ b/aj-backend/aj-framework/aj-net/pom.xml @@ -4,7 +4,7 @@ 4.0.0 ajaxjs-net aj-net - 1.0.2 + 1.0.3 网络组件 jar @@ -19,7 +19,7 @@ com.ajaxjs ajaxjs-util - 1.1.3 + 1.1.4 diff --git a/aj-backend/aj-framework/aj-util/pom.xml b/aj-backend/aj-framework/aj-util/pom.xml index baa780ecd..7eec11935 100644 --- a/aj-backend/aj-framework/aj-util/pom.xml +++ b/aj-backend/aj-framework/aj-util/pom.xml @@ -4,7 +4,7 @@ 4.0.0 ajaxjs-util Small Java Utils Library with many powerful components - 1.1.3 + 1.1.4 jar diff --git a/aj-backend/aj-framework/aj-util/src/main/java/com/ajaxjs/util/XmlHelper.java b/aj-backend/aj-framework/aj-util/src/main/java/com/ajaxjs/util/XmlHelper.java index 51ee4c7e1..363302075 100644 --- a/aj-backend/aj-framework/aj-util/src/main/java/com/ajaxjs/util/XmlHelper.java +++ b/aj-backend/aj-framework/aj-util/src/main/java/com/ajaxjs/util/XmlHelper.java @@ -35,7 +35,6 @@ /** * XML 处理工具类 - * * ... * * @author sp42 frank@ajaxjs.com diff --git a/aj-backend/aj-framework/aj-util/src/main/java/com/ajaxjs/util/io/Resources.java b/aj-backend/aj-framework/aj-util/src/main/java/com/ajaxjs/util/io/Resources.java index 916f363d4..8532223fa 100644 --- a/aj-backend/aj-framework/aj-util/src/main/java/com/ajaxjs/util/io/Resources.java +++ b/aj-backend/aj-framework/aj-util/src/main/java/com/ajaxjs/util/io/Resources.java @@ -27,7 +27,7 @@ @Slf4j public class Resources { /** - * 获取 Classpath 根目录下的资源文件 + * 获取 Classpath 根目录下的资源文件的路径 * * @param resource 文件名称,输入空字符串这返回 Classpath 根目录 * @param isDecode 是否解码 @@ -179,7 +179,7 @@ static void listResourceFile() { } /** - * 执行 OS 命令 + * 执行 OS 命令 * * @param cmd 命令 * @param fn 回调函数 diff --git a/aj-backend/aj-framework/aj-util/src/main/java/com/ajaxjs/util/io/StreamHelper.java b/aj-backend/aj-framework/aj-util/src/main/java/com/ajaxjs/util/io/StreamHelper.java index fd53e84bd..a45749fec 100644 --- a/aj-backend/aj-framework/aj-util/src/main/java/com/ajaxjs/util/io/StreamHelper.java +++ b/aj-backend/aj-framework/aj-util/src/main/java/com/ajaxjs/util/io/StreamHelper.java @@ -58,10 +58,22 @@ public static String byteStream2string_Charset(InputStream in, Charset encode) { return result.toString(); } + /** + * 从输入流中读取数据,并对每行数据应用提供的消费函数。 + * + * @param in 输入流,从中读取数据。 + * @param fn 消费函数,用于处理读取到的每行数据。 + */ public static void read(InputStream in, Consumer fn) { read(new InputStreamReader(in, StandardCharsets.UTF_8), fn); } + /** + * 从 InputStreamReader 中读取数据,并逐行消费。 + * + * @param inReader 输入流读取器,用于读取数据。 + * @param fn 消费函数,接收一行数据作为参数,对每行数据进行处理。 + */ public static void read(InputStreamReader inReader, Consumer fn) { try ( /* @@ -296,5 +308,4 @@ public static byte[] charToByte(char[] chars) { return bytes; } - } diff --git a/aj-backend/aj-framework/aj-util/src/test/java/com/ajaxjs/util/TestXmlHelper.java b/aj-backend/aj-framework/aj-util/src/test/java/com/ajaxjs/util/TestXmlHelper.java index 964752daa..fa77b0967 100644 --- a/aj-backend/aj-framework/aj-util/src/test/java/com/ajaxjs/util/TestXmlHelper.java +++ b/aj-backend/aj-framework/aj-util/src/test/java/com/ajaxjs/util/TestXmlHelper.java @@ -1,17 +1,112 @@ package com.ajaxjs.util; -import static org.junit.Assert.assertNotNull; +import com.ajaxjs.util.io.Resources; +import org.junit.Test; +import org.mockito.Mockito; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import java.lang.reflect.Method; import java.util.Map; +import java.util.function.BiConsumer; +import java.util.function.Consumer; -import org.junit.Test; - +import static org.junit.Assert.*; +import static org.mockito.Mockito.*; public class TestXmlHelper { - @Test - public void test() { - String xml = "C:\\project\\doctor\\WebContent\\META-INF\\context.xml"; - Map map = XmlHelper.nodeAsMap(xml, "//Resource[@name='jdbc/mys2ql']"); - assertNotNull(map); - } + @Test + public void testInitBuilder() { + // 测试 initBuilder 方法是否能够返回非空的 DocumentBuilder 实例 + DocumentBuilder builder = XmlHelper.initBuilder(); + assertNotNull(builder); + + // 验证返回的 DocumentBuilder 是否是有效的实例 + assertTrue(builder instanceof DocumentBuilder); + + // 测试 initBuilder 在异常情况下的行为,是否返回 null + // 我们将通过反射禁用工厂来模拟 ParserConfigurationException + try { + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + Method method = DocumentBuilderFactory.class.getDeclaredMethod("setValidating", boolean.class); + method.setAccessible(true); + method.invoke(factory, true); // 设置为验证状态,这将导致 ParserConfigurationException + + DocumentBuilder invalidBuilder = factory.newDocumentBuilder(); + System.out.println("Expected ParserConfigurationException to be thrown"); + } catch (Exception e) { + // 我们期望在调用 factory.newDocumentBuilder() 时捕获异常 + assertTrue(e.getCause() instanceof ParserConfigurationException); + } + } + + private Consumer mockConsumer = mock(Consumer.class); + ; + + @Test + public void testXPathWithValidXmlAndXPath() { + String xpath = "/root/element"; + // 执行测试方法 + XmlHelper.xPath(Resources.getResourcesFromClasspath("test.xml"), xpath, mockConsumer); + + // 验证 Consumer 是否被正确调用 + verify(mockConsumer, times(1)).accept(any(Node.class)); + } + + @Test + public void testXPathWithInvalidXPath() { + String xpath = "/root/invalidElement"; + + // 执行测试方法,期待不抛出异常 + XmlHelper.xPath(Resources.getResourcesFromClasspath("test.xml"), xpath, mockConsumer); + + // 由于 XPath 不匹配,Consumer 不应该被调用 + verify(mockConsumer, never()).accept(any(Node.class)); + } + + @Test + public void testParseXML() { + // 假设的 XML 内容 + String xmlContent = "Content"; + // 创建一个模拟的 BiConsumer + BiConsumer consumerMock = Mockito.mock(BiConsumer.class); + // 创建模拟的节点和子节点列表 + Node mockNode = Mockito.mock(Node.class); + NodeList mockNodeList = Mockito.mock(NodeList.class); + // 当调用 getLength() 方法时返回 1 + when(mockNodeList.getLength()).thenReturn(1); + // 当调用 item(0) 方法时返回 mockNode + when(mockNodeList.item(0)).thenReturn(mockNode); + + // 验证 initBuilder() 方法至少被调用一次 + Mockito.doReturn(mock(DocumentBuilder.class)).when(XmlHelper.class); + XmlHelper.initBuilder(); + + // 调用待测试的 parseXML 方法 + XmlHelper.parseXML(xmlContent, consumerMock); + + // 验证 consumerMock 被正确调用 + verify(consumerMock, times(1)).accept(any(Node.class), any(NodeList.class)); + } + + @Test + public void testNodeAsMapWithValidXmlAndXPath() { + String xpath = "/root/element"; + Map expectedMap = ObjectHelper.hashMap("attr1", "value1", "attr2", "value2"); + + Map result = XmlHelper.nodeAsMap(Resources.getResourcesFromClasspath("test2.xml"), xpath); + + assertNotNull(result); + assertEquals(expectedMap, result); + } + + @Test + public void testNodeAsMapWithInvalidXPath() { + String xpath = "/root/invalidElement"; + Map result = XmlHelper.nodeAsMap(Resources.getResourcesFromClasspath("test2.xml"), xpath); + assertNull(result); + } } diff --git a/aj-backend/aj-framework/aj-util/src/test/java/test.txt b/aj-backend/aj-framework/aj-util/src/test/resources/test.txt similarity index 100% rename from aj-backend/aj-framework/aj-util/src/test/java/test.txt rename to aj-backend/aj-framework/aj-util/src/test/resources/test.txt diff --git a/aj-backend/aj-framework/aj-util/src/test/resources/test.xml b/aj-backend/aj-framework/aj-util/src/test/resources/test.xml new file mode 100644 index 000000000..8217f501b --- /dev/null +++ b/aj-backend/aj-framework/aj-util/src/test/resources/test.xml @@ -0,0 +1,4 @@ + + + Content + \ No newline at end of file diff --git a/aj-backend/aj-framework/aj-util/src/test/resources/test2.xml b/aj-backend/aj-framework/aj-util/src/test/resources/test2.xml new file mode 100644 index 000000000..17efa7ea4 --- /dev/null +++ b/aj-backend/aj-framework/aj-util/src/test/resources/test2.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/aj-backend/aj-iam/aj-iam-server/pom.xml b/aj-backend/aj-iam/aj-iam-server/pom.xml index e0fabf542..c4c9aa151 100644 --- a/aj-backend/aj-iam/aj-iam-server/pom.xml +++ b/aj-backend/aj-iam/aj-iam-server/pom.xml @@ -5,7 +5,7 @@ com.ajaxjs aj-common-parent - 1.8 + 1.9 aj-iam-server diff --git a/aj-backend/aj-playground/aj-s3client/pom.xml b/aj-backend/aj-playground/aj-s3client/pom.xml index 7f34f866f..705e0cfb5 100644 --- a/aj-backend/aj-playground/aj-s3client/pom.xml +++ b/aj-backend/aj-playground/aj-s3client/pom.xml @@ -19,7 +19,7 @@ com.ajaxjs ajaxjs-net - 1.0.2 + 1.0.3