using System.Text.Json; using PkmnLib.Dynamic.Models; using PkmnLib.Dynamic.Models.Serialized; using PkmnLib.Static; using PkmnLib.Static.Species; using PkmnLib.Tests.Integration; namespace PkmnLib.Tests.Dynamic; public class SerializationTests { [Test] public void SerializePokemon() { var library = LibraryHelpers.LoadLibrary(); Assert.That(library.StaticLibrary.Species.TryGet("bulbasaur", out var species)); var pokemon = new PokemonImpl(library, species!, species!.GetDefaultForm(), new AbilityIndex() { Index = 0, IsHidden = false, }, 10, 1000, Gender.Male, 0, "hardy"); pokemon.LearnMove("tackle", MoveLearnMethod.LevelUp, 255); var data = pokemon.Serialize(); Assert.That(data, Is.Not.Null); Assert.Multiple(() => { Assert.That(data.Species, Is.EqualTo("bulbasaur")); Assert.That(data.Form, Is.EqualTo("default")); Assert.That(data.Ability, Is.EqualTo("overgrow")); Assert.That(data.Level, Is.EqualTo(10)); Assert.That(data.PersonalityValue, Is.EqualTo(1000)); Assert.That(data.Gender, Is.EqualTo(Gender.Male)); Assert.That(data.Experience, Is.EqualTo(560)); Assert.That(data.Coloring, Is.EqualTo(0)); Assert.That(data.HeldItem, Is.Null); Assert.That(data.CurrentHealth, Is.EqualTo(29)); Assert.That(data.Happiness, Is.EqualTo(70)); }); Assert.That(data.Moves, Has.Length.EqualTo(4)); Assert.That(data.Moves[0], Is.Not.Null); Assert.Multiple(() => { Assert.That(data.Moves[0]!.MoveName, Is.EqualTo("tackle")); Assert.That(data.Moves[0]!.LearnMethod, Is.EqualTo(MoveLearnMethod.LevelUp)); Assert.That(data.Moves[0]!.CurrentPp, Is.EqualTo(35)); }); } [Test] public void DeserializePokemon() { var library = LibraryHelpers.LoadLibrary(); var data = new SerializedPokemon { Species = "bulbasaur", Form = "default", Ability = "overgrow", Level = 10, Experience = 560, PersonalityValue = 1000, Gender = Gender.Male, Coloring = 0, HeldItem = null, CurrentHealth = 29, Happiness = 70, IndividualValues = new SerializedStats(20, 20, 20, 20, 20, 20), EffortValues = new SerializedStats(0, 0, 0, 0, 0, 0), Nature = "hardy", Nickname = "foo", Moves = new[] { new SerializedLearnedMove { MoveName = "tackle", LearnMethod = MoveLearnMethod.LevelUp, CurrentPp = 23, }, null, null, null, }, }; var pokemon = new PokemonImpl(library, data); Assert.Multiple(() => { Assert.That(pokemon.Species.Name.ToString(), Is.EqualTo("bulbasaur")); Assert.That(pokemon.Form.Name.ToString(), Is.EqualTo("default")); Assert.That(pokemon.AbilityIndex.Index, Is.EqualTo(0)); Assert.That(pokemon.Level, Is.EqualTo(10)); Assert.That(pokemon.Experience, Is.EqualTo(560)); Assert.That(pokemon.PersonalityValue, Is.EqualTo(1000)); Assert.That(pokemon.Gender, Is.EqualTo(Gender.Male)); Assert.That(pokemon.Coloring, Is.EqualTo(0)); Assert.That(pokemon.HeldItem, Is.Null); Assert.That(pokemon.CurrentHealth, Is.EqualTo(29)); Assert.That(pokemon.Happiness, Is.EqualTo(70)); Assert.That(pokemon.IndividualValues, Is.EqualTo(new IndividualValueStatisticSet(20, 20, 20, 20, 20, 20))); Assert.That(pokemon.EffortValues, Is.EqualTo(new EffortValueStatisticSet(0, 0, 0, 0, 0, 0))); Assert.That(pokemon.Nature.Name.ToString(), Is.EqualTo("hardy")); Assert.That(pokemon.Nickname, Is.EqualTo("foo")); }); Assert.That(pokemon.Moves, Has.Count.EqualTo(4)); Assert.That(pokemon.Moves[0], Is.Not.Null); Assert.Multiple(() => { Assert.That(pokemon.Moves[0]!.MoveData.Name.ToString(), Is.EqualTo("tackle")); Assert.That(pokemon.Moves[0]!.LearnMethod, Is.EqualTo(MoveLearnMethod.LevelUp)); Assert.That(pokemon.Moves[0]!.CurrentPp, Is.EqualTo(23)); }); } [Test] public void SerializedPokemonToJson() { var data = new SerializedPokemon { Species = "bulbasaur", Form = "default", Ability = "overgrow", Level = 10, Experience = 560, PersonalityValue = 1000, Gender = Gender.Male, Coloring = 0, HeldItem = null, CurrentHealth = 29, Happiness = 70, IndividualValues = new SerializedStats(20, 20, 20, 20, 20, 20), EffortValues = new SerializedStats(0, 0, 0, 0, 0, 0), Nature = "hardy", Nickname = "foo", Moves = new[] { new SerializedLearnedMove { MoveName = "tackle", LearnMethod = MoveLearnMethod.LevelUp, CurrentPp = 23, }, null, null, null, }, }; var json = JsonSerializer.Serialize(data); var deserialized = JsonSerializer.Deserialize(json); Assert.That(deserialized, Is.Not.Null); Assert.Multiple(() => { Assert.That(deserialized!.Species, Is.EqualTo("bulbasaur")); Assert.That(deserialized!.Form, Is.EqualTo("default")); Assert.That(deserialized!.Ability, Is.EqualTo("overgrow")); Assert.That(deserialized!.Level, Is.EqualTo(10)); Assert.That(deserialized!.Experience, Is.EqualTo(560)); Assert.That(deserialized!.PersonalityValue, Is.EqualTo(1000)); Assert.That(deserialized!.Gender, Is.EqualTo(Gender.Male)); Assert.That(deserialized!.Coloring, Is.EqualTo(0)); Assert.That(deserialized!.HeldItem, Is.Null); Assert.That(deserialized!.CurrentHealth, Is.EqualTo(29)); Assert.That(deserialized!.Happiness, Is.EqualTo(70)); Assert.That(deserialized!.IndividualValues, Is.EqualTo(new SerializedStats(20, 20, 20, 20, 20, 20))); Assert.That(deserialized!.EffortValues, Is.EqualTo(new SerializedStats(0, 0, 0, 0, 0, 0))); Assert.That(deserialized!.Nature, Is.EqualTo("hardy")); Assert.That(deserialized!.Nickname, Is.EqualTo("foo")); }); Assert.That(deserialized!.Moves, Has.Length.EqualTo(4)); Assert.That(deserialized!.Moves[0], Is.Not.Null); Assert.Multiple(() => { Assert.That(deserialized!.Moves[0]!.MoveName, Is.EqualTo("tackle")); Assert.That(deserialized!.Moves[0]!.LearnMethod, Is.EqualTo(MoveLearnMethod.LevelUp)); Assert.That(deserialized!.Moves[0]!.CurrentPp, Is.EqualTo(23)); }); } }