From d1ee867de551f2cb0fffe56923e518a3659ea31a Mon Sep 17 00:00:00 2001 From: "ah.jo" Date: Sat, 21 Dec 2024 15:13:13 +0900 Subject: [PATCH] Add forceExpand for specific TypeDefinition --- .../api/tree/DefaultTraverseNode.java | 21 +++++++++++++++++++ .../fixturemonkey/api/tree/TraverseNode.java | 17 +++++++++++++++ .../fixturemonkey/tree/ObjectNode.java | 10 +++++++++ 3 files changed, 48 insertions(+) diff --git a/fixture-monkey-api/src/main/java/com/navercorp/fixturemonkey/api/tree/DefaultTraverseNode.java b/fixture-monkey-api/src/main/java/com/navercorp/fixturemonkey/api/tree/DefaultTraverseNode.java index 8b7835ed8d..ef17994e44 100644 --- a/fixture-monkey-api/src/main/java/com/navercorp/fixturemonkey/api/tree/DefaultTraverseNode.java +++ b/fixture-monkey-api/src/main/java/com/navercorp/fixturemonkey/api/tree/DefaultTraverseNode.java @@ -268,6 +268,27 @@ public void forceExpand() { this.expandedTypeDefinition = resolvedTypeDefinition; } + @Override + public void forceExpand(TypeDefinition typeDefinition) { + List children; + if (this.getTreeProperty().isContainer()) { + children = this.expandContainerNode( + typeDefinition, + traverseContext.withParentProperties() + ).collect(Collectors.toList()); + } else { + children = this.generateChildrenNodes( + typeDefinition.getResolvedProperty(), + typeDefinition.getPropertyGenerator() + .generateChildProperties(typeDefinition.getResolvedProperty()), + this.nullInject, + traverseContext.withParentProperties() + ); + } + this.children = children; + this.expandedTypeDefinition = typeDefinition; + } + @Override public TraverseNodeMetadata getMetadata() { return this; diff --git a/fixture-monkey-api/src/main/java/com/navercorp/fixturemonkey/api/tree/TraverseNode.java b/fixture-monkey-api/src/main/java/com/navercorp/fixturemonkey/api/tree/TraverseNode.java index 3541029a64..460110a443 100644 --- a/fixture-monkey-api/src/main/java/com/navercorp/fixturemonkey/api/tree/TraverseNode.java +++ b/fixture-monkey-api/src/main/java/com/navercorp/fixturemonkey/api/tree/TraverseNode.java @@ -62,6 +62,23 @@ public interface TraverseNode { */ void forceExpand(); + /** + * expands the {@link TraverseNode} forcibly. In result, it always generates the child {@link TraverseNode}s. + * It generates the child {@link TraverseNode}s by given {@link TypeDefinition}. + * {@code Force} means that it expands as if it were a root node, even if it is not. + * Unlike {@link #expand()}, it expands without metadata generated on expanding of the parent {@link TraverseNode}. + *

+ * It will always append the {@link TraverseNode} nodes, + * not remove already created nodes unless it is not a container. + * The container's element nodes will shrink when the node is set by the fixed container object. + *

+ * The leaf {@link TraverseNode} may generate child {@link TraverseNode}s. + * For example, the {@link TraverseNode} with a self-reference. + * + * @param typeDefinition the {@link TypeDefinition} to expand forcibly + */ + void forceExpand(TypeDefinition typeDefinition); + /** * retrieves the metadata to traverse the tree. Some of its properties can be mutated during traversal. * diff --git a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/tree/ObjectNode.java b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/tree/ObjectNode.java index ac458f6ed1..7214886ae9 100644 --- a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/tree/ObjectNode.java +++ b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/tree/ObjectNode.java @@ -89,6 +89,16 @@ public void forceExpand() { ); } + @Override + public void forceExpand(TypeDefinition typeDefinition) { + this.traverseNode.forceExpand(typeDefinition); + this.setChildren( + nullSafe(this.traverseNode.getChildren()).asList().stream() + .map(it -> new ObjectNode(it, generateFixtureContext.newChildNodeContext())) + .collect(Collectors.toList()) + ); + } + @Override public TraverseNodeMetadata getMetadata() { return traverseNode.getMetadata();