VisualTests.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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_Notify_VisualParent_Changed()
  23. {
  24. var target = new TestVisual();
  25. var child = new TestVisual();
  26. var parents = new List<IVisual>();
  27. child.GetObservable(Visual.VisualParentProperty).Subscribe(x => parents.Add(x));
  28. target.AddChild(child);
  29. target.RemoveChild(child);
  30. Assert.Equal(new IVisual[] { null, target, null }, parents);
  31. }
  32. [Fact]
  33. public void Removed_Child_Should_Have_VisualParent_Cleared()
  34. {
  35. var target = new TestVisual();
  36. var child = new Visual();
  37. target.AddChild(child);
  38. target.RemoveChild(child);
  39. Assert.Null(child.GetVisualParent());
  40. }
  41. [Fact]
  42. public void Clearing_Children_Should_Clear_VisualParent()
  43. {
  44. var children = new[] { new Visual(), new Visual() };
  45. var target = new TestVisual();
  46. target.AddChildren(children);
  47. target.ClearChildren();
  48. var result = children.Select(x => x.GetVisualParent()).ToList();
  49. Assert.Equal(new Visual[] { null, null }, result);
  50. }
  51. [Fact]
  52. public void Adding_Children_Should_Fire_OnAttachedToVisualTree()
  53. {
  54. var child2 = new TestVisual();
  55. var child1 = new TestVisual { Child = child2 };
  56. var root = new TestRoot();
  57. var called1 = false;
  58. var called2 = false;
  59. child1.AttachedToVisualTree += (s, e) => called1 = true;
  60. child2.AttachedToVisualTree += (s, e) => called2 = true;
  61. root.Child = child1;
  62. Assert.True(called1);
  63. Assert.True(called2);
  64. }
  65. [Fact]
  66. public void Removing_Children_Should_Fire_OnDetachedFromVisualTree()
  67. {
  68. var child2 = new TestVisual();
  69. var child1 = new TestVisual { Child = child2 };
  70. var root = new TestRoot();
  71. var called1 = false;
  72. var called2 = false;
  73. root.Child = child1;
  74. child1.DetachedFromVisualTree += (s, e) => called1 = true;
  75. child2.DetachedFromVisualTree += (s, e) => called2 = true;
  76. root.Child = null;
  77. Assert.True(called1);
  78. Assert.True(called2);
  79. }
  80. }
  81. }