ScrollViewerTests.cs 5.1 KB

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