using AcDream.App.Input; namespace AcDream.App.Tests.Input; public sealed class OutboundInteractionQueueTests { [Fact] public void Drain_PreservesInputOrder() { var queue = new OutboundInteractionQueue(); var actual = new List(); queue.Enqueue(() => actual.Add("use-corpse")); queue.Enqueue(() => actual.Add("pickup-item")); queue.Drain(); Assert.Equal(new[] { "use-corpse", "pickup-item" }, actual); Assert.Equal(0, queue.Count); } [Fact] public void Drain_ReentrantEnqueueWaitsForNextFrame() { var queue = new OutboundInteractionQueue(); var actual = new List(); queue.Enqueue(() => { actual.Add("first"); queue.Enqueue(() => actual.Add("next-frame")); }); queue.Drain(); Assert.Equal(new[] { "first" }, actual); Assert.Equal(1, queue.Count); queue.Drain(); Assert.Equal(new[] { "first", "next-frame" }, actual); Assert.Equal(0, queue.Count); } [Fact] public void Clear_DropsPendingSessionActions() { var queue = new OutboundInteractionQueue(); bool invoked = false; queue.Enqueue(() => invoked = true); queue.Clear(); queue.Drain(); Assert.False(invoked); } }