ScrollViewerTests.cs 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. // Copyright (c) The Avalonia 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 Avalonia.Controls.Presenters;
  6. using Avalonia.Controls.Primitives;
  7. using Avalonia.Controls.Templates;
  8. using Xunit;
  9. namespace Avalonia.Controls.UnitTests
  10. {
  11. public class ScrollViewerTests
  12. {
  13. [Fact]
  14. public void Content_Is_Created()
  15. {
  16. var target = new ScrollViewer
  17. {
  18. Template = new FuncControlTemplate<ScrollViewer>(CreateTemplate),
  19. Content = "Foo",
  20. };
  21. target.ApplyTemplate();
  22. ((ContentPresenter)target.Presenter).UpdateChild();
  23. Assert.IsType<TextBlock>(target.Presenter.Child);
  24. }
  25. [Fact]
  26. public void CanHorizontallyScroll_Should_Track_HorizontalScrollBarVisibility()
  27. {
  28. var target = new ScrollViewer();
  29. var values = new List<bool>();
  30. target.GetObservable(ScrollViewer.CanHorizontallyScrollProperty).Subscribe(x => values.Add(x));
  31. target.HorizontalScrollBarVisibility = ScrollBarVisibility.Disabled;
  32. target.HorizontalScrollBarVisibility = ScrollBarVisibility.Auto;
  33. Assert.Equal(new[] { true, false, true }, values);
  34. }
  35. [Fact]
  36. public void CanVerticallyScroll_Should_Track_VerticalScrollBarVisibility()
  37. {
  38. var target = new ScrollViewer();
  39. var values = new List<bool>();
  40. target.GetObservable(ScrollViewer.CanVerticallyScrollProperty).Subscribe(x => values.Add(x));
  41. target.VerticalScrollBarVisibility = ScrollBarVisibility.Disabled;
  42. target.VerticalScrollBarVisibility = ScrollBarVisibility.Auto;
  43. Assert.Equal(new[] { true, false, true }, values);
  44. }
  45. [Fact]
  46. public void Offset_Should_Be_Coerced_To_Viewport()
  47. {
  48. var target = new ScrollViewer();
  49. target.SetValue(ScrollViewer.ExtentProperty, new Size(20, 20));
  50. target.SetValue(ScrollViewer.ViewportProperty, new Size(10, 10));
  51. target.Offset = new Vector(12, 12);
  52. Assert.Equal(new Vector(10, 10), target.Offset);
  53. }
  54. private Control CreateTemplate(ScrollViewer control)
  55. {
  56. return new Grid
  57. {
  58. ColumnDefinitions = new ColumnDefinitions
  59. {
  60. new ColumnDefinition(1, GridUnitType.Star),
  61. new ColumnDefinition(GridLength.Auto),
  62. },
  63. RowDefinitions = new RowDefinitions
  64. {
  65. new RowDefinition(1, GridUnitType.Star),
  66. new RowDefinition(GridLength.Auto),
  67. },
  68. Children =
  69. {
  70. new ScrollContentPresenter
  71. {
  72. Name = "PART_ContentPresenter",
  73. [~ContentPresenter.ContentProperty] = control[~ContentControl.ContentProperty],
  74. [~~ScrollContentPresenter.ExtentProperty] = control[~~ScrollViewer.ExtentProperty],
  75. [~~ScrollContentPresenter.OffsetProperty] = control[~~ScrollViewer.OffsetProperty],
  76. [~~ScrollContentPresenter.ViewportProperty] = control[~~ScrollViewer.ViewportProperty],
  77. [~ScrollContentPresenter.CanHorizontallyScrollProperty] = control[~ScrollViewer.CanHorizontallyScrollProperty],
  78. },
  79. new ScrollBar
  80. {
  81. Name = "horizontalScrollBar",
  82. Orientation = Orientation.Horizontal,
  83. [~RangeBase.MaximumProperty] = control[~ScrollViewer.HorizontalScrollBarMaximumProperty],
  84. [~~RangeBase.ValueProperty] = control[~~ScrollViewer.HorizontalScrollBarValueProperty],
  85. [~ScrollBar.ViewportSizeProperty] = control[~ScrollViewer.HorizontalScrollBarViewportSizeProperty],
  86. [~ScrollBar.VisibilityProperty] = control[~ScrollViewer.HorizontalScrollBarVisibilityProperty],
  87. [Grid.RowProperty] = 1,
  88. },
  89. new ScrollBar
  90. {
  91. Name = "verticalScrollBar",
  92. Orientation = Orientation.Vertical,
  93. [~RangeBase.MaximumProperty] = control[~ScrollViewer.VerticalScrollBarMaximumProperty],
  94. [~~RangeBase.ValueProperty] = control[~~ScrollViewer.VerticalScrollBarValueProperty],
  95. [~ScrollBar.ViewportSizeProperty] = control[~ScrollViewer.VerticalScrollBarViewportSizeProperty],
  96. [~ScrollBar.VisibilityProperty] = control[~ScrollViewer.VerticalScrollBarVisibilityProperty],
  97. [Grid.ColumnProperty] = 1,
  98. },
  99. },
  100. };
  101. }
  102. }
  103. }