diff --git a/Projects/Server.Tests/Server.Tests.csproj b/Projects/Server.Tests/Server.Tests.csproj index 06e81f456..71402d410 100644 --- a/Projects/Server.Tests/Server.Tests.csproj +++ b/Projects/Server.Tests/Server.Tests.csproj @@ -4,8 +4,7 @@ Debug;Release;Analyze - - + diff --git a/Projects/Server.Tests/Tests/Collections/PooledRefQueueTests.cs b/Projects/Server.Tests/Tests/Collections/PooledRefQueueTests.cs index a9d3576b0..4ec313394 100644 --- a/Projects/Server.Tests/Tests/Collections/PooledRefQueueTests.cs +++ b/Projects/Server.Tests/Tests/Collections/PooledRefQueueTests.cs @@ -1,5 +1,4 @@ using System; -using Moq; using Server.Collections; using Server.Random; using Xunit; @@ -8,22 +7,57 @@ namespace Server.Tests; public sealed class PooledRefQueueTests : IDisposable { + private class MockedRandomSource(int queueCount, int mockedValue) : IRandomSource + { + private int _queueCount = queueCount; + private int _mockedValue = mockedValue; + + public int Next() => throw new NotImplementedException(); + + public int Next(int maxValue) => _mockedValue; + + public int Next(int minValue, int count) => throw new NotImplementedException(); + + public uint Next(uint maxValue) => throw new NotImplementedException(); + + public uint Next(uint minValue, uint count) => throw new NotImplementedException(); + + public long Next(long maxValue) => throw new NotImplementedException(); + + public long Next(long minValue, long count) => throw new NotImplementedException(); + + public double NextDouble() => throw new NotImplementedException(); + + public void NextBytes(Span buffer) + { + throw new NotImplementedException(); + } + + public int NextInt() => throw new NotImplementedException(); + + public uint NextUInt() => throw new NotImplementedException(); + + public ulong NextULong() => throw new NotImplementedException(); + + public bool NextBool() => throw new NotImplementedException(); + + public byte NextByte() => throw new NotImplementedException(); + + public float NextFloat() => throw new NotImplementedException(); + + public float NextFloatNonZero() => throw new NotImplementedException(); + + public double NextDoubleNonZero() => throw new NotImplementedException(); + + public double NextDoubleHighRes() => throw new NotImplementedException(); + } + public void Dispose() => RandomSources.SetRng(null); private static void PrepareRng(int queueCount, int rngValue) { - Mock mockRng = new Mock(); - mockRng - .Setup(rng => rng.Next(It.IsAny())) - .Returns( - (int size) => - { - Assert.Equal(queueCount, size); - return rngValue; - } - ); - - RandomSources.SetRng(mockRng.Object); + var mockedRng = new MockedRandomSource(queueCount, rngValue); + RandomSources.SetRng(mockedRng); } [Fact] diff --git a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/AccountPacketTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/AccountPacketTests.cs index a0f480386..046fc0cd8 100644 --- a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/AccountPacketTests.cs +++ b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/AccountPacketTests.cs @@ -1,290 +1,327 @@ using System; using System.Collections.Generic; using System.Net; -using Moq; using Server.Accounting; using Server.Network; using Xunit; -namespace Server.Tests.Network +namespace Server.Tests.Network; + +public class AccountPacketTests : IClassFixture { - public class AccountPacketTests : IClassFixture + private class MockedAccount : IAccount { - public readonly Dictionary dictionary = new(); - public Mock accountMock; + public int TotalGold { get; } + public int TotalPlat { get; } + public bool DepositGold(int amount) => throw new NotImplementedException(); - public AccountPacketTests() + public bool DepositPlat(int amount) => throw new NotImplementedException(); + + public bool WithdrawGold(int amount) => throw new NotImplementedException(); + + public bool WithdrawPlat(int amount) => throw new NotImplementedException(); + + public long GetTotalGold() => throw new NotImplementedException(); + + public int CompareTo(IAccount other) => throw new NotImplementedException(); + + public string Username { get; set; } + public string Email { get; set; } + public AccessLevel AccessLevel { get; set; } + public int Length { get; } + public int Limit { get; } + public int Count { get; } + + private Dictionary _mobiles = new(); + + public Mobile this[int index] { - accountMock = new Mock(); - accountMock - .Setup(sb => sb[It.IsAny()]) - .Returns((int key) => dictionary[key]); - accountMock - .SetupSet(sb => sb[It.IsAny()] = It.IsAny()) - .Callback( - (int key, Mobile m) => - { - dictionary[key] = m; - if (m != null) - { - m.Account = accountMock.Object; - } - }); - } - - [Fact] - public void TestChangeCharacter() - { - var firstMobile = new Mobile((Serial)0x1); - firstMobile.DefaultMobileInit(); - firstMobile.RawName = "Test Mobile"; - - var secondMobile = new Mobile((Serial)0x2); - secondMobile.DefaultMobileInit(); - secondMobile.RawName = null; - - var account = accountMock.Object; - account[0] = firstMobile; - account[1] = null; - account[2] = secondMobile; - - // var account = new MockAccount(new[] { firstMobile, null, secondMobile }); - var expected = new ChangeCharacter(account).Compile(); - - var ns = PacketTestUtilities.CreateTestNetState(); - ns.SendChangeCharacter(account); - - var result = ns.SendPipe.Reader.TryRead(); - AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); - } - - [Fact] - public void TestClientVersionReq() - { - var expected = new ClientVersionReq().Compile(); - - var ns = PacketTestUtilities.CreateTestNetState(); - - ns.SendClientVersionRequest(); - - var result = ns.SendPipe.Reader.TryRead(); - AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); - } - - [Fact] - public void TestDeleteResult() - { - var expected = new DeleteResult(DeleteResultType.BadRequest).Compile(); - - var ns = PacketTestUtilities.CreateTestNetState(); - ns.SendCharacterDeleteResult(DeleteResultType.BadRequest); - - var result = ns.SendPipe.Reader.TryRead(); - AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); - } - - [Fact] - public void TestPopupMessage() - { - var expected = new PopupMessage(PMMessage.LoginSyncError).Compile(); - - var ns = PacketTestUtilities.CreateTestNetState(); - ns.SendPopupMessage(PMMessage.LoginSyncError); - - var result = ns.SendPipe.Reader.TryRead(); - AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); - } - - [Theory, InlineData(ProtocolChanges.Version70610), InlineData(ProtocolChanges.Version6000)] - public void TestSupportedFeatures(ProtocolChanges protocolChanges) - { - var firstMobile = new Mobile((Serial)0x1); - firstMobile.DefaultMobileInit(); - firstMobile.Name = "Test Mobile"; - - var account = accountMock.Object; - account[0] = firstMobile; - account[1] = null; - account[2] = null; - account[3] = null; - account[4] = null; - - var ns = PacketTestUtilities.CreateTestNetState(); - ns.Account = account; - ns.ProtocolChanges = protocolChanges; - - var expected = new SupportedFeatures(ns).Compile(); - ns.SendSupportedFeature(); - - var result = ns.SendPipe.Reader.TryRead(); - AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); - } - - [Fact] - public void TestLoginConfirm() - { - var m = new Mobile((Serial)0x1); - m.DefaultMobileInit(); - m.Body = 0x100; - m.X = 100; - m.Y = 10; - m.Z = -10; - m.Direction = Direction.Down; - m.LogoutMap = Map.Felucca; - - var expected = new LoginConfirm(m).Compile(); - - var ns = PacketTestUtilities.CreateTestNetState(); - ns.SendLoginConfirmation(m); - - var result = ns.SendPipe.Reader.TryRead(); - AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); - } - - [Fact] - public void TestLoginComplete() - { - var expected = new LoginComplete().Compile(); - - var ns = PacketTestUtilities.CreateTestNetState(); - ns.SendLoginComplete(); - - var result = ns.SendPipe.Reader.TryRead(); - AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); - } - - [Fact] - public void TestCharacterListUpdate() - { - var firstMobile = new Mobile((Serial)0x1); - firstMobile.DefaultMobileInit(); - firstMobile.RawName = "Test Mobile"; - - var account = accountMock.Object; - account[0] = null; - account[1] = firstMobile; - account[2] = null; - account[3] = null; - account[4] = null; - - var expected = new CharacterListUpdate(account).Compile(); - - var ns = PacketTestUtilities.CreateTestNetState(); - ns.SendCharacterListUpdate(account); - - var result = ns.SendPipe.Reader.TryRead(); - AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); - } - - [Fact] - public void TestCharacterList70130() - { - var firstMobile = new Mobile((Serial)0x1); - firstMobile.DefaultMobileInit(); - firstMobile.Name = "Test Mobile"; - - var account = accountMock.Object; - account[0] = null; - account[1] = firstMobile; - account[2] = null; - account[3] = null; - account[4] = null; - - var info = new[] + get => _mobiles[index]; + set { - new CityInfo("Test City", "Test Building", 50, 100, 10, -10) - }; - - var expected = new CharacterList(account, info).Compile(); - - var ns = PacketTestUtilities.CreateTestNetState(); - ns.CityInfo = info; - ns.Account = account; - ns.ProtocolChanges = ProtocolChanges.Version70130; - - ns.SendCharacterList(); - - var result = ns.SendPipe.Reader.TryRead(); - AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); + _mobiles[index] = value; + if (value != null) + { + value.Account = this; + } + } } - [Fact] - public void TestCharacterListOld() + public void Delete() { - var firstMobile = new Mobile((Serial)0x1); - firstMobile.DefaultMobileInit(); - firstMobile.Name = "Test Mobile"; - - var account = accountMock.Object; - account[0] = null; - account[1] = firstMobile; - account[2] = null; - account[3] = null; - account[4] = null; - - var info = new[] - { - new CityInfo("Test City", "Test Building", 50, 100, 10, -10) - }; - - var expected = new CharacterListOld(account, info).Compile(); - - var ns = PacketTestUtilities.CreateTestNetState(); - ns.CityInfo = info; - ns.Account = account; - - ns.SendCharacterList(); - - var result = ns.SendPipe.Reader.TryRead(); - AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); + throw new NotImplementedException(); } - [Fact] - public void TestAccountLoginRej() + public void SetPassword(string password) { - var reason = ALRReason.BadComm; - var expected = new AccountLoginRej(reason).Compile(); - - var ns = PacketTestUtilities.CreateTestNetState(); - ns.SendAccountLoginRejected(reason); - - var result = ns.SendPipe.Reader.TryRead(); - AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); + throw new NotImplementedException(); } - [Fact] - public void TestAccountLoginAck() + public bool CheckPassword(string password) => throw new NotImplementedException(); + } + + [Fact] + public void TestChangeCharacter() + { + var firstMobile = new Mobile((Serial)0x1); + firstMobile.DefaultMobileInit(); + firstMobile.RawName = "Test Mobile"; + + var secondMobile = new Mobile((Serial)0x2); + secondMobile.DefaultMobileInit(); + secondMobile.RawName = null; + + var account = new MockedAccount { - var info = new[] - { - new ServerInfo("Test Server", 0, TimeZoneInfo.Local, IPEndPoint.Parse("127.0.0.1")) - }; + [0] = firstMobile, + [1] = null, + [2] = secondMobile + }; - var expected = new AccountLoginAck(info).Compile(); + // var account = new MockAccount(new[] { firstMobile, null, secondMobile }); + var expected = new ChangeCharacter(account).Compile(); - var ns = PacketTestUtilities.CreateTestNetState(); - ns.ServerInfo = info; + var ns = PacketTestUtilities.CreateTestNetState(); + ns.SendChangeCharacter(account); - ns.SendAccountLoginAck(); + var result = ns.SendPipe.Reader.TryRead(); + AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); + } - var result = ns.SendPipe.Reader.TryRead(); - AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); - } + [Fact] + public void TestClientVersionReq() + { + var expected = new ClientVersionReq().Compile(); - [Fact] - public void TestPlayServerAck() + var ns = PacketTestUtilities.CreateTestNetState(); + + ns.SendClientVersionRequest(); + + var result = ns.SendPipe.Reader.TryRead(); + AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); + } + + [Fact] + public void TestDeleteResult() + { + var expected = new DeleteResult(DeleteResultType.BadRequest).Compile(); + + var ns = PacketTestUtilities.CreateTestNetState(); + ns.SendCharacterDeleteResult(DeleteResultType.BadRequest); + + var result = ns.SendPipe.Reader.TryRead(); + AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); + } + + [Fact] + public void TestPopupMessage() + { + var expected = new PopupMessage(PMMessage.LoginSyncError).Compile(); + + var ns = PacketTestUtilities.CreateTestNetState(); + ns.SendPopupMessage(PMMessage.LoginSyncError); + + var result = ns.SendPipe.Reader.TryRead(); + AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); + } + + [Theory, InlineData(ProtocolChanges.Version70610), InlineData(ProtocolChanges.Version6000)] + public void TestSupportedFeatures(ProtocolChanges protocolChanges) + { + var firstMobile = new Mobile((Serial)0x1); + firstMobile.DefaultMobileInit(); + firstMobile.Name = "Test Mobile"; + + var account = new MockedAccount { - var si = new ServerInfo("Test Server", 0, TimeZoneInfo.Local, IPEndPoint.Parse("127.0.0.1")); - var authId = 0x123456; + [0] = firstMobile, + [1] = null, + [2] = null, + [3] = null, + [4] = null + }; - var expected = new PlayServerAck(si, authId).Compile(); + var ns = PacketTestUtilities.CreateTestNetState(); + ns.Account = account; + ns.ProtocolChanges = protocolChanges; - var ns = PacketTestUtilities.CreateTestNetState(); + var expected = new SupportedFeatures(ns).Compile(); + ns.SendSupportedFeature(); - ns.SendPlayServerAck(si, authId); + var result = ns.SendPipe.Reader.TryRead(); + AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); + } - var result = ns.SendPipe.Reader.TryRead(); - AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); - } + [Fact] + public void TestLoginConfirm() + { + var m = new Mobile((Serial)0x1); + m.DefaultMobileInit(); + m.Body = 0x100; + m.X = 100; + m.Y = 10; + m.Z = -10; + m.Direction = Direction.Down; + m.LogoutMap = Map.Felucca; + + var expected = new LoginConfirm(m).Compile(); + + var ns = PacketTestUtilities.CreateTestNetState(); + ns.SendLoginConfirmation(m); + + var result = ns.SendPipe.Reader.TryRead(); + AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); + } + + [Fact] + public void TestLoginComplete() + { + var expected = new LoginComplete().Compile(); + + var ns = PacketTestUtilities.CreateTestNetState(); + ns.SendLoginComplete(); + + var result = ns.SendPipe.Reader.TryRead(); + AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); + } + + [Fact] + public void TestCharacterListUpdate() + { + var firstMobile = new Mobile((Serial)0x1); + firstMobile.DefaultMobileInit(); + firstMobile.RawName = "Test Mobile"; + + var account = new MockedAccount + { + [0] = null, + [1] = firstMobile, + [2] = null, + [3] = null, + [4] = null + }; + + var expected = new CharacterListUpdate(account).Compile(); + + var ns = PacketTestUtilities.CreateTestNetState(); + ns.SendCharacterListUpdate(account); + + var result = ns.SendPipe.Reader.TryRead(); + AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); + } + + [Fact] + public void TestCharacterList70130() + { + var firstMobile = new Mobile((Serial)0x1); + firstMobile.DefaultMobileInit(); + firstMobile.Name = "Test Mobile"; + + var account = new MockedAccount + { + [0] = null, + [1] = firstMobile, + [2] = null, + [3] = null, + [4] = null + }; + + var info = new[] + { + new CityInfo("Test City", "Test Building", 50, 100, 10, -10) + }; + + var expected = new CharacterList(account, info).Compile(); + + var ns = PacketTestUtilities.CreateTestNetState(); + ns.CityInfo = info; + ns.Account = account; + ns.ProtocolChanges = ProtocolChanges.Version70130; + + ns.SendCharacterList(); + + var result = ns.SendPipe.Reader.TryRead(); + AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); + } + + [Fact] + public void TestCharacterListOld() + { + var firstMobile = new Mobile((Serial)0x1); + firstMobile.DefaultMobileInit(); + firstMobile.Name = "Test Mobile"; + + var account = new MockedAccount + { + [0] = null, + [1] = firstMobile, + [2] = null, + [3] = null, + [4] = null + }; + + var info = new[] + { + new CityInfo("Test City", "Test Building", 50, 100, 10, -10) + }; + + var expected = new CharacterListOld(account, info).Compile(); + + var ns = PacketTestUtilities.CreateTestNetState(); + ns.CityInfo = info; + ns.Account = account; + + ns.SendCharacterList(); + + var result = ns.SendPipe.Reader.TryRead(); + AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); + } + + [Fact] + public void TestAccountLoginRej() + { + var reason = ALRReason.BadComm; + var expected = new AccountLoginRej(reason).Compile(); + + var ns = PacketTestUtilities.CreateTestNetState(); + ns.SendAccountLoginRejected(reason); + + var result = ns.SendPipe.Reader.TryRead(); + AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); + } + + [Fact] + public void TestAccountLoginAck() + { + var info = new[] + { + new ServerInfo("Test Server", 0, TimeZoneInfo.Local, IPEndPoint.Parse("127.0.0.1")) + }; + + var expected = new AccountLoginAck(info).Compile(); + + var ns = PacketTestUtilities.CreateTestNetState(); + ns.ServerInfo = info; + + ns.SendAccountLoginAck(); + + var result = ns.SendPipe.Reader.TryRead(); + AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); + } + + [Fact] + public void TestPlayServerAck() + { + var si = new ServerInfo("Test Server", 0, TimeZoneInfo.Local, IPEndPoint.Parse("127.0.0.1")); + var authId = 0x123456; + + var expected = new PlayServerAck(si, authId).Compile(); + + var ns = PacketTestUtilities.CreateTestNetState(); + + ns.SendPlayServerAck(si, authId); + + var result = ns.SendPipe.Reader.TryRead(); + AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); } } diff --git a/Projects/UOContent.Tests/Tests/Engines/ML Quests/MLQuestPacketTests.cs b/Projects/UOContent.Tests/Tests/Engines/ML Quests/MLQuestPacketTests.cs index 2a1f36a3f..f1f50720e 100644 --- a/Projects/UOContent.Tests/Tests/Engines/ML Quests/MLQuestPacketTests.cs +++ b/Projects/UOContent.Tests/Tests/Engines/ML Quests/MLQuestPacketTests.cs @@ -1,43 +1,86 @@ using System; -using Moq; using Server.Tests; using Server.Tests.Network; using Xunit; -namespace Server.Engines.MLQuests +namespace Server.Engines.MLQuests; + +public class MLQuestPacketTests { - public class MLQuestPacketTests + private class MockedRace( + int raceID, + int raceIndex, + string name, + string pluralName, + int maleBody, + int femaleBody, + int maleGhostBody, + int femaleGhostBody, + Expansion requiredExpansion + ) + : Race(raceID, + raceIndex, + name, + pluralName, + maleBody, + femaleBody, + maleGhostBody, + femaleGhostBody, + requiredExpansion + ) { - [Theory] - [InlineData(true, 1)] - [InlineData(false, 2)] - public void TestRaceChanger(bool female, int raceId) - { - var raceMock = new Mock( - raceId, 0, "Test Race", "Test Races", 0x1, 0x2, 0x3, 0x4, Expansion.None - ); + public override bool ValidateHair(bool female, int itemID) => throw new NotImplementedException(); - var race = raceMock.Object; + public override int RandomHair(bool female) => throw new NotImplementedException(); - var expected = new RaceChanger(female, race).Compile(); + public override bool ValidateFacialHair(bool female, int itemID) => throw new NotImplementedException(); - var ns = PacketTestUtilities.CreateTestNetState(); - ns.SendRaceChanger(female, race); + public override int RandomFacialHair(bool female) => throw new NotImplementedException(); - var result = ns.SendPipe.Reader.TryRead(); - AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); - } + public override int ClipSkinHue(int hue) => throw new NotImplementedException(); - [Fact] - public void TestCloseRaceChanger() - { - var expected = new CloseRaceChanger().Compile(); + public override int RandomSkinHue() => throw new NotImplementedException(); - var ns = PacketTestUtilities.CreateTestNetState(); - ns.SendCloseRaceChanger(); + public override int ClipHairHue(int hue) => throw new NotImplementedException(); - var result = ns.SendPipe.Reader.TryRead(); - AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); - } + public override int RandomHairHue() => throw new NotImplementedException(); + } + + [Theory] + [InlineData(true, 1)] + [InlineData(false, 2)] + public void TestRaceChanger(bool female, int raceId) + { + var race = new MockedRace( + raceId, + 0, + "Test Race", + "Test Races", + 0x1, + 0x2, + 0x3, + 0x4, + Expansion.None + ); + + var expected = new RaceChanger(female, race).Compile(); + + var ns = PacketTestUtilities.CreateTestNetState(); + ns.SendRaceChanger(female, race); + + var result = ns.SendPipe.Reader.TryRead(); + AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); + } + + [Fact] + public void TestCloseRaceChanger() + { + var expected = new CloseRaceChanger().Compile(); + + var ns = PacketTestUtilities.CreateTestNetState(); + ns.SendCloseRaceChanger(); + + var result = ns.SendPipe.Reader.TryRead(); + AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); } } diff --git a/Projects/UOContent.Tests/Tests/Multis/Boats/BoatPacketTests.cs b/Projects/UOContent.Tests/Tests/Multis/Boats/BoatPacketTests.cs index d015ec80a..3f5772eb0 100644 --- a/Projects/UOContent.Tests/Tests/Multis/Boats/BoatPacketTests.cs +++ b/Projects/UOContent.Tests/Tests/Multis/Boats/BoatPacketTests.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.Linq; -using Moq; using Server; using Server.Multis; using Server.Multis.Boats; @@ -10,120 +9,114 @@ using Server.Tests; using Server.Tests.Network; using Xunit; -namespace UOContent.Tests +namespace UOContent.Tests; + +public class BoatPacketTests : IClassFixture { - public class BoatPacketTests : IClassFixture + [Theory] + [InlineData(Direction.West, 10, 100, 200)] + public void TestMoveBoatHS(Direction d, int speed, int xOffset, int yOffset) { - [Theory] - [InlineData(Direction.West, 10, 100, 200)] - public void TestMoveBoatHS(Direction d, int speed, int xOffset, int yOffset) + var item1 = new Item((Serial)0x1000) { - var item1 = new Item((Serial)0x1000) - { - ItemID = 0x13B9, - Location = new Point3D(11, 21, 16), - Map = Map.Felucca, - Visible = true - }; - var item2 = new Item((Serial)0x2000) - { - ItemID = 0x13B9, - Location = new Point3D(100, 200, 16), - Map = Map.Felucca, - Visible = true - }; - - var beholder = new Mock((Serial)0x100); - beholder.Object.DefaultMobileInit(); - beholder.Object.Location = new Point3D(10, 20, 15); - beholder.Object.Map = Map.Felucca; - beholder.Setup(m => m.CanSee(It.Is(e => e == beholder.Object))).Returns(true); - beholder.Setup(m => m.CanSee(It.Is(e => e == item1))).Returns(true); - beholder.Setup(m => m.CanSee(It.Is(e => e == item2))).Returns(false); - - var list = new List { item1, beholder.Object }; - var notContained = new List { item2 }; - var boat = new TestBoat((Serial)0x3000, list, notContained) - { - Location = new Point3D(10, 20, 15), - Facing = Direction.Right, - Map = Map.Felucca - }; - - beholder.Setup(m => m.CanSee(It.Is(e => e == boat))).Returns(true); - - var ns = PacketTestUtilities.CreateTestNetState(); - ns.ProtocolChanges = ProtocolChanges.HighSeas; - var expected = new MoveBoatHS(beholder.Object, boat, d, speed, list, xOffset, yOffset).Compile(); - - ns.SendMoveBoatHS(beholder.Object, boat, d, speed, boat.GetMovingEntities(true), xOffset, yOffset); - - var result = ns.SendPipe.Reader.TryRead(); - AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); - } - - [Fact] - public void TestDisplayBoatHS() + ItemID = 0x13B9, + Location = new Point3D(11, 21, 16), + Map = Map.Felucca, + Visible = true + }; + var item2 = new Item((Serial)0x2000) { - var item1 = new Item((Serial)0x1000) - { - ItemID = 0x13B9, - Location = new Point3D(11, 21, 16), - Map = Map.Felucca - }; - var item2 = new Item((Serial)0x2000) - { - ItemID = 0x13B9, - Location = new Point3D(100, 200, 16), - Map = Map.Felucca - }; + ItemID = 0x13B9, + Location = new Point3D(100, 200, 16), + Map = Map.Felucca, + Visible = true + }; - var beholder = new Mock((Serial)0x100); - beholder.Object.DefaultMobileInit(); - beholder.Object.Location = new Point3D(10, 20, 15); - beholder.Setup(m => m.CanSee(It.Is(e => e == beholder.Object))).Returns(true); - beholder.Setup(m => m.CanSee(It.Is(e => e == item1))).Returns(true); - beholder.Setup(m => m.CanSee(It.Is(e => e == item2))).Returns(false); + var beholder = new MockedMobile((Serial)0x100); + beholder.DefaultMobileInit(); + beholder.Location = new Point3D(10, 20, 15); + beholder.Map = Map.Felucca; + beholder.CanSeeEntities.Add(item1); - var list = new List { item1, beholder.Object }; - var notContained = new List { item2 }; - var boat = new TestBoat((Serial)0x3000, list, notContained) - { - Location = new Point3D(10, 20, 15), - Facing = Direction.Right - }; - - beholder.Setup(m => m.CanSee(It.Is(e => e == boat))).Returns(true); - - var ns = PacketTestUtilities.CreateTestNetState(); - ns.ProtocolChanges = ProtocolChanges.HighSeas; - - var expected = new DisplayBoatHS(beholder.Object, boat).Compile(); - - ns.SendDisplayBoatHS(beholder.Object, boat); - - var result = ns.SendPipe.Reader.TryRead(); - AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); - } - - public class TestBoat : BaseBoat + var list = new List { item1, beholder }; + var notContained = new List { item2 }; + var boat = new TestBoat((Serial)0x3000, list, notContained) { - private readonly List components; - private readonly List notContained; + Location = new Point3D(10, 20, 15), + Facing = Direction.Right, + Map = Map.Felucca + }; - public TestBoat(Serial serial, List list, List notContainedList) : base(serial) - { - components = list; - notContained = notContainedList; - Components = new MultiComponentList(new List()); - } + beholder.CanSeeEntities.Add(boat); - public override MultiComponentList Components { get; } + var ns = PacketTestUtilities.CreateTestNetState(); + ns.ProtocolChanges = ProtocolChanges.HighSeas; + var expected = new MoveBoatHS(beholder, boat, d, speed, list, xOffset, yOffset).Compile(); - public override bool Contains(int x, int y) => !notContained.Any(e => e.X == x && e.Y == y); + ns.SendMoveBoatHS(beholder, boat, d, speed, boat.GetMovingEntities(true), xOffset, yOffset); - public override MovingEntitiesEnumerable GetMovingEntities(bool includeBoat = false) => - new(this, true, new Map.PooledEnumerable(components)); - } + var result = ns.SendPipe.Reader.TryRead(); + AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); + } + + [Fact] + public void TestDisplayBoatHS() + { + var item1 = new Item((Serial)0x1000) + { + ItemID = 0x13B9, + Location = new Point3D(11, 21, 16), + Map = Map.Felucca + }; + var item2 = new Item((Serial)0x2000) + { + ItemID = 0x13B9, + Location = new Point3D(100, 200, 16), + Map = Map.Felucca + }; + + var beholder = new MockedMobile((Serial)0x100); + beholder.DefaultMobileInit(); + beholder.Location = new Point3D(10, 20, 15); + + beholder.CanSeeEntities.Add(item1); + + var list = new List { item1, beholder }; + var notContained = new List { item2 }; + var boat = new TestBoat((Serial)0x3000, list, notContained) + { + Location = new Point3D(10, 20, 15), + Facing = Direction.Right + }; + + beholder.CanSeeEntities.Add(boat); + + var ns = PacketTestUtilities.CreateTestNetState(); + ns.ProtocolChanges = ProtocolChanges.HighSeas; + + var expected = new DisplayBoatHS(beholder, boat).Compile(); + + ns.SendDisplayBoatHS(beholder, boat); + + var result = ns.SendPipe.Reader.TryRead(); + AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); + } + + private class TestBoat(Serial serial, List list, List notContainedList) : BaseBoat(serial) + { + public override MultiComponentList Components { get; } = new(new List()); + + public override bool Contains(int x, int y) => !notContainedList.Any(e => e.X == x && e.Y == y); + + public override MovingEntitiesEnumerable GetMovingEntities(bool includeBoat = false) => + new(this, true, new Map.PooledEnumerable(list)); + } + + private class MockedMobile(Serial serial) : Mobile(serial) + { + public HashSet CanSeeEntities = new(); + public override bool CanSee(Mobile m) => m == this; + + public override bool CanSee(Item i) => CanSeeEntities.Contains(i); } } diff --git a/Projects/UOContent.Tests/UOContent.Tests.csproj b/Projects/UOContent.Tests/UOContent.Tests.csproj index 4c7f59576..6d6f86bed 100644 --- a/Projects/UOContent.Tests/UOContent.Tests.csproj +++ b/Projects/UOContent.Tests/UOContent.Tests.csproj @@ -4,8 +4,7 @@ Debug;Release;Analyze - - +