// // CListPacketConverterTests.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 System.Linq; using Microsoft.Extensions.DependencyInjection; using NosSmooth.Packets.Enums.Players; using NosSmooth.Packets.Server.Login; 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 CListPacketConverter. /// public class CListPacketConverterTests { private readonly IPacketSerializer _packetSerializer; /// /// Initializes a new instance of the class. /// public CListPacketConverterTests() { var provider = new ServiceCollection() .AddPacketSerialization() .BuildServiceProvider(); _packetSerializer = provider.GetRequiredService(); provider.GetRequiredService().AddDefaultPackets(); } /// /// Tests that the serialization runs correctly. /// [Fact] public void Converter_Serialization_SerializesCorrectly() { var packet = new CListPacket ( 1, "derfy", 0, SexType.Female, HairStyle.HairStyleA, HairColor.FlashPurple, 0, PlayerClass.Archer, 99, 80, new CListEquipmentSubPacket ( null, null, 4452, 4468, 4840, 4131, null, null ), 99, string.Empty, 1, 1, new OptionalWrapper>[] { new NullableWrapper(new CListPetSubPacket(0, 2105)), new NullableWrapper(new CListPetSubPacket(0, 319)), new NullableWrapper(new CListPetSubPacket(0, 2106)), new NullableWrapper(new CListPetSubPacket(0, 2107)), new NullableWrapper(new CListPetSubPacket(0, 2108)), new NullableWrapper(new CListPetSubPacket(0, 2100)), new NullableWrapper(new CListPetSubPacket(0, 2102)), new NullableWrapper(new CListPetSubPacket(0, 317)), new NullableWrapper(null), new NullableWrapper(null), new NullableWrapper(null), new NullableWrapper(null), new NullableWrapper(null), new NullableWrapper(null), new NullableWrapper(null), new NullableWrapper(null), new NullableWrapper(null), new NullableWrapper(null), new NullableWrapper(null), new NullableWrapper(null), new NullableWrapper(null), new NullableWrapper(null), new NullableWrapper(null), new NullableWrapper(null), new NullableWrapper(null), new NullableWrapper(null), }, 0, 0 ); var packetResult = _packetSerializer.Serialize(packet); Assert.True(packetResult.IsSuccess); Assert.Equal ( "clist 1 derfy 0 1 0 106 0 2 99 80 -1.-1.4452.4468.4840.4131.-1.-1 99 1 1 0.2105.0.319.0.2106.0.2107.0.2108.0.2100.0.2102.0.317.-1.-1.-1.-1.-1.-1.-1.-1.-1.-1.-1.-1.-1.-1.-1.-1.-1.-1 0 0", packetResult.Entity ); } /// /// Tests that the deserialization runs correctly. /// [Fact] public void Converter_Deserialization_DeserializesCorrectly() { var packetResult = _packetSerializer.Deserialize ( "clist 1 derfy 0 1 0 106 0 2 99 80 -1.-1.4452.4468.4840.4131.-1.-1 99 1 1 0.2105.0.319.0.2106.0.2107.0.2108.0.2100.0.2102.0.317.-1.-1.-1.-1.-1.-1.-1.-1.-1.-1.-1.-1.-1.-1.-1.-1.-1.-1 0 0", PacketSource.Server ); packetResult.IsSuccess.ShouldBeTrue(); var expectedPacket = new CListPacket ( 1, "derfy", 0, SexType.Female, HairStyle.HairStyleA, HairColor.FlashPurple, 0, PlayerClass.Archer, 99, 80, new CListEquipmentSubPacket ( null, null, 4452, 4468, 4840, 4131, null, null ), 99, string.Empty, 1, 1, new List>>(new OptionalWrapper>[] { new NullableWrapper(new CListPetSubPacket(0, 2105)), new NullableWrapper(new CListPetSubPacket(0, 319)), new NullableWrapper(new CListPetSubPacket(0, 2106)), new NullableWrapper(new CListPetSubPacket(0, 2107)), new NullableWrapper(new CListPetSubPacket(0, 2108)), new NullableWrapper(new CListPetSubPacket(0, 2100)), new NullableWrapper(new CListPetSubPacket(0, 2102)), new NullableWrapper(new CListPetSubPacket(0, 317)), new NullableWrapper(null), new NullableWrapper(null), new NullableWrapper(null), new NullableWrapper(null), new NullableWrapper(null), new NullableWrapper(null), new NullableWrapper(null), new NullableWrapper(null), new NullableWrapper(null), new NullableWrapper(null), new NullableWrapper(null), new NullableWrapper(null), new NullableWrapper(null), new NullableWrapper(null), new NullableWrapper(null), new NullableWrapper(null), new NullableWrapper(null), new NullableWrapper(null), }), 0, 0 ); packetResult.Entity.ShouldBeEquivalentTo(expectedPacket); } /// /// Tests that deserialization of pets list with optional values works correctly. /// [Fact] public void Converter_Deserialization_PresentFalseForNotPresent() { var packetResult = _packetSerializer.Deserialize ( "clist 2 KexpExp 0 1 0 9 0 0 22 0 -1.12.1.8.-1.-1.-1.-1.-1.-1 20 1 1 -1.-1.-1.-1.-1.-1.-1.-1.-1.-1.-1.-1.-1.-1.-1.-1.-1.-1.-1.-1.-1.-1.-1.-1.-1.-1. 0 0", PacketSource.Server ); Assert.True(packetResult.IsSuccess); var packet = (CListPacket)packetResult.Entity; Assert.Equal(27, packet.PetsSubPacket.Count); Assert.False(packet.PetsSubPacket.Last().Present); for (var i = 0; i < 26; i++) { Assert.True(packet.PetsSubPacket[i].Present); Assert.True(packet.PetsSubPacket[i].Value.Value is null); } } }