public void SerializeAndDeserializeStateWorksDetectsCircularDependencyOnDeserialization() { var storageEngine = new InMemoryStorageEngine(); var roots = new Roots2(); var serializerFactories = SerializerFactories.Default; var mps = new MapAndSerializers(serializerFactories); mps.GetOrCreateSerializerFor(roots); var p1 = new Person { Name = "Peter" }; var p2 = new Person { Name = "Ole" }; p1.Sibling = p2; p2.Sibling = p1; roots.Entangle(p1); var persister = new Persister2(storageEngine, mps); persister.DetectAndPersistChanges(); try { Deserializer2.Load(storageEngine, new Ephemerals(), serializerFactories); } catch (CircularDependencyException2 e) { e.CircularPath.Count().ShouldBe(3); } }
public void SerializeAndDeserializeStateWorksDetectsNonCircularDependencyOnDeserialization() { var storageEngine = new InMemoryStorageEngine(); var roots = new Roots2(); var serializerFactories = SerializerFactories.Default; var mps = new MapAndSerializers(serializerFactories); mps.GetOrCreateSerializerFor(roots); var p1 = new Person { Name = "Peter" }; var p2 = new Person { Name = "Ole" }; p1.Sibling = p2; roots.Entangle(p1); var persister = new Persister2(storageEngine, mps); persister.DetectAndPersistChanges(); var(r, _) = Deserializer2.Load(storageEngine, new Ephemerals(), serializerFactories); var p = r.Find <Person>(); p.Name.ShouldBe("Peter"); p.Sibling.Name.ShouldBe("Ole"); }
public void DeserializationOne() { //arrange var testStorage = new TestStorageEngine(); var eps = new Ephemerals(); var factories = SerializerFactories.Default; //act var state = Deserializer2.Load(testStorage, eps, factories); //assert state.ShouldNotBeNull(); var peter = (Person)state.Roots.Single(o => o is Person p && p.Name == "Peter"); var ole = (Person)state.Roots.Single(o => o is Person p && p.Name == "Ole"); peter.Relationship.ShouldBe(ole); ole.Relationship.ShouldBe(peter); (state.MapAndSerializers[0].Serializer.Instance is Roots2).ShouldBeTrue(); (state.MapAndSerializers[1].Serializer.Instance is Person).ShouldBeTrue(); (state.MapAndSerializers[2].Serializer.Instance is Person).ShouldBeTrue(); }
public void SerializeAndDeserializeStateWorksInSimpleCase() { var storageEngine = new InMemoryStorageEngine(); var roots = new Roots2(); var serializerFactories = SerializerFactories.Default; var mps = new MapAndSerializers(serializerFactories); mps.GetOrCreateSerializerFor(roots); roots.Entangle(new Person { Name = "Peter" }); var persister = new Persister2(storageEngine, mps); persister.DetectAndPersistChanges(); var deserializedState = Deserializer2.Load(storageEngine, new Ephemerals(), serializerFactories); var deserializedPerson = deserializedState.Roots.Find <Person>(); deserializedPerson.Name.ShouldBe("Peter"); deserializedPerson.Relationship.ShouldBeNull(); }