BoundsTrackerTests.cs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  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 System.Reactive.Linq;
  7. using Perspex.Controls;
  8. using Perspex.Controls.Shapes;
  9. using Perspex.VisualTree;
  10. using Xunit;
  11. namespace Perspex.SceneGraph.UnitTests.VisualTree
  12. {
  13. public class BoundsTrackerTests
  14. {
  15. [Fact]
  16. public void Should_Track_Bounds()
  17. {
  18. var target = new BoundsTracker();
  19. var control = default(Rectangle);
  20. var tree = new Decorator
  21. {
  22. Padding = new Thickness(10),
  23. Child = new Decorator
  24. {
  25. Padding = new Thickness(5),
  26. Child = control = new Rectangle
  27. {
  28. Width = 15,
  29. Height = 15,
  30. },
  31. }
  32. };
  33. tree.Measure(Size.Infinity);
  34. tree.Arrange(new Rect(0, 0, 100, 100));
  35. var track = target.Track(control, tree);
  36. var results = new List<TransformedBounds>();
  37. track.Subscribe(results.Add);
  38. Assert.Equal(new Rect(42, 42, 15, 15), results[0].Bounds);
  39. tree.Padding = new Thickness(15);
  40. tree.Measure(Size.Infinity);
  41. tree.Arrange(new Rect(0, 0, 100, 100));
  42. Assert.Equal(new Rect(37, 37, 15, 15), results[1].Bounds);
  43. }
  44. }
  45. }