// ========================================================================== // JsonExternalSerializerTests.cs // Squidex Headless CMS // ========================================================================== // Copyright (c) Squidex Group // All rights reserved. // ========================================================================== using System; using System.Collections.Generic; using System.IO; using FakeItEasy; using Orleans.Serialization; using Xunit; namespace Squidex.Infrastructure.Orleans { public class JsonExternalSerializerTests { [Fact] public void Should_not_copy_null() { var v = (string)null; var c = J.Copy(v, null); Assert.Null(c); } [Fact] public void Should_copy_null_json() { var v = new J>(null); var c = (J>)J.Copy(v, null); Assert.Null(c.Value); } [Fact] public void Should_not_copy_immutable_values() { var v = new List { 1, 2, 3 }.AsJ(); var c = (J>)J.Copy(v, null); Assert.Same(v.Value, c.Value); } [Fact] public void Should_serialize_and_deserialize_value() { var value = new J>(new List { 1, 2, 3 }); var buffer = new MemoryStream(); var writer = A.Fake(); var writerContext = new SerializationContext(null) { StreamWriter = writer }; A.CallTo(() => writer.Write(A.Ignored, A.Ignored, A.Ignored)) .Invokes(new Action(buffer.Write)); A.CallTo(() => writer.CurrentOffset) .ReturnsLazily(x => (int)buffer.Position); J.Serialize(value, writerContext, value.GetType()); buffer.Position = 0; var reader = A.Fake(); var readerContext = new DeserializationContext(null) { StreamReader = reader }; A.CallTo(() => reader.ReadByteArray(A.Ignored, A.Ignored, A.Ignored)) .Invokes(new Action((b, o, l) => buffer.Read(b, o, l))); A.CallTo(() => reader.CurrentPosition) .ReturnsLazily(x => (int)buffer.Position); A.CallTo(() => reader.Length) .ReturnsLazily(x => (int)buffer.Length); var copy = (J>)J.Deserialize(value.GetType(), readerContext); Assert.Equal(value.Value, copy.Value); Assert.NotSame(value.Value, copy.Value); } } }