feat(ui): add ExpandAll, CollapseAll, RevealNode to TreeView (R12, R13)
This commit is contained in:
@@ -383,4 +383,77 @@ public class TreeViewTests : BunitContext
|
||||
var labels = cut.FindAll(".node-label");
|
||||
Assert.DoesNotContain(labels, l => l.TextContent == "Alpha-1");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ExpandAll_ExpandsAllBranches()
|
||||
{
|
||||
var cut = RenderTreeView();
|
||||
|
||||
// Everything collapsed initially
|
||||
Assert.Equal(2, cut.FindAll(".node-label").Count);
|
||||
|
||||
cut.InvokeAsync(() => cut.Instance.ExpandAll());
|
||||
|
||||
var labels = cut.FindAll(".node-label");
|
||||
Assert.Contains(labels, l => l.TextContent == "Alpha-1");
|
||||
Assert.Contains(labels, l => l.TextContent == "Alpha-2");
|
||||
Assert.Contains(labels, l => l.TextContent == "Alpha-2-X");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void CollapseAll_CollapsesAllBranches()
|
||||
{
|
||||
var cut = RenderTreeView(initiallyExpanded: _ => true);
|
||||
|
||||
// Verify deep content is visible
|
||||
var labels = cut.FindAll(".node-label");
|
||||
Assert.Contains(labels, l => l.TextContent == "Alpha-2-X");
|
||||
|
||||
cut.InvokeAsync(() => cut.Instance.CollapseAll());
|
||||
|
||||
// Only roots should be visible
|
||||
labels = cut.FindAll(".node-label");
|
||||
Assert.Equal(2, labels.Count);
|
||||
Assert.DoesNotContain(labels, l => l.TextContent == "Alpha-1");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RevealNode_ExpandsAncestors()
|
||||
{
|
||||
var cut = RenderTreeView();
|
||||
|
||||
// Everything collapsed initially
|
||||
Assert.Equal(2, cut.FindAll(".node-label").Count);
|
||||
|
||||
cut.InvokeAsync(() => cut.Instance.RevealNode("a2x"));
|
||||
|
||||
// Alpha-2-X should now be visible (Alpha and Alpha-2 expanded)
|
||||
var labels = cut.FindAll(".node-label");
|
||||
Assert.Contains(labels, l => l.TextContent == "Alpha-2-X");
|
||||
Assert.Contains(labels, l => l.TextContent == "Alpha-1"); // sibling also visible since Alpha is expanded
|
||||
Assert.Contains(labels, l => l.TextContent == "Alpha-2");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RevealNode_WithSelect_SelectsNode()
|
||||
{
|
||||
object? selected = null;
|
||||
var cut = RenderTreeView(selectable: true, onSelectedKeyChanged: k => selected = k);
|
||||
|
||||
cut.InvokeAsync(() => cut.Instance.RevealNode("a2x", select: true));
|
||||
|
||||
Assert.Equal("a2x", selected);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RevealNode_UnknownKey_NoOp()
|
||||
{
|
||||
var cut = RenderTreeView();
|
||||
|
||||
cut.InvokeAsync(() => cut.Instance.RevealNode("nonexistent"));
|
||||
|
||||
// Alpha should still be collapsed
|
||||
var labels = cut.FindAll(".node-label");
|
||||
Assert.Equal(2, labels.Count);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user