Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        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");
        }
Beispiel #3
0
        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();
        }