feat(ui): port retained widget foundations

This commit is contained in:
Erik 2026-07-10 17:55:41 +02:00
parent 44f9ec13d9
commit d825572e31
44 changed files with 84813 additions and 292 deletions

View file

@ -0,0 +1,39 @@
using AcDream.App.UI;
namespace AcDream.App.Tests.UI;
public sealed class UiButtonStateMachineTests
{
public static TheoryData<UiButtonVisualInput, uint> RequestedCases
=> new()
{
{ new(false, false, false, false, false), UiButtonStateMachine.Normal },
{ new(false, false, true, false, true), UiButtonStateMachine.NormalRollover },
{ new(false, false, true, true, false), UiButtonStateMachine.NormalRollover },
{ new(false, false, true, true, true), UiButtonStateMachine.NormalPressed },
{ new(false, true, false, false, false), UiButtonStateMachine.Highlight },
{ new(false, true, true, false, true), UiButtonStateMachine.HighlightRollover },
{ new(false, true, true, true, false), UiButtonStateMachine.HighlightRollover },
{ new(false, true, true, true, true), UiButtonStateMachine.HighlightPressed },
{ new(true, false, true, true, true), UiButtonStateMachine.Ghosted },
{ new(true, true, true, true, true), UiButtonStateMachine.Ghosted },
};
[Theory]
[MemberData(nameof(RequestedCases))]
public void RequestedState_MatchesRetailPrecedence(UiButtonVisualInput input, uint expected)
=> Assert.Equal(expected, UiButtonStateMachine.RequestedState(input));
[Fact]
public void ResolveState_MissingRequestedState_PreservesCustomState()
{
var available = new HashSet<uint> { 0x10000053u };
uint resolved = UiButtonStateMachine.ResolveState(
0x10000053u,
new UiButtonVisualInput(false, false, true, false, true),
available);
Assert.Equal(0x10000053u, resolved);
}
}