feat(ui): centralize retail selection state
This commit is contained in:
parent
c7607f019c
commit
7983309d23
30 changed files with 591 additions and 108 deletions
32
tests/AcDream.App.Tests/UI/InteractionStateTests.cs
Normal file
32
tests/AcDream.App.Tests/UI/InteractionStateTests.cs
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
using AcDream.App.UI;
|
||||
|
||||
namespace AcDream.App.Tests.UI;
|
||||
|
||||
public sealed class InteractionStateTests
|
||||
{
|
||||
[Fact]
|
||||
public void Modes_HaveOneOwnerAndOneDeduplicatedTransitionStream()
|
||||
{
|
||||
var state = new InteractionState();
|
||||
var changes = new List<InteractionModeTransition>();
|
||||
state.Changed += changes.Add;
|
||||
|
||||
Assert.True(state.EnterUse());
|
||||
Assert.False(state.EnterUse());
|
||||
Assert.True(state.EnterExamine());
|
||||
Assert.True(state.EnterUseItemOnTarget(0x100u));
|
||||
Assert.True(state.Clear());
|
||||
|
||||
Assert.Equal(4, changes.Count);
|
||||
Assert.Equal(InteractionModeKind.None, state.Current.Kind);
|
||||
Assert.Equal(0x100u, changes[2].Current.SourceObjectId);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void UseItemOnTarget_RejectsMissingSource()
|
||||
{
|
||||
var state = new InteractionState();
|
||||
Assert.Throws<ArgumentOutOfRangeException>(() => state.EnterUseItemOnTarget(0));
|
||||
Assert.Equal(InteractionMode.None, state.Current);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue