|
@@ -0,0 +1,100 @@
|
|
|
|
+namespace Terminal.Gui.ViewsTests;
|
|
|
|
+
|
|
|
|
+public class ScrollSliderTests
|
|
|
|
+{
|
|
|
|
+ // Test for GetPositionFromSliderLocation to GetSliderLocationDimensionFromPosition
|
|
|
|
+ [Theory]
|
|
|
|
+ [InlineData (Orientation.Vertical, 26, 236, -1, 0)]
|
|
|
|
+ [InlineData (Orientation.Vertical, 26, 236, 0, 0)]
|
|
|
|
+ [InlineData (Orientation.Vertical, 26, 236, 5, 46)]
|
|
|
|
+ [InlineData (Orientation.Vertical, 26, 236, 10, 91)]
|
|
|
|
+ [InlineData (Orientation.Vertical, 26, 236, 15, 137)]
|
|
|
|
+ [InlineData (Orientation.Vertical, 26, 236, 20, 182)]
|
|
|
|
+ [InlineData (Orientation.Vertical, 26, 236, 26, 210)]
|
|
|
|
+ [InlineData (Orientation.Vertical, 26, 236, 27, 210)]
|
|
|
|
+ [InlineData (Orientation.Vertical, 37, 236, 2, 13)]
|
|
|
|
+ [InlineData (Orientation.Vertical, 42, 236, 29, 164)]
|
|
|
|
+ public void Test_Position_Location_Consistency (Orientation orientation, int scrollLength, int size, int location, int expectedPosition)
|
|
|
|
+ {
|
|
|
|
+ // Arrange
|
|
|
|
+ Scroll host = new ()
|
|
|
|
+ {
|
|
|
|
+ Orientation = orientation,
|
|
|
|
+ Width = orientation == Orientation.Vertical ? 1 : scrollLength,
|
|
|
|
+ Height = orientation == Orientation.Vertical ? scrollLength : 1,
|
|
|
|
+ Size = size
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ host.BeginInit ();
|
|
|
|
+ host.EndInit ();
|
|
|
|
+
|
|
|
|
+ // Act
|
|
|
|
+ host.Position = host._slider.GetPositionFromSliderLocation (location);
|
|
|
|
+ (int calculatedLocation, int calculatedDimension) = host._slider.GetSliderLocationDimensionFromPosition ();
|
|
|
|
+ int calculatedPosition = host._slider.GetPositionFromSliderLocation (calculatedLocation);
|
|
|
|
+
|
|
|
|
+ // Assert
|
|
|
|
+ AssertLocation (scrollLength, location, calculatedLocation, calculatedDimension);
|
|
|
|
+
|
|
|
|
+ Assert.Equal (host.Position, expectedPosition);
|
|
|
|
+ Assert.Equal (calculatedPosition, expectedPosition);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // Randomized Test for more extensive testing
|
|
|
|
+ [Theory]
|
|
|
|
+ [InlineData (Orientation.Vertical, 26, 236, 5)]
|
|
|
|
+ public void Test_Position_Location_Consistency_Random (Orientation orientation, int scrollLength, int size, int testCount)
|
|
|
|
+ {
|
|
|
|
+ var random = new Random ();
|
|
|
|
+
|
|
|
|
+ Scroll host = new ()
|
|
|
|
+ {
|
|
|
|
+ Orientation = orientation,
|
|
|
|
+ Width = orientation == Orientation.Vertical ? 1 : scrollLength,
|
|
|
|
+ Height = orientation == Orientation.Vertical ? scrollLength : 1,
|
|
|
|
+ Size = size
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ host.BeginInit ();
|
|
|
|
+ host.EndInit ();
|
|
|
|
+
|
|
|
|
+ // Number of random tests to run
|
|
|
|
+ for (var i = 0; i < testCount; i++)
|
|
|
|
+ {
|
|
|
|
+ // Arrange
|
|
|
|
+ int randomScrollLength = random.Next (0, 60); // Random content size length
|
|
|
|
+ int randomLocation = random.Next (0, randomScrollLength); // Random location
|
|
|
|
+
|
|
|
|
+ host.Width = host.Orientation == Orientation.Vertical ? 1 : randomScrollLength;
|
|
|
|
+ host.Height = host.Orientation == Orientation.Vertical ? randomScrollLength : 1;
|
|
|
|
+ // Slider may have changed content size
|
|
|
|
+ host.LayoutSubviews ();
|
|
|
|
+
|
|
|
|
+ // Act
|
|
|
|
+ host.Position = host._slider.GetPositionFromSliderLocation (randomLocation);
|
|
|
|
+ (int calculatedLocation, int calculatedDimension) = host._slider.GetSliderLocationDimensionFromPosition ();
|
|
|
|
+ int calculatedPosition = host._slider.GetPositionFromSliderLocation (calculatedLocation);
|
|
|
|
+
|
|
|
|
+ // Assert
|
|
|
|
+ AssertLocation (randomScrollLength, randomLocation, calculatedLocation, calculatedDimension);
|
|
|
|
+
|
|
|
|
+ Assert.Equal (host.Position, calculatedPosition);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private static void AssertLocation (int scrollLength, int location, int calculatedLocation, int calculatedDimension)
|
|
|
|
+ {
|
|
|
|
+ if (location < 0)
|
|
|
|
+ {
|
|
|
|
+ Assert.Equal (0, calculatedLocation);
|
|
|
|
+ }
|
|
|
|
+ else if (location + calculatedDimension >= scrollLength)
|
|
|
|
+ {
|
|
|
|
+ Assert.Equal (scrollLength - calculatedDimension, calculatedLocation);
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ Assert.Equal (location, calculatedLocation);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|