示例#1
0
        public void TestBasics(Endianness Endianness)
        {
            var ss  = CreateSerializationService(1, Endianness);
            var ss2 = CreateSerializationService(2, Endianness);

            var nn = new NamedPortable[5];

            for (var i = 0; i < nn.Length; i++)
            {
                nn[i] = new NamedPortable("named-portable-" + i, i);
            }

            NamedPortable np   = nn[0];
            var           data = ss.ToData(np);

            Assert.AreEqual(np, ss.ToObject(data));
            Assert.AreEqual(np, ss2.ToObject(data));

            var inner = new InnerPortable(new byte[] { 0, 1, 2 }, new[] { 'c', 'h', 'a', 'r' },
                                          new short[] { 3, 4, 5 }, new[] { 9, 8, 7, 6 }, new long[] { 0, 1, 5, 7, 9, 11 },
                                          new[] { 0.6543f, -3.56f, 45.67f }, new[] { 456.456, 789.789, 321.321 }, nn);

            var main = new MainPortable(113, true, 'x', -500, 56789, -50992225L, 900.5678f, -897543.3678909d,
                                        "this is main portable object created for testing!", inner);

            data = ss.ToData(main);

            var mainPortable = ss.ToObject <MainPortable>(data);

            Assert.AreEqual(main, mainPortable);
            Assert.AreEqual(main, ss2.ToObject <MainPortable>(data));
        }
        /// <exception cref="System.IO.IOException" />
        internal static void TestDifferentClassVersionsUsingDataWriteAndRead(ISerializationService serializationService,
                                                                             ISerializationService serializationService2)
        {
            NamedPortable portableV1 = new NamedPortable("portable-v1", 111);
            IData         dataV1     = serializationService.ToData(portableV1);


            // emulate socket write by writing data to stream
            var @out = serializationService.CreateObjectDataOutput(1024);

            @out.WriteData(dataV1);
            var bytes = @out.ToByteArray();
            // emulate socket read by reading data from stream
            var @in = serializationService2.CreateObjectDataInput(bytes);

            dataV1 = @in.ReadData();

            // serialize new portable version
            var portableV2 = new NamedPortableV2("portable-v2", 123, 500);
            var dataV2     = serializationService2.ToData(portableV2);

            NamedPortable v1FromV2 = serializationService.ToObject <NamedPortable>(dataV2);

            Assert.AreEqual(portableV2.name, v1FromV2.name);
            Assert.AreEqual(portableV2.k, v1FromV2.k);

            NamedPortableV2 v2FromV1 = serializationService2.ToObject <NamedPortableV2>(dataV1);

            Assert.AreEqual(portableV1.name, v2FromV1.name);
            Assert.AreEqual(portableV1.k, v2FromV1.k);

            Assert.AreEqual(v2FromV1.v, 0);
        }
        public virtual void TestPreDefinedDifferentVersionsWithInnerPortable()
        {
            var serializationService = PortableSerializationTest.CreateSerializationService(1);

            serializationService.GetPortableContext().RegisterClassDefinition(CreateInnerPortableClassDefinition(1));
            var serializationService2 = PortableSerializationTest.CreateSerializationService(2);

            serializationService2.GetPortableContext().RegisterClassDefinition(CreateInnerPortableClassDefinition(2));
            var nn = new NamedPortable[1];

            nn[0] = new NamedPortable("name", 123);
            var inner = new InnerPortable(new byte[] { 0, 1, 2 }, new[] { 'c', 'h', 'a', 'r' }, new short[] { 3, 4, 5 },
                                          new[] { 9, 8, 7, 6 }, new long[] { 0, 1, 5, 7, 9, 11 }, new[] { 0.6543f, -3.56f, 45.67f }, new[]
            {
                456.456
                , 789.789, 321.321
            }, nn);
            var mainWithInner = new MainPortable(unchecked (113), true, 'x', -500, 56789, -50992225L, 900.5678f,
                                                 -897543.3678909d, "this is main portable object created for testing!", inner);

            TestPreDefinedDifferentVersions(serializationService, serializationService2, mainWithInner);
        }
        /// <exception cref="System.IO.IOException" />
        internal static void TestDifferentClassVersionsUsingDataWriteAndRead(SerializationService serializationService,
                                                                             SerializationService serializationService2)
        {
            var portableV1 = new NamedPortable("portable-v1", 111);
            var dataV1     = serializationService.ToData(portableV1);

            // serialize new portable version
            var portableV2 = new NamedPortableV2("portable-v2", 123, 500);
            var dataV2     = serializationService2.ToData(portableV2);

            NamedPortable v1FromV2 = serializationService.ToObject <NamedPortable>(dataV2);

            Assert.AreEqual(portableV2.name, v1FromV2.name);
            Assert.AreEqual(portableV2.k, v1FromV2.k);

            NamedPortableV2 v2FromV1 = serializationService2.ToObject <NamedPortableV2>(dataV1);

            Assert.AreEqual(portableV1.name, v2FromV1.name);
            Assert.AreEqual(portableV1.k, v2FromV1.k);

            Assert.AreEqual(v2FromV1.v, 0);
        }
        internal static void TestDifferentClassVersions(SerializationService serializationService,
                                                        SerializationService serializationService2)
        {
            NamedPortable portableV1 = new NamedPortable("named-portable", 123);
            IData         dataV1     = serializationService.ToData(portableV1);

            NamedPortableV2 portableV2 = new NamedPortableV2("named-portable", 123, 500);
            IData           dataV2     = serializationService2.ToData(portableV2);

            NamedPortable v1FromV2 = serializationService.ToObject <NamedPortable>(dataV2);

            Assert.AreEqual(portableV2.name, v1FromV2.name);
            Assert.AreEqual(portableV2.k, v1FromV2.k);

            NamedPortableV2 v2FromV1 = serializationService2.ToObject <NamedPortableV2>(dataV1);

            Assert.AreEqual(portableV1.name, v2FromV1.name);
            Assert.AreEqual(portableV1.k, v2FromV1.k);

            Assert.AreEqual(v2FromV1.v, 0);
            //Assert.IsNull(v2FromV1.v);
        }