123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- using System.Linq;
- using Avalonia.Automation.Peers;
- using Avalonia.Controls.Presenters;
- using Avalonia.Controls.Templates;
- using Avalonia.UnitTests;
- using Avalonia.VisualTree;
- using Xunit;
- #nullable enable
- namespace Avalonia.Controls.UnitTests.Automation
- {
- public class ControlAutomationPeerTests
- {
- public class Children : ScopedTestBase
- {
- [Fact]
- public void Creates_Children_For_Controls_In_Visual_Tree()
- {
- var panel = new Panel
- {
- Children =
- {
- new Border(),
- new Border(),
- },
- };
- var target = CreatePeer(panel);
- Assert.Equal(
- panel.GetVisualChildren(),
- target.GetChildren().Cast<ControlAutomationPeer>().Select(x => x.Owner));
- }
- [Fact]
- public void Creates_Children_when_Controls_Attached_To_Visual_Tree()
- {
- var contentControl = new ContentControl
- {
- Template = new FuncControlTemplate<ContentControl>((o, _) =>
- new ContentPresenter
- {
- Name = "PART_ContentPresenter",
- [!ContentPresenter.ContentProperty] = o[!ContentControl.ContentProperty],
- }),
- Content = new Border(),
- };
- var target = CreatePeer(contentControl);
- Assert.Empty(target.GetChildren());
- contentControl.Measure(Size.Infinity);
- Assert.Equal(1, target.GetChildren().Count);
- }
- [Fact]
- public void Updates_Children_When_VisualChildren_Added()
- {
- var panel = new Panel
- {
- Children =
- {
- new Border(),
- new Border(),
- },
- };
- var target = CreatePeer(panel);
- var children = target.GetChildren();
- Assert.Equal(2, children.Count);
- panel.Children.Add(new Decorator());
- children = target.GetChildren();
- Assert.Equal(3, children.Count);
- }
- [Fact]
- public void Updates_Children_When_VisualChildren_Removed()
- {
- var panel = new Panel
- {
- Children =
- {
- new Border(),
- new Border(),
- },
- };
- var target = CreatePeer(panel);
- var children = target.GetChildren();
- Assert.Equal(2, children.Count);
- panel.Children.RemoveAt(1);
- children = target.GetChildren();
- Assert.Equal(1, children.Count);
- }
- [Fact]
- public void Updates_Children_When_Visibility_Changes_From_Visible_To_Invisible()
- {
- var panel = new Panel
- {
- Children =
- {
- new Border(),
- new Border(),
- },
- };
- var target = CreatePeer(panel);
- var children = target.GetChildren();
- Assert.Equal(2, children.Count);
- panel.Children[1].IsVisible = false;
- children = target.GetChildren();
- Assert.Equal(1, children.Count);
- panel.Children[1].IsVisible = true;
- children = target.GetChildren();
- Assert.Equal(2, children.Count);
- }
- [Fact]
- public void Updates_Children_When_Visibility_Changes_From_Invisible_To_Visible()
- {
- var panel = new Panel
- {
- Children =
- {
- new Border(),
- new Border { IsVisible = false },
- },
- };
- var target = CreatePeer(panel);
- var children = target.GetChildren();
- Assert.Equal(1, children.Count);
- panel.Children[1].IsVisible = true;
- children = target.GetChildren();
- Assert.Equal(2, children.Count);
- }
- }
- public class Parent : ScopedTestBase
- {
- [Fact]
- public void Connects_Peer_To_Tree_When_GetParent_Called()
- {
- var border = new Border();
- var tree = new Decorator
- {
- Child = new Decorator
- {
- Child = border,
- }
- };
- // We're accessing Border directly without going via its ancestors. Because the tree
- // is built lazily, ensure that calling GetParent causes the ancestor tree to be built.
- var target = CreatePeer(border);
- var parentPeer = Assert.IsAssignableFrom<ControlAutomationPeer>(target.GetParent());
- Assert.Same(border.GetVisualParent(), parentPeer.Owner);
- }
- [Fact]
- public void Parent_Updated_When_Moved_To_Separate_Visual_Tree()
- {
- var border = new Border();
- var root1 = new Decorator { Child = border };
- var root2 = new Decorator();
- var target = CreatePeer(border);
- var parentPeer = Assert.IsAssignableFrom<ControlAutomationPeer>(target.GetParent());
- Assert.Same(root1, parentPeer.Owner);
- root1.Child = null;
- Assert.Null(target.GetParent());
- root2.Child = border;
- parentPeer = Assert.IsAssignableFrom<ControlAutomationPeer>(target.GetParent());
- Assert.Same(root2, parentPeer.Owner);
- }
- }
- private static AutomationPeer CreatePeer(Control control)
- {
- return ControlAutomationPeer.CreatePeerForElement(control);
- }
- }
- }
|