using AcDream.Core.Net; using Xunit; namespace AcDream.Core.Net.Tests; public sealed class WorldSessionLinkStatusTests { [Theory] [InlineData(WorldSession.State.Disconnected)] [InlineData(WorldSession.State.Failed)] public void DisconnectedStates_DoNotPublishPacketAge(WorldSession.State state) { LinkStatusSnapshot snapshot = WorldSession.BuildLinkStatus( state, lastInboundPacketTicks: 100, nowTicks: 900, frequency: 100); Assert.False(snapshot.Connected); Assert.Equal(0d, snapshot.SecondsSinceLastPacket); } [Theory] [InlineData(WorldSession.State.Handshaking)] [InlineData(WorldSession.State.InCharacterSelect)] [InlineData(WorldSession.State.EnteringWorld)] [InlineData(WorldSession.State.InWorld)] public void ConnectedStates_PublishMonotonicPacketAge(WorldSession.State state) { LinkStatusSnapshot snapshot = WorldSession.BuildLinkStatus( state, lastInboundPacketTicks: 100, nowTicks: 850, frequency: 100); Assert.True(snapshot.Connected); Assert.Equal(7.5d, snapshot.SecondsSinceLastPacket); } [Fact] public void ClockRegression_ClampsPacketAgeToZero() { LinkStatusSnapshot snapshot = WorldSession.BuildLinkStatus( WorldSession.State.InWorld, lastInboundPacketTicks: 200, nowTicks: 100, frequency: 100); Assert.True(snapshot.Connected); Assert.Equal(0d, snapshot.SecondsSinceLastPacket); } }