// // InPacketConverterTests.cs // // Copyright (c) František Boháček. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. using System.Collections.Generic; using Microsoft.Extensions.DependencyInjection; using NosSmooth.Packets.Enums; using NosSmooth.Packets.Enums.Entities; using NosSmooth.Packets.Enums.Players; using NosSmooth.Packets.Server.Character; using NosSmooth.Packets.Server.Maps; using NosSmooth.Packets.Server.Weapons; using NosSmooth.PacketSerializer; using NosSmooth.PacketSerializer.Abstractions; using NosSmooth.PacketSerializer.Abstractions.Attributes; using NosSmooth.PacketSerializer.Extensions; using NosSmooth.PacketSerializer.Packets; using Shouldly; using Xunit; namespace NosSmooth.Packets.Tests.Converters.Packets; /// /// Tests InPacketConverter. /// public class InPacketConverterTests { private readonly IPacketSerializer _packetSerializer; /// /// Initializes a new instance of the class. /// public InPacketConverterTests() { var provider = new ServiceCollection() .AddPacketSerialization() .BuildServiceProvider(); _packetSerializer = provider.GetRequiredService(); provider.GetRequiredService().AddDefaultPackets(); } /// /// Checks that the converter deserializes in player packet correctly. /// [Fact] public void DeserializesPlayerInCorrectly() { var packetString = "in 1 dfrfgh - 55 79 2 6 2 1 0 106 2 -1.4480.4452.4468.4840.4132.-1.-1.-1.-1 50 95 0 -1 4 4 0 43 0 0 108 108 -1 - 26 0 0 0 0 99 0 0|0|0 0 0 10 80 0"; var result = _packetSerializer.Deserialize(packetString, PacketSource.Server); var expectedPacket = new InPacket ( EntityType.Player, "dfrfgh", null, null, 55, 79, 2, 6, new InPlayerSubPacket ( AuthorityType.GameMaster, SexType.Female, HairStyle.HairStyleA, HairColor.FlashPurple, PlayerClass.Archer, new InEquipmentSubPacket ( null, 4480, 4452, 4468, 4840, 4132, null, null, null, null ), 50, 95, false, null, 4, Element.Dark, 0, 43, 0, 0, new UpgradeRareSubPacket(10, 8), new UpgradeRareSubPacket(10, 8), new NullableWrapper(null), null, 26, false, 0, 0, 0, 99, 0, new List(new[] { false, false, false }), false, 0, 10, 80, 0 ), null, null ); result.IsSuccess.ShouldBeTrue(); var packet = (InPacket)result.Entity; packet.EntityType.ShouldBe(expectedPacket.EntityType); packet.EntityId.ShouldBe(expectedPacket.EntityId); packet.ItemSubPacket.ShouldBe(expectedPacket.ItemSubPacket); packet.Direction.ShouldBe(expectedPacket.Direction); packet.Name.ShouldBe(expectedPacket.Name); packet.PositionX.ShouldBe(expectedPacket.PositionX); packet.PositionY.ShouldBe(expectedPacket.PositionY); packet.VNum.ShouldBe(expectedPacket.VNum); packet.NonPlayerSubPacket.ShouldBe(expectedPacket.NonPlayerSubPacket); packet.PlayerSubPacket.ShouldNotBeNull(); var playerSubPacket = packet.PlayerSubPacket!; var expectedSubPacket = packet.PlayerSubPacket!; playerSubPacket.Level.ShouldBe(expectedSubPacket.Level); playerSubPacket.FamilySubPacket.ShouldBe(expectedSubPacket.FamilySubPacket); playerSubPacket.HeroLevel.ShouldBe(expectedSubPacket.HeroLevel); playerSubPacket.Size.ShouldBe(expectedSubPacket.Size); playerSubPacket.FamilyLevel.ShouldBe(expectedSubPacket.FamilyLevel); playerSubPacket.MorphUpgrade.ShouldBe(expectedSubPacket.MorphUpgrade); playerSubPacket.MorphUpgrade2.ShouldBe(expectedSubPacket.MorphUpgrade2); playerSubPacket.Authority.ShouldBe(expectedSubPacket.Authority); playerSubPacket.Class.ShouldBe(expectedSubPacket.Class); playerSubPacket.Compliment.ShouldBe(expectedSubPacket.Compliment); playerSubPacket.Equipment.ShouldBe(expectedSubPacket.Equipment); playerSubPacket.Faction.ShouldBe(expectedSubPacket.Faction); playerSubPacket.Fairy.ShouldBe(expectedSubPacket.Fairy); playerSubPacket.Sex.ShouldBe(expectedSubPacket.Sex); playerSubPacket.ArenaWinner.ShouldBe(expectedSubPacket.ArenaWinner); playerSubPacket.FairyElement.ShouldBe(expectedSubPacket.FairyElement); playerSubPacket.FamilyIcons.ShouldBe(expectedSubPacket.FamilyIcons); playerSubPacket.FamilyName.ShouldBe(expectedSubPacket.FamilyName); playerSubPacket.GroupId.ShouldBe(expectedSubPacket.GroupId); playerSubPacket.HairColor.ShouldBe(expectedSubPacket.HairColor); playerSubPacket.HairStyle.ShouldBe(expectedSubPacket.HairStyle); playerSubPacket.HpPercentage.ShouldBe(expectedSubPacket.HpPercentage); playerSubPacket.IsInvisible.ShouldBe(expectedSubPacket.IsInvisible); playerSubPacket.IsSitting.ShouldBe(expectedSubPacket.IsSitting); playerSubPacket.MpPercentage.ShouldBe(expectedSubPacket.MpPercentage); playerSubPacket.ReputationIcon.ShouldBe(expectedSubPacket.ReputationIcon); playerSubPacket.FamilySubPacket.ShouldBe(expectedSubPacket.FamilySubPacket); playerSubPacket.ArmorUpgradeRareSubPacket.ShouldBe(expectedSubPacket.ArmorUpgradeRareSubPacket); playerSubPacket.WeaponUpgradeRareSubPacket.ShouldBe(expectedSubPacket.WeaponUpgradeRareSubPacket); playerSubPacket.MorphVNum.ShouldBe(expectedSubPacket.MorphVNum); } /// /// Checks that packet with UpgradeRareSubPacket 0 deserializes. /// [Fact] public void DeserializesPlayerSuccessfully() { var packetString = "in 1 fairy50% - 6893217 140 148 2 0 1 0 9 0 -1.12.1.8.-1.4131.-1.-1.-1.-1 100 100 0 1 4 3 0 42 1 0 0 0 -1 - 1 0 0 0 0 9 0 0|0|0 0 0 10 0 0"; var result = _packetSerializer.Deserialize(packetString, PacketSource.Server); Assert.True(result.IsSuccess); } /// /// Checks that the converter serializes in player packet correctly. /// [Fact] public void SerializesPlayerInCorrectly() { var packet = new InPacket ( EntityType.Player, "dfrfgh", null, null, 55, 79, 2, 6, new InPlayerSubPacket ( AuthorityType.GameMaster, SexType.Female, HairStyle.HairStyleA, HairColor.FlashPurple, PlayerClass.Archer, new InEquipmentSubPacket ( -1, 4480, 4452, 4468, 4840, 4132, -1, -1, -1, -1 ), 50, 95, false, -1, 4, Element.Dark, 0, 43, 0, 0, new UpgradeRareSubPacket(10, 8), new UpgradeRareSubPacket(10, 8), new NullableWrapper(null), null, 26, false, 0, 0, 0, 99, 0, new List(new[] { false, false, false }), false, 0, 10, 80, 0 ), null, null ); var result = _packetSerializer.Serialize(packet); var expectedPacketString = "in 1 dfrfgh - 55 79 2 6 2 1 0 106 2 -1.4480.4452.4468.4840.4132.-1.-1.-1.-1 50 95 0 -1 4 4 0 43 0 0 108 108 -1 - 26 0 0 0 0 99 0 0|0|0 0 0 10 80 0"; Assert.True(result.IsSuccess); Assert.Equal(expectedPacketString, result.Entity); } /// /// Checks that the converter deserializes in npc packet correctly. /// [Fact] public void DeserializesNpcInCorrectly() { var packetString = "in 2 334 1992 134 112 2 100 80 0 0 0 -1 1 0 -1 - 0 -1 0 0 0 0 0 0 0 0 0 0"; var result = _packetSerializer.Deserialize(packetString, PacketSource.Server); var expectedPacket = new InPacket ( EntityType.Npc, null, 334, null, 1992, 134, 112, 2, null, null, new InNonPlayerSubPacket ( 100, 80, 0, 0, 0, null, SpawnEffect.NoEffect, false, null, null, "0", "-1", "0", 0, 0, 0, 0, 0, 0, false, "0", "0" ) ); Assert.True(result.IsSuccess); result.IsSuccess.ShouldBeTrue(); result.Entity.ShouldBe(expectedPacket); } /// /// Checks that the converter serializes in npc packet correctly. /// [Fact] public void SerializesNpcInCorrectly() { var actualPacket = new InPacket ( EntityType.Npc, null, 334, null, 1992, 134, 112, 2, null, null, new InNonPlayerSubPacket ( 100, 80, 0, 0, 0, -1, SpawnEffect.NoEffect, false, -1, null, "0", null, "0", 0, 0, 0, 0, 0, 0, false, "0", "0" ) ); var result = _packetSerializer.Serialize(actualPacket); Assert.True(result.IsSuccess); var expectedPacketString = "in 2 334 1992 134 112 2 100 80 0 0 0 -1 1 0 -1 - 0 - 0 0 0 0 0 0 0 0 0 0"; Assert.Equal(expectedPacketString, result.Entity); } }