Пример #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);
            }
        }
Пример #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");
        }
Пример #3
0
        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);
        }
Пример #4
0
        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();
        }