// ========================================================================== // JsonExternalSerializerTests.cs // Squidex Headless CMS // ========================================================================== // Copyright (c) Squidex Group // All rights reserved. // ========================================================================== using System; using System.Collections.Generic; 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 writtenLength = 0; var writtenBuffer = (byte[])null; var writer = A.Fake(); var writerContext = new SerializationContext(null) { StreamWriter = writer }; A.CallTo(() => writer.Write(A.Ignored)) .Invokes(new Action(x => writtenLength = x)); A.CallTo(() => writer.Write(A.Ignored)) .Invokes(new Action(x => writtenBuffer = x)); J.Serialize(value, writerContext, value.GetType()); var reader = A.Fake(); var readerContext = new DeserializationContext(null) { StreamReader = reader }; A.CallTo(() => reader.ReadInt()) .Returns(writtenLength); A.CallTo(() => reader.ReadBytes(writtenLength)) .Returns(writtenBuffer); var copy = (J>)J.Deserialize(value.GetType(), readerContext); Assert.Equal(value.Value, copy.Value); Assert.NotSame(value.Value, copy.Value); } } }