rd-net/Test.RdFramework/Reflection/GenericBuiltInSerializersTest.cs (98 lines of code) (raw):

using System; using JetBrains.Rd; using JetBrains.Serialization; using NUnit.Framework; namespace Test.RdFramework.Reflection; [TestFixture] public unsafe class GenericBuiltInSerializersTest : RdReflectionTestBase { [Test] public void TestClass() { var originalType = new TypeWithCtx<int, int>(Guid.NewGuid(), "some"); var readType = SerializeRoundTrip(originalType); Assert.AreEqual(originalType.Mark, readType.Mark); Assert.AreEqual(null, readType.AlwaysLost); } [Test] public void TestNoCtx() { var originalType = new TypeWithoutCtx<int, int>(Guid.NewGuid(), "some"); var readType = SerializeRoundTrip(originalType); Assert.AreEqual(originalType.Mark, readType.Mark); Assert.AreEqual(null, readType.AlwaysLost); } [Test] public void TestClass3() { var originalType = new TypeWithCtx3<int, int, int>(Guid.NewGuid(), "some"); var readType = SerializeRoundTrip(originalType); Assert.AreEqual(originalType.Mark, readType.Mark); Assert.AreEqual(null, readType.AlwaysLost); } [Test] public void TestNoCtx3() { var originalType = new TypeWithoutCtx3<int, int, int>(Guid.NewGuid(), "some"); var readType = SerializeRoundTrip(originalType); Assert.AreEqual(originalType.Mark, readType.Mark); Assert.AreEqual(null, readType.AlwaysLost); } private T SerializeRoundTrip<T>(T originalType) { var serializers = CFacade.Serializers; using var cookie = UnsafeWriter.NewThreadLocalWriter(); var serializationCtx = new SerializationCtx(serializers); serializers.Write(serializationCtx, cookie.Writer, originalType); var reader = UnsafeReader.CreateReader(cookie.Data, cookie.Count); return serializers.Read<T>(serializationCtx, reader); } public class TypeWithCtx<T1, T2> { public Guid Mark { get; } public string AlwaysLost { get; } public TypeWithCtx(Guid mark, string alwaysLost) { Mark = mark; AlwaysLost = alwaysLost; } public void Write(SerializationCtx ctx, UnsafeWriter writer) => writer.WriteGuid(Mark); public static TypeWithCtx<T1, T2> Read(SerializationCtx ctx, UnsafeReader reader) => new(reader.ReadGuid(), null); } public class TypeWithoutCtx<T1, T2> { public Guid Mark { get; } public string AlwaysLost { get; } public TypeWithoutCtx(Guid mark, string alwaysLost) { Mark = mark; AlwaysLost = alwaysLost; } public void Write(UnsafeWriter writer) => writer.WriteGuid(Mark); public static TypeWithoutCtx<T1, T2> Read(UnsafeReader reader) => new(reader.ReadGuid(), null); } public class TypeWithCtx3<T1, T2, T3> { public Guid Mark { get; } public string AlwaysLost { get; } public TypeWithCtx3(Guid mark, string alwaysLost) { Mark = mark; AlwaysLost = alwaysLost; } public void Write(SerializationCtx ctx, UnsafeWriter writer) => writer.WriteGuid(Mark); public static TypeWithCtx3<T1, T2, T3> Read(SerializationCtx ctx, UnsafeReader reader) => new(reader.ReadGuid(), null); } public class TypeWithoutCtx3<T1, T2, T3> { public Guid Mark { get; } public string AlwaysLost { get; } public TypeWithoutCtx3(Guid mark, string alwaysLost) { Mark = mark; AlwaysLost = alwaysLost; } public void Write(UnsafeWriter writer) => writer.WriteGuid(Mark); public static TypeWithoutCtx3<T1, T2, T3> Read(UnsafeReader reader) => new(reader.ReadGuid(), null); } }