This commit is contained in:
Looly 2024-10-02 13:30:24 +08:00
parent 1ba62e8539
commit fbc14c86bf

View File

@ -2,6 +2,7 @@ package org.dromara.hutool.core.tree;
import lombok.Data; import lombok.Data;
import org.dromara.hutool.core.tree.parser.NodeParser; import org.dromara.hutool.core.tree.parser.NodeParser;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import java.util.ArrayList; import java.util.ArrayList;
@ -10,8 +11,48 @@ import java.util.List;
import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertEquals;
public class IssueIAUSHRTest { public class IssueIAUSHRTest {
private final NodeParser<TestDept, Long> nodeParser = (dept, tree) ->
tree.setId(dept.getDeptId())
.setParentId(dept.getParentId())
.setName(dept.getDeptName());
private final TreeNodeConfig treeNodeConfig = new TreeNodeConfig()
.setIdKey("deptId")
.setNameKey("deptName")
.setParentIdKey("parentId");
/**
* 理论上你所有节点的ID都不应该重复那你要构建一个列表形式的树结构指定的这个rootId应该是A节点的parentId而非A的id
*/
@Test
void buildTest() {
final List<TestDept> list = mockData();
final List<MapTree<Long>> build = TreeUtil.build(list, null, treeNodeConfig, nodeParser);
Assertions.assertEquals(1, build.size());
assertEquals("A", build.get(0).getName());
assertEquals(2, build.get(0).getChildren().size());
assertEquals("B", build.get(0).getChildren().get(0).getName());
assertEquals("C", build.get(0).getChildren().get(1).getName());
}
/**
* 构建单节点时如果指定的节点存在则这个节点作为根节点
*/
@Test @Test
void buildSingleTest() { void buildSingleTest() {
final List<TestDept> list = mockData();
final MapTree<Long> longTree = TreeUtil.buildSingle(list, 1L, treeNodeConfig, nodeParser);
assertEquals("A", longTree.getName());
assertEquals(2, longTree.getChildren().size());
assertEquals("B", longTree.getChildren().get(0).getName());
assertEquals("C", longTree.getChildren().get(1).getName());
}
private List<TestDept> mockData() {
final List<TestDept> list = new ArrayList<>(); final List<TestDept> list = new ArrayList<>();
TestDept sysDept = new TestDept(); TestDept sysDept = new TestDept();
sysDept.setDeptId(1L); sysDept.setDeptId(1L);
@ -31,26 +72,11 @@ public class IssueIAUSHRTest {
sysDept.setParentId(1L); sysDept.setParentId(1L);
list.add(sysDept); list.add(sysDept);
final TreeNodeConfig treeNodeConfig = new TreeNodeConfig(); return list;
treeNodeConfig.setIdKey("deptId");
treeNodeConfig.setNameKey("deptName");
treeNodeConfig.setParentIdKey("parentId");
final NodeParser<TestDept,Long> nodeParser= (dept, tree) ->
tree.setId(dept.getDeptId())
.setParentId(dept.getParentId())
.setName(dept.getDeptName());
final MapTree<Long> longTree = TreeUtil.buildSingle(list, 1L, treeNodeConfig, nodeParser);
assertEquals("A", longTree.getName());
assertEquals(2, longTree.getChildren().size());
assertEquals("B", longTree.getChildren().get(0).getName());
assertEquals("C", longTree.getChildren().get(1).getName());
} }
@Data @Data
public static class TestDept { static class TestDept {
private Long deptId; private Long deptId;
private String deptName; private String deptName;
private Long parentId; private Long parentId;