fix: Fixes JSON TypeConverter so that it can deserialize full name types (#1466)
This commit is contained in:
parent
52ca1fe686
commit
976680699c
4 changed files with 65 additions and 24 deletions
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<ServerFixture>
|
||||
{
|
||||
[Fact]
|
||||
public void TestReadAfterWrite()
|
||||
{
|
||||
// Arrange
|
||||
Type itemType = typeof(Item);
|
||||
|
||||
JsonSerializerOptions options = new JsonSerializerOptions();
|
||||
|
||||
TypeConverter converter = new TypeConverter();
|
||||
var bufferWriter = new ArrayBufferWriter<byte>();
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
|
@ -32,7 +32,7 @@ public class TypeConverter : JsonConverter<Type>
|
|||
}
|
||||
|
||||
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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue