public void ShouldPlaceObjectForSurrogatePreservingIdentity() { var b = new SurrogateMockB(); var list = new List <object> { b, new List <object> { b }, new SurrogateMockB() }; var counter = 0; var pseudocopy = PseudoClone(list, serializer => { serializer.ForSurrogate <SurrogateMockB>().SetObject(x => new SurrogateMockA(counter++)); }); list = pseudocopy as List <object>; Assert.IsNotNull(list); var sublist = list[1] as List <object>; Assert.IsNotNull(sublist); Assert.AreSame(list[0], sublist[0]); Assert.AreNotSame(list[0], list[2]); var a = list[0] as SurrogateMockA; Assert.IsNotNull(a); Assert.AreEqual(counter - 2, a.Field); var secondA = list[2] as SurrogateMockA; Assert.IsNotNull(secondA); Assert.AreEqual(counter - 1, secondA.Field); }
public void ShouldPlaceSurrogateForObject() { var b = new SurrogateMockB(); var pseudocopy = PseudoClone(b, serializer => { serializer.ForObject <SurrogateMockB>().SetSurrogate(x => new SurrogateMockA(1)); }); var a = pseudocopy as SurrogateMockA; Assert.IsNotNull(a); Assert.AreEqual(1, a.Field); }
public void ShouldDoSurrogateObjectSwap() { var b = new SurrogateMockB(); var pseudocopy = PseudoClone(b, serializer => { serializer.ForObject <SurrogateMockB>().SetSurrogate(x => new SurrogateMockA(1)); serializer.ForSurrogate <SurrogateMockA>().SetObject(x => new SurrogateMockC()); }); var c = pseudocopy as SurrogateMockC; Assert.IsNotNull(c); }
public void ShouldDoSurrogateObjectSwapTwoTimes() { var b = new SurrogateMockB(); var serializer = new Serializer(GetSettings()); serializer.ForObject <SurrogateMockB>().SetSurrogate(x => new SurrogateMockA(1)); serializer.ForSurrogate <SurrogateMockA>().SetObject(x => new SurrogateMockC()); for (var i = 0; i < 2; i++) { using (var stream = new MemoryStream()) { serializer.Serialize(b, stream); stream.Seek(0, SeekOrigin.Begin); var pseudocopy = serializer.Deserialize <object>(stream); var c = pseudocopy as SurrogateMockC; Assert.IsNotNull(c); } } }
public void ShouldPlaceSurrogateForObjectPreservingIdentity() { var b = new SurrogateMockB(); var counter = 0; var list = new List<object> { b, new SurrogateMockB(), b }; var pseudocopy = PseudoClone(list, serializer => { serializer.ForObject<SurrogateMockB>().SetSurrogate(x => new SurrogateMockA(counter++)); }); list = pseudocopy as List<object>; Assert.IsNotNull(list); Assert.AreSame(list[0], list[2]); Assert.AreNotSame(list[0], list[1]); var a = list[0] as SurrogateMockA; Assert.IsNotNull(a); Assert.AreEqual(counter - 2, a.Field); var secondA = list[1] as SurrogateMockA; Assert.IsNotNull(secondA); Assert.AreEqual(counter - 1, secondA.Field); }
public void ShouldPlaceSurrogateForObject() { var b = new SurrogateMockB(); var pseudocopy = PseudoClone(b, serializer => { serializer.ForObject<SurrogateMockB>().SetSurrogate(x => new SurrogateMockA(1)); }); var a = pseudocopy as SurrogateMockA; Assert.IsNotNull(a); Assert.AreEqual(1, a.Field); }
public void ShouldDoSurrogateObjectSwap() { var b = new SurrogateMockB(); var pseudocopy = PseudoClone(b, serializer => { serializer.ForObject<SurrogateMockB>().SetSurrogate(x => new SurrogateMockA(1)); serializer.ForSurrogate<SurrogateMockA>().SetObject(x => new SurrogateMockC()); }); var c = pseudocopy as SurrogateMockC; Assert.IsNotNull(c); }
public void ShouldDoSurrogateObjectSwapTwoTimes() { var b = new SurrogateMockB(); var serializer = new Serializer(GetSettings()); serializer.ForObject<SurrogateMockB>().SetSurrogate(x => new SurrogateMockA(1)); serializer.ForSurrogate<SurrogateMockA>().SetObject(x => new SurrogateMockC()); for(var i = 0; i < 2; i++) { using(var stream = new MemoryStream()) { serializer.Serialize(b, stream); stream.Seek(0, SeekOrigin.Begin); var pseudocopy = serializer.Deserialize<object>(stream); var c = pseudocopy as SurrogateMockC; Assert.IsNotNull(c); } } }