SceneBuilderTests.cs 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. using System;
  2. using Avalonia.Controls;
  3. using Avalonia.Media;
  4. using Avalonia.Rendering.SceneGraph;
  5. using Avalonia.UnitTests;
  6. using Xunit;
  7. namespace Avalonia.Visuals.UnitTests.Rendering.SceneGraph
  8. {
  9. public class SceneBuilderTests
  10. {
  11. [Fact]
  12. public void Should_Build_Initial_Scene()
  13. {
  14. using (UnitTestApplication.Start(TestServices.MockPlatformRenderInterface))
  15. {
  16. Border border;
  17. TextBlock textBlock;
  18. var tree = new TestRoot
  19. {
  20. Child = border = new Border
  21. {
  22. Background = Brushes.Red,
  23. Child = textBlock = new TextBlock
  24. {
  25. Text = "Hello World",
  26. }
  27. }
  28. };
  29. var initial = new Scene(tree);
  30. var result = SceneBuilder.Update(initial);
  31. Assert.NotSame(initial, result);
  32. Assert.Equal(1, result.Root.Children.Count);
  33. var borderNode = (VisualNode)result.Root.Children[0];
  34. Assert.Same(borderNode, result.FindNode(border));
  35. Assert.Same(border, borderNode.Visual);
  36. Assert.Equal(2, borderNode.Children.Count);
  37. var backgroundNode = (RectangleNode)borderNode.Children[0];
  38. Assert.Equal(Brushes.Red, backgroundNode.Brush);
  39. var textBlockNode = (VisualNode)borderNode.Children[1];
  40. Assert.Same(textBlockNode, result.FindNode(textBlock));
  41. Assert.Same(textBlock, textBlockNode.Visual);
  42. Assert.Equal(1, textBlockNode.Children.Count);
  43. var textNode = (TextNode)textBlockNode.Children[0];
  44. Assert.NotNull(textNode.Text);
  45. }
  46. }
  47. [Fact]
  48. public void Should_Update_Border_Background_Node()
  49. {
  50. using (UnitTestApplication.Start(TestServices.MockPlatformRenderInterface))
  51. {
  52. Border border;
  53. TextBlock textBlock;
  54. var tree = new TestRoot
  55. {
  56. Child = border = new Border
  57. {
  58. Background = Brushes.Red,
  59. Child = textBlock = new TextBlock
  60. {
  61. Text = "Hello World",
  62. }
  63. }
  64. };
  65. var initial = SceneBuilder.Update(new Scene(tree));
  66. var initialBackgroundNode = initial.FindNode(border).Children[0];
  67. var initialTextNode = initial.FindNode(textBlock).Children[0];
  68. Assert.NotNull(initialBackgroundNode);
  69. Assert.NotNull(initialTextNode);
  70. border.Background = Brushes.Green;
  71. var result = SceneBuilder.Update(initial);
  72. Assert.NotSame(initial, result);
  73. var borderNode = (VisualNode)result.Root.Children[0];
  74. Assert.Same(border, borderNode.Visual);
  75. var backgroundNode = (RectangleNode)borderNode.Children[0];
  76. Assert.NotSame(initialBackgroundNode, backgroundNode);
  77. Assert.Equal(Brushes.Green, backgroundNode.Brush);
  78. var textBlockNode = (VisualNode)borderNode.Children[1];
  79. Assert.Same(textBlock, textBlockNode.Visual);
  80. var textNode = (TextNode)textBlockNode.Children[0];
  81. Assert.Same(initialTextNode, textNode);
  82. }
  83. }
  84. [Fact]
  85. public void Should_Update_When_Control_Removed()
  86. {
  87. using (UnitTestApplication.Start(TestServices.MockPlatformRenderInterface))
  88. {
  89. Border border;
  90. TextBlock textBlock;
  91. var tree = new TestRoot
  92. {
  93. Child = border = new Border
  94. {
  95. Background = Brushes.Red,
  96. Child = textBlock = new TextBlock
  97. {
  98. Text = "Hello World",
  99. }
  100. }
  101. };
  102. var initial = SceneBuilder.Update(new Scene(tree));
  103. border.Child = null;
  104. var result = SceneBuilder.Update(initial);
  105. Assert.NotSame(initial, result);
  106. var borderNode = (VisualNode)result.Root.Children[0];
  107. Assert.Equal(1, borderNode.Children.Count);
  108. }
  109. }
  110. }
  111. }