ScrollViewerTests.cs 3.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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 Avalonia.Controls.Presenters;
  4. using Avalonia.Controls.Primitives;
  5. using Avalonia.Controls.Templates;
  6. using Xunit;
  7. namespace Avalonia.Controls.UnitTests
  8. {
  9. public class ScrollViewerTests
  10. {
  11. [Fact]
  12. public void Content_Is_Created()
  13. {
  14. var target = new ScrollViewer
  15. {
  16. Template = new FuncControlTemplate<ScrollViewer>(CreateTemplate),
  17. Content = "Foo",
  18. };
  19. target.ApplyTemplate();
  20. ((ContentPresenter)target.Presenter).UpdateChild();
  21. Assert.IsType<TextBlock>(target.Presenter.Child);
  22. }
  23. [Fact]
  24. public void Offset_Should_Be_Coerced_To_Viewport()
  25. {
  26. var target = new ScrollViewer();
  27. target.SetValue(ScrollViewer.ExtentProperty, new Size(20, 20));
  28. target.SetValue(ScrollViewer.ViewportProperty, new Size(10, 10));
  29. target.Offset = new Vector(12, 12);
  30. Assert.Equal(new Vector(10, 10), target.Offset);
  31. }
  32. private Control CreateTemplate(ScrollViewer control)
  33. {
  34. return new Grid
  35. {
  36. ColumnDefinitions = new ColumnDefinitions
  37. {
  38. new ColumnDefinition(1, GridUnitType.Star),
  39. new ColumnDefinition(GridLength.Auto),
  40. },
  41. RowDefinitions = new RowDefinitions
  42. {
  43. new RowDefinition(1, GridUnitType.Star),
  44. new RowDefinition(GridLength.Auto),
  45. },
  46. Children =
  47. {
  48. new ScrollContentPresenter
  49. {
  50. Name = "PART_ContentPresenter",
  51. [~ContentPresenter.ContentProperty] = control[~ContentControl.ContentProperty],
  52. [~~ScrollContentPresenter.ExtentProperty] = control[~~ScrollViewer.ExtentProperty],
  53. [~~ScrollContentPresenter.OffsetProperty] = control[~~ScrollViewer.OffsetProperty],
  54. [~~ScrollContentPresenter.ViewportProperty] = control[~~ScrollViewer.ViewportProperty],
  55. [~ScrollContentPresenter.CanScrollHorizontallyProperty] = control[~ScrollViewer.CanScrollHorizontallyProperty],
  56. },
  57. new ScrollBar
  58. {
  59. Name = "horizontalScrollBar",
  60. Orientation = Orientation.Horizontal,
  61. [~RangeBase.MaximumProperty] = control[~ScrollViewer.HorizontalScrollBarMaximumProperty],
  62. [~~RangeBase.ValueProperty] = control[~~ScrollViewer.HorizontalScrollBarValueProperty],
  63. [~ScrollBar.ViewportSizeProperty] = control[~ScrollViewer.HorizontalScrollBarViewportSizeProperty],
  64. [~ScrollBar.VisibilityProperty] = control[~ScrollViewer.HorizontalScrollBarVisibilityProperty],
  65. [Grid.RowProperty] = 1,
  66. },
  67. new ScrollBar
  68. {
  69. Name = "verticalScrollBar",
  70. Orientation = Orientation.Vertical,
  71. [~RangeBase.MaximumProperty] = control[~ScrollViewer.VerticalScrollBarMaximumProperty],
  72. [~~RangeBase.ValueProperty] = control[~~ScrollViewer.VerticalScrollBarValueProperty],
  73. [~ScrollBar.ViewportSizeProperty] = control[~ScrollViewer.VerticalScrollBarViewportSizeProperty],
  74. [~ScrollBar.VisibilityProperty] = control[~ScrollViewer.VerticalScrollBarVisibilityProperty],
  75. [Grid.ColumnProperty] = 1,
  76. },
  77. },
  78. };
  79. }
  80. }
  81. }