ScrollBarTests.cs 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. using System;
  2. using System.Linq;
  3. using Avalonia.Controls.Primitives;
  4. using Avalonia.Controls.Templates;
  5. using Avalonia.Input;
  6. using Avalonia.Media;
  7. using Xunit;
  8. namespace Avalonia.Controls.UnitTests.Primitives
  9. {
  10. public class ScrollBarTests
  11. {
  12. [Fact]
  13. public void Setting_Value_Should_Update_Track_Value()
  14. {
  15. var target = new ScrollBar
  16. {
  17. Template = new FuncControlTemplate<ScrollBar>(Template),
  18. };
  19. target.ApplyTemplate();
  20. var track = (Track)target.GetTemplateChildren().First(x => x.Name == "track");
  21. target.Value = 50;
  22. Assert.Equal(50, track.Value);
  23. }
  24. [Fact]
  25. public void Setting_Track_Value_Should_Update_Value()
  26. {
  27. var target = new ScrollBar
  28. {
  29. Template = new FuncControlTemplate<ScrollBar>(Template),
  30. };
  31. target.ApplyTemplate();
  32. var track = (Track)target.GetTemplateChildren().First(x => x.Name == "track");
  33. track.Value = 50;
  34. Assert.Equal(50, target.Value);
  35. }
  36. [Fact]
  37. public void Setting_Track_Value_After_Setting_Value_Should_Update_Value()
  38. {
  39. var target = new ScrollBar
  40. {
  41. Template = new FuncControlTemplate<ScrollBar>(Template),
  42. };
  43. target.ApplyTemplate();
  44. var track = (Track)target.GetTemplateChildren().First(x => x.Name == "track");
  45. target.Value = 25;
  46. track.Value = 50;
  47. Assert.Equal(50, target.Value);
  48. }
  49. [Fact]
  50. public void Thumb_DragDelta_Event_Should_Raise_Scroll_Event()
  51. {
  52. var target = new ScrollBar
  53. {
  54. Template = new FuncControlTemplate<ScrollBar>(Template),
  55. };
  56. target.ApplyTemplate();
  57. var track = (Track)target.GetTemplateChildren().First(x => x.Name == "track");
  58. var raisedEvent = Assert.Raises<ScrollEventArgs>(
  59. handler => target.Scroll += handler,
  60. handler => target.Scroll -= handler,
  61. () =>
  62. {
  63. var ev = new VectorEventArgs
  64. {
  65. RoutedEvent = Thumb.DragDeltaEvent,
  66. Vector = new Vector(0, 0)
  67. };
  68. track.Thumb.RaiseEvent(ev);
  69. });
  70. Assert.Equal(ScrollEventType.ThumbTrack, raisedEvent.Arguments.ScrollEventType);
  71. }
  72. [Fact]
  73. public void Thumb_DragComplete_Event_Should_Raise_Scroll_Event()
  74. {
  75. var target = new ScrollBar
  76. {
  77. Template = new FuncControlTemplate<ScrollBar>(Template),
  78. };
  79. target.ApplyTemplate();
  80. var track = (Track)target.GetTemplateChildren().First(x => x.Name == "track");
  81. var raisedEvent = Assert.Raises<ScrollEventArgs>(
  82. handler => target.Scroll += handler,
  83. handler => target.Scroll -= handler,
  84. () =>
  85. {
  86. var ev = new VectorEventArgs
  87. {
  88. RoutedEvent = Thumb.DragCompletedEvent,
  89. Vector = new Vector(0, 0)
  90. };
  91. track.Thumb.RaiseEvent(ev);
  92. });
  93. Assert.Equal(ScrollEventType.EndScroll, raisedEvent.Arguments.ScrollEventType);
  94. }
  95. [Fact]
  96. public void ScrollBar_Can_AutoHide()
  97. {
  98. var target = new ScrollBar();
  99. target.Visibility = ScrollBarVisibility.Auto;
  100. target.ViewportSize = 1;
  101. target.Maximum = 0;
  102. Assert.False(target.IsVisible);
  103. }
  104. [Fact]
  105. public void ScrollBar_Should_Not_AutoHide_When_ViewportSize_Is_NaN()
  106. {
  107. var target = new ScrollBar();
  108. target.Visibility = ScrollBarVisibility.Auto;
  109. target.Minimum = 0;
  110. target.Maximum = 100;
  111. target.ViewportSize = double.NaN;
  112. Assert.True(target.IsVisible);
  113. }
  114. [Fact]
  115. public void ScrollBar_Should_Not_AutoHide_When_Visibility_Set_To_Visible()
  116. {
  117. var target = new ScrollBar();
  118. target.Visibility = ScrollBarVisibility.Visible;
  119. target.Minimum = 0;
  120. target.Maximum = 100;
  121. target.ViewportSize = 100;
  122. Assert.True(target.IsVisible);
  123. }
  124. [Fact]
  125. public void ScrollBar_Should_Hide_When_Visibility_Set_To_Hidden()
  126. {
  127. var target = new ScrollBar();
  128. target.Visibility = ScrollBarVisibility.Hidden;
  129. target.Minimum = 0;
  130. target.Maximum = 100;
  131. target.ViewportSize = 10;
  132. Assert.False(target.IsVisible);
  133. }
  134. private static Control Template(ScrollBar control, INameScope scope)
  135. {
  136. return new Border
  137. {
  138. Child = new Track
  139. {
  140. Name = "track",
  141. [!Track.MinimumProperty] = control[!RangeBase.MinimumProperty],
  142. [!Track.MaximumProperty] = control[!RangeBase.MaximumProperty],
  143. [!!Track.ValueProperty] = control[!!RangeBase.ValueProperty],
  144. [!Track.ViewportSizeProperty] = control[!ScrollBar.ViewportSizeProperty],
  145. [!Track.OrientationProperty] = control[!ScrollBar.OrientationProperty],
  146. Thumb = new Thumb
  147. {
  148. Template = new FuncControlTemplate<Thumb>(ThumbTemplate),
  149. },
  150. }.RegisterInNameScope(scope),
  151. };
  152. }
  153. private static Control ThumbTemplate(Thumb control, INameScope scope)
  154. {
  155. return new Border
  156. {
  157. Background = Brushes.Gray,
  158. };
  159. }
  160. }
  161. }