diff --git a/Projects/Server.Tests/Fixtures/ServerFixture.cs b/Projects/Server.Tests/Fixtures/ServerFixture.cs index 231f3ad25..c049212a0 100644 --- a/Projects/Server.Tests/Fixtures/ServerFixture.cs +++ b/Projects/Server.Tests/Fixtures/ServerFixture.cs @@ -1,35 +1,39 @@ using System; using System.Reflection; -namespace Server.Tests +namespace Server.Tests; + +internal class ServerFixture : IDisposable { - internal class ServerFixture : IDisposable + // Global setup + static ServerFixture() { - // Global setup - static ServerFixture() - { - Core.Assembly = Assembly.GetExecutingAssembly(); - Core.LoopContext = new EventLoopContext(); - Core.Expansion = Expansion.EJ; + Core.Assembly = Assembly.GetExecutingAssembly(); // Server.Tests.dll - // Load Configurations - ServerConfiguration.Load(true); + // Load Configurations + ServerConfiguration.Load(true); - // Configure / Initialize - TestMapDefinitions.ConfigureTestMapDefinitions(); + // Load an empty assembly list into the resolver + ServerConfiguration.AssemblyDirectories.Add(Core.BaseDirectory); + AssemblyHandler.LoadAssemblies(new[]{ "ModernUO.dll" }); - // Configure the world - World.Configure(); + Core.LoopContext = new EventLoopContext(); + Core.Expansion = Expansion.EJ; - Timer.Init(0); + // Configure / Initialize + TestMapDefinitions.ConfigureTestMapDefinitions(); - // Load the world - World.Load(); - } + // Configure the world + World.Configure(); - public void Dispose() - { - Timer.Init(0); - } + Timer.Init(0); + + // Load the world + World.Load(); + } + + public void Dispose() + { + Timer.Init(0); } } diff --git a/Projects/Server.Tests/Tests/Serialization/TypeConverterTests.cs b/Projects/Server.Tests/Tests/Serialization/TypeConverterTests.cs new file mode 100644 index 000000000..a0ec96034 --- /dev/null +++ b/Projects/Server.Tests/Tests/Serialization/TypeConverterTests.cs @@ -0,0 +1,37 @@ +using System; +using System.Buffers; +using System.Text.Json; + +using Server.Json; + +using Xunit; + +namespace Server.Tests; + +public class TypeConverterTests : IClassFixture +{ + [Fact] + public void TestReadAfterWrite() + { + // Arrange + Type itemType = typeof(Item); + + JsonSerializerOptions options = new JsonSerializerOptions(); + + TypeConverter converter = new TypeConverter(); + var bufferWriter = new ArrayBufferWriter(); + using var jsonWriter = new Utf8JsonWriter(bufferWriter); + converter.Write(jsonWriter, itemType, options); + + // Act + jsonWriter.Flush(); + var jsonData = bufferWriter.WrittenSpan; + + Utf8JsonReader jsonReader = new Utf8JsonReader(jsonData); + jsonReader.Read(); + + // Assert + Type readType = converter.Read(ref jsonReader, typeof(Type), options); + Assert.Equal(typeof(Item), readType); + } +} diff --git a/Projects/Server/Json/Converters/TypeConverter.cs b/Projects/Server/Json/Converters/TypeConverter.cs index 6e43b33a6..3b117719e 100644 --- a/Projects/Server/Json/Converters/TypeConverter.cs +++ b/Projects/Server/Json/Converters/TypeConverter.cs @@ -32,7 +32,7 @@ public class TypeConverter : JsonConverter } var typeName = reader.GetString(); - var type = AssemblyHandler.FindTypeByName(typeName); + var type = AssemblyHandler.FindTypeByName(typeName) ?? AssemblyHandler.FindTypeByName(typeName, true); if (type == null) { logger.Warning("Attempted to deserialize type {Type} which does not exist.", typeName); diff --git a/Projects/UOContent.Tests/Fixtures/ServerFixture.cs b/Projects/UOContent.Tests/Fixtures/ServerFixture.cs index 086fef285..574bbb5a4 100644 --- a/Projects/UOContent.Tests/Fixtures/ServerFixture.cs +++ b/Projects/UOContent.Tests/Fixtures/ServerFixture.cs @@ -18,7 +18,7 @@ namespace Server.Tests // Load UOContent.dll into the type resolver ServerConfiguration.AssemblyDirectories.Add(Core.BaseDirectory); - var assembles = new [] { "UOContent.dll" }; + var assembles = new [] { "ModernUO.dll", "UOContent.dll" }; AssemblyHandler.LoadAssemblies(assembles); // Load Skills