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(); 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(() => state.EnterUseItemOnTarget(0)); Assert.Equal(InteractionMode.None, state.Current); } }