ScrollSliderTests.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. namespace Terminal.Gui.ViewsTests;
  2. public class ScrollSliderTests
  3. {
  4. // Test for GetPositionFromSliderLocation to GetSliderLocationDimensionFromPosition
  5. [Theory]
  6. [InlineData (Orientation.Vertical, 26, 236, -1, 0)]
  7. [InlineData (Orientation.Vertical, 26, 236, 0, 0)]
  8. [InlineData (Orientation.Vertical, 26, 236, 5, 46)]
  9. [InlineData (Orientation.Vertical, 26, 236, 10, 91)]
  10. [InlineData (Orientation.Vertical, 26, 236, 15, 137)]
  11. [InlineData (Orientation.Vertical, 26, 236, 20, 182)]
  12. [InlineData (Orientation.Vertical, 26, 236, 26, 210)]
  13. [InlineData (Orientation.Vertical, 26, 236, 27, 210)]
  14. [InlineData (Orientation.Vertical, 37, 236, 2, 13)]
  15. [InlineData (Orientation.Vertical, 42, 236, 29, 164)]
  16. public void Test_Position_Location_Consistency_KeepContentInAllViewport_True (Orientation orientation, int scrollLength, int size, int location, int expectedPosition)
  17. {
  18. // Arrange
  19. Scroll scroll = new ()
  20. {
  21. Orientation = orientation,
  22. Width = orientation == Orientation.Vertical ? 1 : scrollLength,
  23. Height = orientation == Orientation.Vertical ? scrollLength : 1,
  24. Size = size,
  25. KeepContentInAllViewport = true
  26. };
  27. scroll.BeginInit ();
  28. scroll.EndInit ();
  29. // Act
  30. scroll.Position = scroll._slider.GetPositionFromSliderLocation (location);
  31. (int calculatedLocation, int calculatedDimension) = scroll._slider.GetSliderLocationDimensionFromPosition ();
  32. int calculatedPosition = scroll._slider.GetPositionFromSliderLocation (calculatedLocation);
  33. // Assert
  34. AssertLocation (scrollLength, location, calculatedLocation, calculatedDimension);
  35. Assert.Equal (scroll.Position, expectedPosition);
  36. Assert.Equal (calculatedPosition, expectedPosition);
  37. }
  38. // Randomized Test for more extensive testing
  39. [Theory]
  40. [InlineData (Orientation.Vertical, true, 26, 236, 5)]
  41. [InlineData (Orientation.Vertical, false, 26, 236, 5)]
  42. public void Test_Position_Location_Consistency_Random (Orientation orientation, bool keepContentInAllViewport, int scrollLength, int size, int testCount)
  43. {
  44. var random = new Random ();
  45. Scroll scroll = new ()
  46. {
  47. Orientation = orientation,
  48. Width = orientation == Orientation.Vertical ? 1 : scrollLength,
  49. Height = orientation == Orientation.Vertical ? scrollLength : 1,
  50. Size = size,
  51. KeepContentInAllViewport = keepContentInAllViewport
  52. };
  53. scroll.BeginInit ();
  54. scroll.EndInit ();
  55. // Number of random tests to run
  56. for (var i = 0; i < testCount; i++)
  57. {
  58. // Arrange
  59. int randomScrollLength = random.Next (0, 60); // Random content size length
  60. int randomLocation = random.Next (0, randomScrollLength); // Random location
  61. scroll.Width = scroll.Orientation == Orientation.Vertical ? 1 : randomScrollLength;
  62. scroll.Height = scroll.Orientation == Orientation.Vertical ? randomScrollLength : 1;
  63. // Slider may have changed content size
  64. scroll.LayoutSubviews ();
  65. // Act
  66. scroll.Position = scroll._slider.GetPositionFromSliderLocation (randomLocation);
  67. (int calculatedLocation, int calculatedDimension) = scroll._slider.GetSliderLocationDimensionFromPosition ();
  68. int calculatedPosition = scroll._slider.GetPositionFromSliderLocation (calculatedLocation);
  69. // Assert
  70. AssertLocation (randomScrollLength, randomLocation, calculatedLocation, calculatedDimension);
  71. Assert.Equal (scroll.Position, calculatedPosition);
  72. }
  73. }
  74. private static void AssertLocation (int scrollLength, int location, int calculatedLocation, int calculatedDimension)
  75. {
  76. if (location < 0)
  77. {
  78. Assert.Equal (0, calculatedLocation);
  79. }
  80. else if (location + calculatedDimension >= scrollLength)
  81. {
  82. Assert.Equal (scrollLength - calculatedDimension, calculatedLocation);
  83. }
  84. else
  85. {
  86. Assert.Equal (location, calculatedLocation);
  87. }
  88. }
  89. }