VisualTests.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  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. }
  98. }