mirror of
https://github.com/nsnail/spectre.console.git
synced 2025-04-16 08:52:50 +08:00
121 lines
2.6 KiB
C#
121 lines
2.6 KiB
C#
namespace Spectre.Console.Tests.Unit;
|
|
|
|
public sealed class ListPromptStateTests
|
|
{
|
|
private ListPromptState<string> CreateListPromptState(int count, int pageSize, bool shouldWrap)
|
|
=> new(Enumerable.Repeat(new ListPromptItem<string>(string.Empty), count).ToList(), pageSize, shouldWrap);
|
|
|
|
[Fact]
|
|
public void Should_Have_Start_Index_Zero()
|
|
{
|
|
// Given
|
|
var state = CreateListPromptState(100, 10, false);
|
|
|
|
// When
|
|
/* noop */
|
|
|
|
// Then
|
|
state.Index.ShouldBe(0);
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData(true)]
|
|
[InlineData(false)]
|
|
public void Should_Increase_Index(bool wrap)
|
|
{
|
|
// Given
|
|
var state = CreateListPromptState(100, 10, wrap);
|
|
var index = state.Index;
|
|
|
|
// When
|
|
state.Update(ConsoleKey.DownArrow);
|
|
|
|
// Then
|
|
state.Index.ShouldBe(index + 1);
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData(true)]
|
|
[InlineData(false)]
|
|
public void Should_Go_To_End(bool wrap)
|
|
{
|
|
// Given
|
|
var state = CreateListPromptState(100, 10, wrap);
|
|
|
|
// When
|
|
state.Update(ConsoleKey.End);
|
|
|
|
// Then
|
|
state.Index.ShouldBe(99);
|
|
}
|
|
|
|
[Fact]
|
|
public void Should_Clamp_Index_If_No_Wrap()
|
|
{
|
|
// Given
|
|
var state = CreateListPromptState(100, 10, false);
|
|
state.Update(ConsoleKey.End);
|
|
|
|
// When
|
|
state.Update(ConsoleKey.DownArrow);
|
|
|
|
// Then
|
|
state.Index.ShouldBe(99);
|
|
}
|
|
|
|
[Fact]
|
|
public void Should_Wrap_Index_If_Wrap()
|
|
{
|
|
// Given
|
|
var state = CreateListPromptState(100, 10, true);
|
|
state.Update(ConsoleKey.End);
|
|
|
|
// When
|
|
state.Update(ConsoleKey.DownArrow);
|
|
|
|
// Then
|
|
state.Index.ShouldBe(0);
|
|
}
|
|
|
|
[Fact]
|
|
public void Should_Wrap_Index_If_Wrap_And_Down()
|
|
{
|
|
// Given
|
|
var state = CreateListPromptState(100, 10, true);
|
|
|
|
// When
|
|
state.Update(ConsoleKey.UpArrow);
|
|
|
|
// Then
|
|
state.Index.ShouldBe(99);
|
|
}
|
|
|
|
[Fact]
|
|
public void Should_Wrap_Index_If_Wrap_And_Page_Up()
|
|
{
|
|
// Given
|
|
var state = CreateListPromptState(10, 100, true);
|
|
|
|
// When
|
|
state.Update(ConsoleKey.PageUp);
|
|
|
|
// Then
|
|
state.Index.ShouldBe(0);
|
|
}
|
|
|
|
[Fact]
|
|
public void Should_Wrap_Index_If_Wrap_And_Offset_And_Page_Down()
|
|
{
|
|
// Given
|
|
var state = CreateListPromptState(10, 100, true);
|
|
state.Update(ConsoleKey.End);
|
|
state.Update(ConsoleKey.UpArrow);
|
|
|
|
// When
|
|
state.Update(ConsoleKey.PageDown);
|
|
|
|
// Then
|
|
state.Index.ShouldBe(8);
|
|
}
|
|
}
|