mirror of
https://github.com/gui-cs/Terminal.Gui.git
synced 2025-12-26 15:57:56 +01:00
Cleans up/Refactors View.Subviews (#3962)
* Subview clean up * New Add/Remove event pattern * Using Logging * cleanup * Subview -> SubView * Test code cleanup. Killed many warnings. * Fix tznind feedback * Refactored AllViewTest helpers * Moved keyboard tests to parallel * Moved mouse tests to parallel * Moved view tests to parallel * Test code cleanup. Killed many warnings. * dupe test * Some mouse tests can't run in parallel because MouseGrabView * Made SpinnerView more testable * Moved more tests * SubViews to IReadOnlyCollection<View> * SubViews to IReadOnlyCollection<View> 2 * scrollbar tests * shortcut tests * Use InternalSubViews vs. _subviews * Nuked View.IsAdded. Added View.SuperViewChanged. * API doc updats * Unit Test tweak * Unit Test tweak
This commit is contained in:
678
Tests/UnitTestsParallelizable/Views/ScrollSliderTests.cs
Normal file
678
Tests/UnitTestsParallelizable/Views/ScrollSliderTests.cs
Normal file
@@ -0,0 +1,678 @@
|
||||
using Xunit.Abstractions;
|
||||
|
||||
namespace Terminal.Gui.ViewsTests;
|
||||
|
||||
public class ScrollSliderTests
|
||||
{
|
||||
[Fact]
|
||||
public void Constructor_Initializes_Correctly ()
|
||||
{
|
||||
var scrollSlider = new ScrollSlider ();
|
||||
Assert.False (scrollSlider.CanFocus);
|
||||
Assert.Equal (Orientation.Vertical, scrollSlider.Orientation);
|
||||
Assert.Equal (TextDirection.TopBottom_LeftRight, scrollSlider.TextDirection);
|
||||
Assert.Equal (Alignment.Center, scrollSlider.TextAlignment);
|
||||
Assert.Equal (Alignment.Center, scrollSlider.VerticalTextAlignment);
|
||||
scrollSlider.Layout ();
|
||||
Assert.Equal (0, scrollSlider.Frame.X);
|
||||
Assert.Equal (0, scrollSlider.Frame.Y);
|
||||
Assert.Equal (1, scrollSlider.Size);
|
||||
Assert.Equal (2048, scrollSlider.VisibleContentSize);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Add_To_SuperView_Initializes_Correctly ()
|
||||
{
|
||||
var super = new View
|
||||
{
|
||||
Id = "super",
|
||||
Width = 10,
|
||||
Height = 10,
|
||||
CanFocus = true
|
||||
};
|
||||
var scrollSlider = new ScrollSlider ();
|
||||
super.Add (scrollSlider);
|
||||
|
||||
Assert.False (scrollSlider.CanFocus);
|
||||
Assert.Equal (Orientation.Vertical, scrollSlider.Orientation);
|
||||
Assert.Equal (TextDirection.TopBottom_LeftRight, scrollSlider.TextDirection);
|
||||
Assert.Equal (Alignment.Center, scrollSlider.TextAlignment);
|
||||
Assert.Equal (Alignment.Center, scrollSlider.VerticalTextAlignment);
|
||||
scrollSlider.Layout ();
|
||||
Assert.Equal (0, scrollSlider.Frame.X);
|
||||
Assert.Equal (0, scrollSlider.Frame.Y);
|
||||
Assert.Equal (1, scrollSlider.Size);
|
||||
Assert.Equal (10, scrollSlider.VisibleContentSize);
|
||||
}
|
||||
|
||||
//[Fact]
|
||||
//public void OnOrientationChanged_Sets_Size_To_1 ()
|
||||
//{
|
||||
// var scrollSlider = new ScrollSlider ();
|
||||
// scrollSlider.Orientation = Orientation.Horizontal;
|
||||
// Assert.Equal (1, scrollSlider.Size);
|
||||
//}
|
||||
|
||||
[Fact]
|
||||
public void OnOrientationChanged_Sets_Position_To_0 ()
|
||||
{
|
||||
var super = new View
|
||||
{
|
||||
Id = "super",
|
||||
Width = 10,
|
||||
Height = 10
|
||||
};
|
||||
var scrollSlider = new ScrollSlider ();
|
||||
super.Add (scrollSlider);
|
||||
scrollSlider.Layout ();
|
||||
scrollSlider.Position = 1;
|
||||
scrollSlider.Orientation = Orientation.Horizontal;
|
||||
|
||||
Assert.Equal (0, scrollSlider.Position);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void OnOrientationChanged_Updates_TextDirection_And_TextAlignment ()
|
||||
{
|
||||
var scrollSlider = new ScrollSlider ();
|
||||
scrollSlider.Orientation = Orientation.Horizontal;
|
||||
Assert.Equal (TextDirection.LeftRight_TopBottom, scrollSlider.TextDirection);
|
||||
Assert.Equal (Alignment.Center, scrollSlider.TextAlignment);
|
||||
Assert.Equal (Alignment.Center, scrollSlider.VerticalTextAlignment);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[CombinatorialData]
|
||||
public void Size_Clamps_To_SuperView_Viewport ([CombinatorialRange (-1, 6, 1)] int sliderSize, Orientation orientation)
|
||||
{
|
||||
var super = new View
|
||||
{
|
||||
Id = "super",
|
||||
Width = 5,
|
||||
Height = 5
|
||||
};
|
||||
|
||||
var scrollSlider = new ScrollSlider
|
||||
{
|
||||
Orientation = orientation
|
||||
};
|
||||
super.Add (scrollSlider);
|
||||
scrollSlider.Layout ();
|
||||
|
||||
scrollSlider.Size = sliderSize;
|
||||
scrollSlider.Layout ();
|
||||
|
||||
Assert.True (scrollSlider.Size > 0);
|
||||
|
||||
Assert.True (scrollSlider.Size <= 5);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[CombinatorialData]
|
||||
public void Size_Clamps_To_VisibleContentSizes (
|
||||
[CombinatorialRange (1, 6, 1)] int dimension,
|
||||
[CombinatorialRange (-1, 6, 1)] int sliderSize,
|
||||
Orientation orientation
|
||||
)
|
||||
{
|
||||
var scrollSlider = new ScrollSlider
|
||||
{
|
||||
Orientation = orientation,
|
||||
VisibleContentSize = dimension,
|
||||
Size = sliderSize
|
||||
};
|
||||
scrollSlider.Layout ();
|
||||
|
||||
Assert.True (scrollSlider.Size > 0);
|
||||
|
||||
Assert.True (scrollSlider.Size <= dimension);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[CombinatorialData]
|
||||
public void CalculateSize_ScrollBounds_0_Returns_1 (
|
||||
[CombinatorialRange (-1, 5, 1)] int visibleContentSize,
|
||||
[CombinatorialRange (-1, 5, 1)] int scrollableContentSize
|
||||
)
|
||||
{
|
||||
// Arrange
|
||||
|
||||
// Act
|
||||
int sliderSize = ScrollSlider.CalculateSize (scrollableContentSize, visibleContentSize, 0);
|
||||
|
||||
// Assert
|
||||
Assert.Equal (1, sliderSize);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[CombinatorialData]
|
||||
public void CalculateSize_ScrollableContentSize_0_Returns_1 (
|
||||
[CombinatorialRange (-1, 5, 1)] int visibleContentSize,
|
||||
[CombinatorialRange (-1, 5, 1)] int sliderBounds
|
||||
)
|
||||
{
|
||||
// Arrange
|
||||
|
||||
// Act
|
||||
int sliderSize = ScrollSlider.CalculateSize (0, visibleContentSize, sliderBounds);
|
||||
|
||||
// Assert
|
||||
Assert.Equal (1, sliderSize);
|
||||
}
|
||||
|
||||
//[Theory]
|
||||
//[CombinatorialData]
|
||||
|
||||
//public void CalculateSize_VisibleContentSize_0_Returns_0 ([CombinatorialRange (-1, 5, 1)] int scrollableContentSize, [CombinatorialRange (-1, 5, 1)] int sliderBounds)
|
||||
//{
|
||||
// // Arrange
|
||||
|
||||
// // Act
|
||||
// var sliderSize = ScrollSlider.CalculateSize (scrollableContentSize, 0, sliderBounds);
|
||||
|
||||
// // Assert
|
||||
// Assert.Equal (0, sliderSize);
|
||||
//}
|
||||
|
||||
[Theory]
|
||||
[InlineData (0, 1, 1, 1)]
|
||||
[InlineData (1, 1, 1, 1)]
|
||||
[InlineData (1, 2, 1, 1)]
|
||||
[InlineData (0, 5, 5, 5)]
|
||||
[InlineData (1, 5, 5, 1)]
|
||||
[InlineData (2, 5, 5, 2)]
|
||||
[InlineData (3, 5, 5, 3)]
|
||||
[InlineData (4, 5, 5, 4)]
|
||||
[InlineData (5, 5, 5, 5)]
|
||||
[InlineData (6, 5, 5, 5)]
|
||||
public void CalculateSize_Calculates_Correctly (int visibleContentSize, int scrollableContentSize, int scrollBounds, int expectedSliderSize)
|
||||
{
|
||||
// Arrange
|
||||
|
||||
// Act
|
||||
int sliderSize = ScrollSlider.CalculateSize (scrollableContentSize, visibleContentSize, scrollBounds);
|
||||
|
||||
// Assert
|
||||
Assert.Equal (expectedSliderSize, sliderSize);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void VisibleContentSize_Not_Set_Uses_SuperView ()
|
||||
{
|
||||
View super = new ()
|
||||
{
|
||||
Id = "super",
|
||||
Height = 5,
|
||||
Width = 5
|
||||
};
|
||||
var scrollSlider = new ScrollSlider ();
|
||||
|
||||
super.Add (scrollSlider);
|
||||
super.Layout ();
|
||||
Assert.Equal (5, scrollSlider.VisibleContentSize);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void VisibleContentSize_Set_Overrides_SuperView ()
|
||||
{
|
||||
View super = new ()
|
||||
{
|
||||
Id = "super",
|
||||
Height = 5,
|
||||
Width = 5
|
||||
};
|
||||
|
||||
var scrollSlider = new ScrollSlider
|
||||
{
|
||||
VisibleContentSize = 10
|
||||
};
|
||||
|
||||
super.Add (scrollSlider);
|
||||
super.Layout ();
|
||||
Assert.Equal (10, scrollSlider.VisibleContentSize);
|
||||
|
||||
super.Height = 3;
|
||||
super.Layout ();
|
||||
Assert.Equal (10, scrollSlider.VisibleContentSize);
|
||||
|
||||
super.Height = 7;
|
||||
super.Layout ();
|
||||
Assert.Equal (10, scrollSlider.VisibleContentSize);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[CombinatorialData]
|
||||
public void VisibleContentSizes_Clamps_0_To_Dimension ([CombinatorialRange (0, 10, 1)] int dimension, Orientation orientation)
|
||||
{
|
||||
var scrollSlider = new ScrollSlider
|
||||
{
|
||||
Orientation = orientation,
|
||||
VisibleContentSize = dimension
|
||||
};
|
||||
|
||||
Assert.InRange (scrollSlider.VisibleContentSize, 1, 10);
|
||||
|
||||
View super = new ()
|
||||
{
|
||||
Id = "super",
|
||||
Height = dimension,
|
||||
Width = dimension
|
||||
};
|
||||
|
||||
scrollSlider = new()
|
||||
{
|
||||
Orientation = orientation
|
||||
};
|
||||
super.Add (scrollSlider);
|
||||
super.Layout ();
|
||||
|
||||
Assert.InRange (scrollSlider.VisibleContentSize, 1, 10);
|
||||
|
||||
scrollSlider.VisibleContentSize = dimension;
|
||||
|
||||
Assert.InRange (scrollSlider.VisibleContentSize, 1, 10);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
//// 0123456789
|
||||
//// ---------
|
||||
//// ◄█►
|
||||
//[InlineData (3, 3, 0, 1, 0)]
|
||||
//[InlineData (3, 3, 1, 1, 0)]
|
||||
//[InlineData (3, 3, 2, 1, 0)]
|
||||
|
||||
//// 0123456789
|
||||
//// ---------
|
||||
//// ◄██►
|
||||
//[InlineData (4, 4, 0, 2, 0)]
|
||||
//[InlineData (4, 4, 1, 2, 0)]
|
||||
//[InlineData (4, 4, 2, 2, 0)]
|
||||
//[InlineData (4, 4, 3, 2, 0)]
|
||||
//[InlineData (4, 4, 4, 2, 0)]
|
||||
|
||||
// 012345
|
||||
// ^----
|
||||
// █░
|
||||
[InlineData (2, 5, 0, 0)]
|
||||
|
||||
// -^---
|
||||
// █░
|
||||
[InlineData (2, 5, 1, 0)]
|
||||
|
||||
// --^--
|
||||
// ░█
|
||||
[InlineData (2, 5, 2, 1)]
|
||||
|
||||
// ---^-
|
||||
// ░█
|
||||
[InlineData (2, 5, 3, 1)]
|
||||
|
||||
// ----^
|
||||
// ░█
|
||||
[InlineData (2, 5, 4, 1)]
|
||||
|
||||
// 012345
|
||||
// ^----
|
||||
// █░░
|
||||
[InlineData (3, 5, 0, 0)]
|
||||
|
||||
// -^---
|
||||
// ░█░
|
||||
[InlineData (3, 5, 1, 1)]
|
||||
|
||||
// --^--
|
||||
// ░░█
|
||||
[InlineData (3, 5, 2, 2)]
|
||||
|
||||
// ---^-
|
||||
// ░░█
|
||||
[InlineData (3, 5, 3, 2)]
|
||||
|
||||
// ----^
|
||||
// ░░█
|
||||
[InlineData (3, 5, 4, 2)]
|
||||
|
||||
// 0123456789
|
||||
// ^-----
|
||||
// █░░
|
||||
[InlineData (3, 6, 0, 0)]
|
||||
|
||||
// -^----
|
||||
// █░░
|
||||
[InlineData (3, 6, 1, 1)]
|
||||
|
||||
// --^---
|
||||
// ░█░
|
||||
[InlineData (3, 6, 2, 1)]
|
||||
|
||||
// ---^--
|
||||
// ░░█
|
||||
[InlineData (3, 6, 3, 2)]
|
||||
|
||||
// ----^-
|
||||
// ░░█
|
||||
[InlineData (3, 6, 4, 2)]
|
||||
|
||||
// -----^
|
||||
// ░░█
|
||||
[InlineData (3, 6, 5, 2)]
|
||||
|
||||
// 012345
|
||||
// ^----
|
||||
// ███░
|
||||
[InlineData (4, 5, 0, 0)]
|
||||
|
||||
// -^---
|
||||
// ░███
|
||||
[InlineData (4, 5, 1, 1)]
|
||||
|
||||
// --^--
|
||||
// ░███
|
||||
[InlineData (4, 5, 2, 1)]
|
||||
|
||||
// ---^-
|
||||
// ░███
|
||||
[InlineData (4, 5, 3, 1)]
|
||||
|
||||
// ----^
|
||||
// ░███
|
||||
[InlineData (4, 5, 4, 1)]
|
||||
|
||||
//// 01234
|
||||
//// ^---------
|
||||
//// ◄█░░►
|
||||
//[InlineData (5, 10, 0, 1, 0)]
|
||||
//// -^--------
|
||||
//// ◄█░░►
|
||||
//[InlineData (5, 10, 1, 1, 0)]
|
||||
//// --^-------
|
||||
//// ◄█░░►
|
||||
//[InlineData (5, 10, 2, 1, 0)]
|
||||
//// ---^------
|
||||
//// ◄█░░►
|
||||
//[InlineData (5, 10, 3, 1, 0)]
|
||||
//// ----^----
|
||||
//// ◄░█░►
|
||||
//[InlineData (5, 10, 4, 1, 1)]
|
||||
//// -----^---
|
||||
//// ◄░█░►
|
||||
//[InlineData (5, 10, 5, 1, 1)]
|
||||
//// ------^--
|
||||
//// ◄░░█►
|
||||
//[InlineData (5, 10, 6, 1, 2)]
|
||||
//// ------^--
|
||||
//// ◄░░█►
|
||||
//[InlineData (5, 10, 7, 1, 2)]
|
||||
//// -------^-
|
||||
//// ◄░░█►
|
||||
//[InlineData (5, 10, 8, 1, 2)]
|
||||
//// --------^
|
||||
//// ◄░░█►
|
||||
//[InlineData (5, 10, 9, 1, 2)]
|
||||
|
||||
// 0123456789
|
||||
// ████░░░░
|
||||
// ^-----------------
|
||||
// 012345678901234567890123456789
|
||||
// ░████░░░
|
||||
// ----^-------------
|
||||
// 012345678901234567890123456789
|
||||
// ░░████░░
|
||||
// --------^---------
|
||||
// 012345678901234567890123456789
|
||||
// ░░░████░
|
||||
// ------------^-----
|
||||
// 012345678901234567890123456789
|
||||
// ░░░░████
|
||||
// ----------------^--
|
||||
|
||||
// 0123456789
|
||||
// ███░░░░░
|
||||
// ^-----------------
|
||||
|
||||
// 012345678901234567890123456789
|
||||
// ░░███░░░
|
||||
// --------^---------
|
||||
// 012345678901234567890123456789
|
||||
// ░░░███░░
|
||||
// ------------^-----
|
||||
// 012345678901234567890123456789
|
||||
// ░░░░███░
|
||||
// ----------------^--
|
||||
// 012345678901234567890123456789
|
||||
// ░░░░░███
|
||||
// ----------------^--
|
||||
[InlineData (8, 18, 0, 0)]
|
||||
[InlineData (8, 18, 1, 0)]
|
||||
|
||||
// 012345678901234567890123456789
|
||||
// ░███░░░░
|
||||
// --^---------------
|
||||
[InlineData (8, 18, 2, 1)]
|
||||
[InlineData (8, 18, 3, 2)]
|
||||
[InlineData (8, 18, 4, 2)]
|
||||
[InlineData (8, 18, 5, 2)]
|
||||
[InlineData (8, 18, 6, 3)]
|
||||
[InlineData (8, 18, 7, 4)]
|
||||
[InlineData (8, 18, 8, 4)]
|
||||
[InlineData (8, 18, 9, 4)]
|
||||
|
||||
// 012345678901234567890123456789
|
||||
// ░░░░░███
|
||||
// ----------^--------
|
||||
[InlineData (8, 18, 10, 5)]
|
||||
[InlineData (8, 18, 11, 5)]
|
||||
[InlineData (8, 18, 12, 5)]
|
||||
[InlineData (8, 18, 13, 5)]
|
||||
[InlineData (8, 18, 14, 5)]
|
||||
[InlineData (8, 18, 15, 5)]
|
||||
[InlineData (8, 18, 16, 5)]
|
||||
[InlineData (8, 18, 17, 5)]
|
||||
[InlineData (8, 18, 18, 5)]
|
||||
[InlineData (8, 18, 19, 5)]
|
||||
[InlineData (8, 18, 20, 5)]
|
||||
[InlineData (8, 18, 21, 5)]
|
||||
[InlineData (8, 18, 22, 5)]
|
||||
[InlineData (8, 18, 23, 5)]
|
||||
|
||||
// ------------------ ^
|
||||
[InlineData (8, 18, 24, 5)]
|
||||
[InlineData (8, 18, 25, 5)]
|
||||
|
||||
//// 0123456789
|
||||
//// ◄████░░░░►
|
||||
//// ^-----------------
|
||||
//[InlineData (10, 20, 0, 5, 0)]
|
||||
//[InlineData (10, 20, 1, 5, 0)]
|
||||
//[InlineData (10, 20, 2, 5, 0)]
|
||||
//[InlineData (10, 20, 3, 5, 0)]
|
||||
//[InlineData (10, 20, 4, 5, 1)]
|
||||
//[InlineData (10, 20, 5, 5, 1)]
|
||||
//[InlineData (10, 20, 6, 5, 1)]
|
||||
//[InlineData (10, 20, 7, 5, 2)]
|
||||
//[InlineData (10, 20, 8, 5, 2)]
|
||||
//[InlineData (10, 20, 9, 5, 2)]
|
||||
//[InlineData (10, 20, 10, 5, 3)]
|
||||
//[InlineData (10, 20, 11, 5, 3)]
|
||||
//[InlineData (10, 20, 12, 5, 3)]
|
||||
//[InlineData (10, 20, 13, 5, 3)]
|
||||
//[InlineData (10, 20, 14, 5, 4)]
|
||||
//[InlineData (10, 20, 15, 5, 4)]
|
||||
//[InlineData (10, 20, 16, 5, 4)]
|
||||
//[InlineData (10, 20, 17, 5, 5)]
|
||||
//[InlineData (10, 20, 18, 5, 5)]
|
||||
//[InlineData (10, 20, 19, 5, 5)]
|
||||
//[InlineData (10, 20, 20, 5, 6)]
|
||||
//[InlineData (10, 20, 21, 5, 6)]
|
||||
//[InlineData (10, 20, 22, 5, 6)]
|
||||
//[InlineData (10, 20, 23, 5, 6)]
|
||||
//[InlineData (10, 20, 24, 5, 6)]
|
||||
//[InlineData (10, 20, 25, 5, 6)]
|
||||
public void CalculatePosition_Calculates_Correctly (int visibleContentSize, int scrollableContentSize, int contentPosition, int expectedSliderPosition)
|
||||
{
|
||||
// Arrange
|
||||
|
||||
// Act
|
||||
int sliderPosition = ScrollSlider.CalculatePosition (
|
||||
scrollableContentSize,
|
||||
visibleContentSize,
|
||||
contentPosition,
|
||||
visibleContentSize,
|
||||
NavigationDirection.Forward);
|
||||
|
||||
// Assert
|
||||
Assert.Equal (expectedSliderPosition, sliderPosition);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData (8, 18, 0, 0)]
|
||||
public void CalculateContentPosition_Calculates_Correctly (
|
||||
int visibleContentSize,
|
||||
int scrollableContentSize,
|
||||
int sliderPosition,
|
||||
int expectedContentPosition
|
||||
)
|
||||
{
|
||||
// Arrange
|
||||
|
||||
// Act
|
||||
int contentPosition = ScrollSlider.CalculateContentPosition (
|
||||
scrollableContentSize,
|
||||
visibleContentSize,
|
||||
sliderPosition,
|
||||
visibleContentSize);
|
||||
|
||||
// Assert
|
||||
Assert.Equal (expectedContentPosition, contentPosition);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[CombinatorialData]
|
||||
public void ClampPosition_WithSuperView_Clamps_To_ViewPort_Minus_Size_If_VisibleContentSize_Not_Set (
|
||||
[CombinatorialRange (10, 10, 1)] int dimension,
|
||||
[CombinatorialRange (1, 5, 1)] int sliderSize,
|
||||
[CombinatorialRange (-1, 10, 2)] int sliderPosition,
|
||||
Orientation orientation
|
||||
)
|
||||
{
|
||||
View super = new ()
|
||||
{
|
||||
Id = "super",
|
||||
Height = dimension,
|
||||
Width = dimension
|
||||
};
|
||||
|
||||
var scrollSlider = new ScrollSlider
|
||||
{
|
||||
Orientation = orientation,
|
||||
Size = sliderSize
|
||||
};
|
||||
super.Add (scrollSlider);
|
||||
super.Layout ();
|
||||
|
||||
Assert.Equal (dimension, scrollSlider.VisibleContentSize);
|
||||
|
||||
int clampedPosition = scrollSlider.ClampPosition (sliderPosition);
|
||||
|
||||
Assert.InRange (clampedPosition, 0, dimension - sliderSize);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[CombinatorialData]
|
||||
public void ClampPosition_WithSuperView_Clamps_To_VisibleContentSize_Minus_Size (
|
||||
[CombinatorialRange (10, 10, 1)] int dimension,
|
||||
[CombinatorialRange (1, 5, 1)] int sliderSize,
|
||||
[CombinatorialRange (-1, 10, 2)] int sliderPosition,
|
||||
Orientation orientation
|
||||
)
|
||||
{
|
||||
View super = new ()
|
||||
{
|
||||
Id = "super",
|
||||
Height = dimension + 2,
|
||||
Width = dimension + 2
|
||||
};
|
||||
|
||||
var scrollSlider = new ScrollSlider
|
||||
{
|
||||
Orientation = orientation,
|
||||
VisibleContentSize = dimension,
|
||||
Size = sliderSize
|
||||
};
|
||||
super.Add (scrollSlider);
|
||||
super.Layout ();
|
||||
|
||||
int clampedPosition = scrollSlider.ClampPosition (sliderPosition);
|
||||
|
||||
Assert.InRange (clampedPosition, 0, dimension - sliderSize);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[CombinatorialData]
|
||||
public void ClampPosition_NoSuperView_Clamps_To_VisibleContentSize_Minus_Size (
|
||||
[CombinatorialRange (10, 10, 1)] int dimension,
|
||||
[CombinatorialRange (1, 5, 1)] int sliderSize,
|
||||
[CombinatorialRange (-1, 10, 2)] int sliderPosition,
|
||||
Orientation orientation
|
||||
)
|
||||
{
|
||||
var scrollSlider = new ScrollSlider
|
||||
{
|
||||
Orientation = orientation,
|
||||
VisibleContentSize = dimension,
|
||||
Size = sliderSize
|
||||
};
|
||||
|
||||
int clampedPosition = scrollSlider.ClampPosition (sliderPosition);
|
||||
|
||||
Assert.InRange (clampedPosition, 0, dimension - sliderSize);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[CombinatorialData]
|
||||
public void Position_Clamps_To_VisibleContentSize (
|
||||
[CombinatorialRange (0, 5, 1)] int dimension,
|
||||
[CombinatorialRange (1, 5, 1)] int sliderSize,
|
||||
[CombinatorialRange (-1, 10, 2)] int sliderPosition,
|
||||
Orientation orientation
|
||||
)
|
||||
{
|
||||
var scrollSlider = new ScrollSlider
|
||||
{
|
||||
Orientation = orientation,
|
||||
VisibleContentSize = dimension,
|
||||
Size = sliderSize,
|
||||
Position = sliderPosition
|
||||
};
|
||||
|
||||
Assert.True (scrollSlider.Position <= 5);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[CombinatorialData]
|
||||
public void Position_Clamps_To_SuperView_Viewport (
|
||||
[CombinatorialRange (0, 5, 1)] int sliderSize,
|
||||
[CombinatorialRange (-2, 10, 2)] int sliderPosition,
|
||||
Orientation orientation
|
||||
)
|
||||
{
|
||||
var super = new View
|
||||
{
|
||||
Id = "super",
|
||||
Width = 5,
|
||||
Height = 5
|
||||
};
|
||||
|
||||
var scrollSlider = new ScrollSlider
|
||||
{
|
||||
Orientation = orientation
|
||||
};
|
||||
super.Add (scrollSlider);
|
||||
scrollSlider.Size = sliderSize;
|
||||
scrollSlider.Layout ();
|
||||
|
||||
scrollSlider.Position = sliderPosition;
|
||||
|
||||
Assert.True (scrollSlider.Position <= 5);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user