コード例 #1
0
ファイル: SerializerTests.cs プロジェクト: jaykang920/x2clr
        public void TestPartialSerialization()
        {
            EventFactory.Register<SampleEvent5>();

            var buffer = new x2.Buffer();

            var cell1 = new SampleCell1 {  // base
                Foo = 9,
                Bar = "hello"
            };
            var cell2 = new SampleCell2 {  // derived
                Foo = 9,
                Bar = "hello",
                Baz = true
            };

            var event1 = new SampleEvent5();  // has base

            // base > base > base
            event1.SampleCell = cell1;
            Serializer serializer = new Serializer(buffer);
            serializer.Write(event1.GetTypeId());
            event1.Serialize(serializer);

            long bufferLength = buffer.Length;

            buffer.Rewind();
            Deserializer deserializer = new Deserializer(buffer);

            var retrieved = deserializer.Create();
            retrieved.Deserialize(deserializer);

            var event11 = retrieved as SampleEvent5;
            Assert.NotNull(event11);

            Assert.AreEqual(event1.SampleCell.Foo, event11.SampleCell.Foo);
            Assert.AreEqual(event1.SampleCell.Bar, event11.SampleCell.Bar);

            buffer.Reset();

            // derived > base > base
            event1.SampleCell = cell2;  // base <= derived
            serializer = new Serializer(buffer);
            serializer.Write(event1.GetTypeId());
            event1.Serialize(serializer);

            Assert.AreEqual(bufferLength, buffer.Length);

            {
                var event2 = new SampleEvent6();  // has derived
                event2.SampleCell = cell2;  // derived <= derived
                var buffer2 = new x2.Buffer();
                serializer = new Serializer(buffer2);
                serializer.Write(event2.GetTypeId());
                event2.Serialize(serializer);
                Assert.Greater(buffer2.Length, buffer.Length);
            }

            buffer.Rewind();
            deserializer = new Deserializer(buffer);

            retrieved = deserializer.Create();
            retrieved.Deserialize(deserializer);

            var event12 = retrieved as SampleEvent5;
            Assert.NotNull(event12);

            Assert.AreEqual(event1.SampleCell.Foo, event12.SampleCell.Foo);
            Assert.AreEqual(event1.SampleCell.Bar, event12.SampleCell.Bar);
        }