VisualTests.cs 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. // Copyright (c) The Perspex Project. All rights reserved.
  2. // Licensed under the MIT license. See licence.md file in the project root for full license information.
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using Perspex.Controls;
  7. using Perspex.VisualTree;
  8. using Xunit;
  9. namespace Perspex.SceneGraph.UnitTests
  10. {
  11. public class VisualTests
  12. {
  13. [Fact]
  14. public void Added_Child_Should_Have_VisualParent_Set()
  15. {
  16. var target = new TestVisual();
  17. var child = new Visual();
  18. target.AddChild(child);
  19. Assert.Equal(target, child.GetVisualParent());
  20. }
  21. [Fact]
  22. public void Added_Child_Should_Have_InheritanceParent_Set()
  23. {
  24. var target = new TestVisual();
  25. var child = new TestVisual();
  26. target.AddChild(child);
  27. Assert.Equal(target, child.InheritanceParent);
  28. }
  29. [Fact]
  30. public void Added_Child_Should_Notify_VisualParent_Changed()
  31. {
  32. var target = new TestVisual();
  33. var child = new TestVisual();
  34. var parents = new List<IVisual>();
  35. child.GetObservable(Visual.VisualParentProperty).Subscribe(x => parents.Add(x));
  36. target.AddChild(child);
  37. target.RemoveChild(child);
  38. Assert.Equal(new IVisual[] { null, target, null }, parents);
  39. }
  40. [Fact]
  41. public void Removed_Child_Should_Have_VisualParent_Cleared()
  42. {
  43. var target = new TestVisual();
  44. var child = new Visual();
  45. target.AddChild(child);
  46. target.RemoveChild(child);
  47. Assert.Null(child.GetVisualParent());
  48. }
  49. [Fact]
  50. public void Removed_Child_Should_Have_InheritanceParent_Cleared()
  51. {
  52. var target = new TestVisual();
  53. var child = new TestVisual();
  54. target.AddChild(child);
  55. target.RemoveChild(child);
  56. Assert.Null(child.InheritanceParent);
  57. }
  58. [Fact]
  59. public void Clearing_Children_Should_Clear_VisualParent()
  60. {
  61. var children = new[] { new Visual(), new Visual() };
  62. var target = new TestVisual();
  63. target.AddChildren(children);
  64. target.ClearChildren();
  65. var result = children.Select(x => x.GetVisualParent()).ToList();
  66. Assert.Equal(new Visual[] { null, null }, result);
  67. }
  68. [Fact]
  69. public void Adding_Children_Should_Fire_OnAttachedToVisualTree()
  70. {
  71. var child2 = new TestVisual();
  72. var child1 = new TestVisual { Child = child2 };
  73. var root = new TestRoot();
  74. var called1 = false;
  75. var called2 = false;
  76. child1.AttachedToVisualTree += (s, e) => called1 = true;
  77. child2.AttachedToVisualTree += (s, e) => called2 = true;
  78. root.Child = child1;
  79. Assert.True(called1);
  80. Assert.True(called2);
  81. }
  82. [Fact]
  83. public void Removing_Children_Should_Fire_OnDetachedFromVisualTree()
  84. {
  85. var child2 = new TestVisual();
  86. var child1 = new TestVisual { Child = child2 };
  87. var root = new TestRoot();
  88. var called1 = false;
  89. var called2 = false;
  90. root.Child = child1;
  91. child1.DetachedFromVisualTree += (s, e) => called1 = true;
  92. child2.DetachedFromVisualTree += (s, e) => called2 = true;
  93. root.Child = null;
  94. Assert.True(called1);
  95. Assert.True(called2);
  96. }
  97. [Fact]
  98. public void Controls_Should_Add_Themselves_To_Root_NameScope()
  99. {
  100. var child2 = new TestVisual { Name = "bar" };
  101. var child1 = new TestVisual { Name = "foo", Child = child2 };
  102. var root = new TestRoot { Child = child1 };
  103. Assert.Same(child1, root.Find("foo"));
  104. Assert.Same(child2, root.Find("bar"));
  105. }
  106. [Fact]
  107. public void Controls_Should_Add_Themselves_To_NameScopes_In_Attached_Property()
  108. {
  109. var child2 = new TestVisual { Name = "bar", [NameScope.NameScopeProperty] = new NameScope() };
  110. var child1 = new TestVisual { Name = "foo", Child = child2};
  111. var root = new TestRoot { Child = child1 };
  112. Assert.Same(child1, root.Find("foo"));
  113. Assert.Null(root.Find("bar"));
  114. Assert.Same(child2, NameScope.GetNameScope(child2).Find("bar"));
  115. }
  116. [Fact]
  117. public void Controls_Should_Remove_Themselves_From_Root_NameScope()
  118. {
  119. var child2 = new TestVisual { Name = "bar" };
  120. var child1 = new TestVisual { Name = "foo", Child = child2 };
  121. var root = new TestRoot { Child = child1 };
  122. root.Child = null;
  123. Assert.Null(root.Find("foo"));
  124. Assert.Null(root.Find("bar"));
  125. }
  126. [Fact]
  127. public void Controls_Should_Remove_Themselves_From_NameScopes_In_Attached_Property()
  128. {
  129. var child2 = new TestVisual { Name = "bar" };
  130. var child1 = new TestVisual { Name = "foo", Child = child2,[NameScope.NameScopeProperty] = new NameScope() };
  131. var root = new TestRoot { Child = child1 };
  132. root.Child = null;
  133. Assert.Null(root.Find("foo"));
  134. Assert.Null(root.Find("bar"));
  135. Assert.Null(NameScope.GetNameScope(child1).Find("bar"));
  136. }
  137. }
  138. }