public void TestEvolvableObjectSerialization() { SimplePofContext ctx_v1 = new SimplePofContext(); ctx_v1.RegisterUserType(1, typeof(EvolvablePortablePerson), new PortableObjectSerializer(1)); ctx_v1.RegisterUserType(2, typeof(Address), new PortableObjectSerializer(2)); SimplePofContext ctx_v2 = new SimplePofContext(); ctx_v2.RegisterUserType(1, typeof(EvolvablePortablePerson2), new PortableObjectSerializer(1)); ctx_v2.RegisterUserType(2, typeof(Address), new PortableObjectSerializer(2)); EvolvablePortablePerson2 aleks = new EvolvablePortablePerson2("Aleksandar Seovic", new DateTime(1974, 8, 24)); EvolvablePortablePerson2 ana = new EvolvablePortablePerson2("Ana Maria Seovic", new DateTime(2004, 8, 14, 7, 43, 0)); aleks.Address = ana.Address = new Address("208 Myrtle Ridge Rd", "Lutz", "FL", "33549"); aleks.Nationality = ana.Nationality = "Serbian"; aleks.PlaceOfBirth = new Address(null, "Belgrade", "Serbia", "11000"); ana.PlaceOfBirth = new Address("128 Asbury Ave, #401", "Evanston", "IL", "60202"); aleks.Children = new EvolvablePortablePerson2[] { ana }; Stream stream_v2 = new MemoryStream(); ctx_v2.Serialize(new DataWriter(stream_v2), aleks); stream_v2.Position = 0; EvolvablePortablePerson aleks_v1 = (EvolvablePortablePerson)ctx_v1.Deserialize(new DataReader(stream_v2)); EvolvablePortablePerson marija_v1 = new EvolvablePortablePerson("Marija Seovic", new DateTime(1978, 2, 20)); marija_v1.Address = aleks_v1.Address; marija_v1.Children = aleks_v1.Children; aleks_v1.Spouse = marija_v1; Stream stream_v1 = new MemoryStream(); ctx_v1.Serialize(new DataWriter(stream_v1), aleks_v1); stream_v1.Position = 0; EvolvablePortablePerson2 aleks_v2 = (EvolvablePortablePerson2)ctx_v2.Deserialize(new DataReader(stream_v1)); Assert.AreEqual(aleks.Name, aleks_v2.Name); Assert.AreEqual(aleks.Nationality, aleks_v2.Nationality); Assert.AreEqual(aleks.DOB, aleks_v2.DOB); Assert.AreEqual(aleks_v1.Spouse.Name, aleks_v2.Spouse.Name); Assert.AreEqual(aleks.Address.City, aleks_v2.Address.City); Assert.AreEqual(aleks.PlaceOfBirth.City, aleks_v2.PlaceOfBirth.City); }
public void testEvolvableSerialization() { var ctx = new SafeConfigurablePofContext(); var person = new EvolvablePortablePerson("Aleksandar Seovic", new DateTime(74, 7, 24)); person.Address = new Address("208 Myrtle Ridge Rd", "Lutz", "FL", "33549"); person.DataVersion = 2; var buffer = new MemoryStream(1024); ctx.Serialize(new DataWriter(buffer), person); buffer.Position = 0; Object o = ctx.Deserialize(new DataReader(buffer)); Assert.IsTrue((((EvolvablePortablePerson)o).DataVersion == 2)); Assert.AreEqual(o, person); }
public void TestWriteGenericDictionary() { var ctx = new SimplePofContext(); ctx.RegisterUserType(101, typeof(PortablePersonLite), new PortableObjectSerializer(101)); ctx.RegisterUserType(102, typeof(PortablePerson), new PortableObjectSerializer(102)); ctx.RegisterUserType(103, typeof(EvolvablePortablePerson), new PortableObjectSerializer(103)); //initPOFWriter(); stream = new MemoryStream(); writer = new DataWriter(stream); pofwriter = new PofStreamWriter(writer, ctx); IDictionary <string, double> dict = new Dictionary <string, double>(); dict.Add("A", 11.11); dict.Add("Z", 88.88); dict.Add("7", 100.1); IDictionary <string, string> dict2 = new Dictionary <string, string>(); dict2.Add("ABC", "value"); dict2.Add("N", null); IDictionary <string, IPortableObject> persons = new Dictionary <string, IPortableObject>(); var ivan = new PortablePerson("Ivan", new DateTime(1978, 4, 25)); ivan.Children = null; var goran = new PortablePerson("Goran", new DateTime(1982, 3, 3)); goran.Children = null; var aleks = new EvolvablePortablePerson("Aleks", new DateTime(1974, 8, 24)); aleks.Children = new EvolvablePortablePerson[1]; aleks.Children[0] = new EvolvablePortablePerson("Ana Maria", new DateTime(2004, 8, 14)); aleks.DataVersion = 2; persons.Add("key1", ivan); persons.Add("key2", aleks); persons.Add("key3", goran); pofwriter.WriteDictionary(0, dict); pofwriter.WriteDictionary(0, dict2); pofwriter.WriteDictionary(0, persons); pofwriter.WriteDictionary(0, persons); //initPOFReader(); stream.Position = 0; reader = new DataReader(stream); pofreader = new PofStreamReader(reader, ctx); IDictionary <string, double> result = new Dictionary <string, double>(); pofreader.ReadDictionary(0, result); Assert.AreEqual(3, result.Count); foreach (string key in dict.Keys) { Assert.AreEqual(dict[key], result[key]); } IDictionary <string, string> result2 = new Dictionary <string, string>(); pofreader.ReadDictionary(0, result2); Assert.AreEqual(2, result2.Count); foreach (string key in dict.Keys) { Assert.AreEqual(dict[key], result[key]); } IDictionary <string, IPortableObject> result3 = new Dictionary <string, IPortableObject>(); pofreader.ReadDictionary(0, result3); Assert.AreEqual(3, result3.Count); Assert.IsFalse(result3["key1"] is EvolvablePortablePerson); Assert.IsTrue(result3["key2"] is EvolvablePortablePerson); Assert.IsFalse(result3["key3"] is EvolvablePortablePerson); EvolvablePortablePerson epp = (EvolvablePortablePerson)result3["key2"]; Assert.AreEqual(aleks.Name, epp.Name); Assert.AreEqual(aleks.Children[0].Name, epp.Children[0].Name); var pp = (PortablePerson)result3["key3"]; Assert.AreEqual(goran.Name, pp.Name); Assert.IsNull(pp.Children); IDictionary <string, IPortableObject> result4 = pofreader.ReadDictionary <string, IPortableObject>(0, null); Assert.AreEqual(3, result4.Count); Assert.IsFalse(result4["key1"] is EvolvablePortablePerson); Assert.IsTrue(result4["key2"] is EvolvablePortablePerson); Assert.IsFalse(result4["key3"] is EvolvablePortablePerson); epp = (EvolvablePortablePerson)result4["key2"]; Assert.AreEqual(aleks.Name, epp.Name); Assert.AreEqual(aleks.Children[0].Name, epp.Children[0].Name); pp = (PortablePerson)result4["key3"]; Assert.AreEqual(goran.Name, pp.Name); Assert.IsNull(pp.Children); }
public void TestEvolvableObjectSerialization() { var ctxV1 = new SimplePofContext(); ctxV1.RegisterUserType(1, typeof(EvolvablePortablePerson), new PortableObjectSerializer(1)); ctxV1.RegisterUserType(2, typeof(Address), new PortableObjectSerializer(2)); ctxV1.IsReferenceEnabled = true; var ctxV2 = new SimplePofContext(); ctxV2.RegisterUserType(1, typeof(EvolvablePortablePerson2), new PortableObjectSerializer(1)); ctxV2.RegisterUserType(2, typeof(Address), new PortableObjectSerializer(2)); ctxV2.IsReferenceEnabled = true; var person12 = new EvolvablePortablePerson2( "Aleksandar Seovic", new DateTime(74, 7, 24)); var person22 = new EvolvablePortablePerson2( "Ana Maria Seovic", new DateTime(104, 7, 14, 7, 43, 0)); var person32 = new EvolvablePortablePerson2( "Art Seovic", new DateTime(107, 8, 12, 5, 20, 0)); var addr = new Address("208 Myrtle Ridge Rd", "Lutz", "FL", "33549"); var addrPOB = new Address("128 Asbury Ave, #401", "Evanston", "IL", "60202"); person12.Address = addr; person22.Address = addr; person12.Nationality = person22.Nationality = "Serbian"; person12.PlaceOfBirth = new Address(null, "Belgrade", "Serbia", "11000"); person22.PlaceOfBirth = addrPOB; person32.PlaceOfBirth = addrPOB; person12.Children = new EvolvablePortablePerson2[] { person22, person32 }; initPOFWriter(); m_pofWriter = new PofStreamWriter(m_writer, ctxV2); m_pofWriter.EnableReference(); m_pofWriter.WriteObject(0, person12); initPOFReader(); m_pofReader = new PofStreamReader(m_reader, ctxV1); var person11 = (EvolvablePortablePerson)m_pofReader.ReadObject(0); var person21 = new EvolvablePortablePerson( "Marija Seovic", new DateTime(78, 1, 20)); person21.Address = person11.Address; person21.Children = person11.Children; person11.Spouse = person21; initPOFWriter(); m_pofWriter = new PofStreamWriter(m_writer, ctxV1); m_pofWriter.EnableReference(); m_pofWriter.WriteObject(0, person11); initPOFReader(); m_pofReader = new PofStreamReader(m_reader, ctxV2); var person = (EvolvablePortablePerson2)m_pofReader.ReadObject(0); Assert.IsTrue(person12.Name.Equals(person.Name)); Assert.IsTrue(person12.Nationality.Equals(person.Nationality)); Assert.IsTrue(person12.DOB.Equals(person.DOB)); Assert.IsTrue(person11.Spouse.Name.Equals(person.Spouse.Name)); Assert.IsTrue(person12.Address.Equals(person.Address)); Assert.IsTrue(person12.PlaceOfBirth.Equals(person.PlaceOfBirth)); Assert.IsTrue(person.Address != person.Children[0].Address); Assert.IsTrue(person.Address != person.Spouse.Address); Assert.IsTrue(person.Children[0] != person.Spouse.Children[0]); Assert.IsTrue(person.Children[1] != person.Spouse.Children[1]); }
public void TestWriteGenericList() { var ctx = new SimplePofContext(); ctx.RegisterUserType(101, typeof(PortablePersonLite), new PortableObjectSerializer(101)); ctx.RegisterUserType(102, typeof(PortablePerson), new PortableObjectSerializer(102)); ctx.RegisterUserType(103, typeof(EvolvablePortablePerson), new PortableObjectSerializer(103)); //initPOFWriter(); stream = new MemoryStream(); writer = new DataWriter(stream); pofwriter = new PofStreamWriter(writer, ctx); ICollection <string> list1 = new List <string>(); ICollection <object> list2 = new List <object>(); list1.Add("A"); list1.Add(null); list1.Add("7"); list2.Add("A"); list2.Add(null); list2.Add(7); ICollection <IPortableObject> persons = new List <IPortableObject>(); ICollection <PortablePerson> persons2 = new List <PortablePerson>(); var ivan = new PortablePerson("Ivan", new DateTime(1978, 4, 25)); ivan.Children = null; var goran = new PortablePerson("Goran", new DateTime(1982, 3, 3)); goran.Children = null; var aleks = new EvolvablePortablePerson("Aleks", new DateTime(1974, 8, 24)); aleks.Children = new EvolvablePortablePerson[1]; aleks.Children[0] = new EvolvablePortablePerson("Ana Maria", new DateTime(2004, 8, 14)); aleks.DataVersion = 2; persons.Add(ivan); persons.Add(aleks); persons.Add(goran); persons.Add(null); persons2.Add(ivan); persons2.Add(null); persons2.Add(goran); pofwriter.WriteCollection(0, list1); pofwriter.WriteCollection(0, list2); pofwriter.WriteCollection(0, persons); pofwriter.WriteCollection(0, persons); pofwriter.WriteCollection(0, (ICollection)persons2, typeof(PortablePerson)); //initPOFReader(); stream.Position = 0; reader = new DataReader(stream); pofreader = new PofStreamReader(reader, ctx); ICollection <string> result1 = new List <string>(); pofreader.ReadCollection(0, result1); Assert.AreEqual(3, result1.Count); for (int i = 0; i < result1.Count; i++) { Assert.AreEqual(((List <string>)list1)[i], ((List <string>)result1)[i]); } ICollection <object> result2 = new List <object>(); pofreader.ReadCollection(0, result2); Assert.AreEqual(3, result2.Count); for (int i = 0; i < result2.Count; i++) { Assert.AreEqual(((List <object>)list2)[i], ((List <object>)result2)[i]); } ICollection <IPortableObject> result3 = new List <IPortableObject>(); pofreader.ReadCollection(0, result3); Assert.AreEqual(4, result3.Count); Assert.IsFalse(((List <IPortableObject>)result3)[0] is EvolvablePortablePerson); Assert.IsTrue(((List <IPortableObject>)result3)[1] is EvolvablePortablePerson); Assert.IsFalse(((List <IPortableObject>)result3)[2] is EvolvablePortablePerson); Assert.AreEqual(((List <IPortableObject>)result3)[3], null); EvolvablePortablePerson epp = (EvolvablePortablePerson)((List <IPortableObject>)result3)[1]; Assert.AreEqual(aleks.Name, epp.Name); Assert.AreEqual(aleks.Children[0].Name, epp.Children[0].Name); PortablePerson pp = (PortablePerson)((List <IPortableObject>)result3)[0]; Assert.AreEqual(ivan.Name, pp.Name); Assert.IsNull(pp.Children); List <IPortableObject> result4 = (List <IPortableObject>)pofreader.ReadCollection <IPortableObject>(0, null); Assert.AreEqual(4, result4.Count); Assert.IsFalse(result4[0] is EvolvablePortablePerson); Assert.IsTrue(result4[1] is EvolvablePortablePerson); Assert.IsFalse(result4[2] is EvolvablePortablePerson); Assert.AreEqual(result4[3], null); epp = (EvolvablePortablePerson)result4[1]; Assert.AreEqual(aleks.Name, epp.Name); Assert.AreEqual(aleks.Children[0].Name, epp.Children[0].Name); pp = (PortablePerson)result4[0]; Assert.AreEqual(ivan.Name, pp.Name); Assert.IsNull(pp.Children); List <PortablePerson> result5 = (List <PortablePerson>)pofreader.ReadCollection <PortablePerson>(0, null); for (int i = 0; i < persons2.Count; i++) { Assert.AreEqual(((List <PortablePerson>)persons2)[i], result5[i]); } }