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 MapWithExistingReferencedValueDetectsChangesInValue() { var mps = new MapAndSerializers(SerializerFactories.Default); var peter = new Person() { Name = "Peter" }; ISerializerFactory serializerFactory = new PersistableSerializer2(); var peterSerializer = serializerFactory.CreateSerializer(peter); mps.Add(0, peterSerializer, new Map2(mps)); var ole = new Person { Name = "Ole" }; var existingValues = new[] { SerializerOrValue.CreateSerializer("Person", peterSerializer, 0) }; var map = new Map2(mps, existingValues); map.PullChangedEntries().ShouldBeEmpty(); map["Person"] = peter; map.PullChangedEntries().ShouldBeEmpty(); map["Person"] = ole; var changes = map.PullChangedEntries().ToArray(); changes.Length.ShouldBe(1); changes[0].Key.ShouldBe("Person"); changes[0].HoldsSerializer.ShouldBeTrue(); changes[0].SerializerAndObjectId.ObjectId.ShouldBe(1); changes[0].SerializerAndObjectId.Serializer.Instance.ShouldBe(ole); }
public void MapWithExistingSimpleValueDetectsChangesInValue() { var mps = new MapAndSerializers(SerializerFactories.Default); var existingValues = new[] { SerializerOrValue.CreateValue("Name", "Peter") }; var map = new Map2(mps, existingValues); map.PullChangedEntries().ShouldBeEmpty(); map["Name"] = "Peter"; map.PullChangedEntries().ShouldBeEmpty(); map["Name"] = "Ole"; var changes = map.PullChangedEntries().ToArray(); changes.Length.ShouldBe(1); changes[0].Key.ShouldBe("Name"); changes[0].HoldsSerializer.ShouldBeFalse(); changes[0].Value.ShouldBe("Ole"); }
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(); }