public void TestReferencesWithComplexObject() { var ivan = new PortablePersonReference("Ivan", new DateTime(78, 4, 25)); var goran = new PortablePersonReference("Goran", new DateTime(82, 3, 3)); var anna = new PortablePersonReference("Anna", new DateTime(80, 4, 12)); var tom = new PortablePerson("Tom", new DateTime(103, 7, 5)); var ellen = new PortablePerson("Ellen", new DateTime(105, 3, 15)); ivan.Children = null; goran.Children = new PortablePerson[2]; goran.Children[0] = tom; goran.Children[1] = ellen; anna.Children = new PortablePerson[2]; anna.Children[0] = tom; anna.Children[1] = ellen; ivan.Siblings = new PortablePersonReference[1]; ivan.Siblings[0] = goran; goran.Siblings = new PortablePersonReference[1]; goran.Siblings[0] = ivan; goran.Spouse = anna; anna.Spouse = goran; IDictionary <CompositeKey, IPortableObject> mapPerson = new Dictionary <CompositeKey, IPortableObject>(); String lastName = "Smith"; CompositeKey key1 = new CompositeKey(lastName, "ivan"), key2 = new CompositeKey(lastName, "goran"); mapPerson.Add(key1, ivan); mapPerson.Add(key2, goran); Binary bin = Serialize(mapPerson, true); IPofValue pv = PofValueParser.Parse(bin, GetPofContext(true)); IDictionary mapResult = pv.GetDictionary(null); Assert.AreEqual(2, mapResult.Count); PortablePersonReference ivanR = (PortablePersonReference)mapResult[key1]; PortablePersonReference goranR = (PortablePersonReference)mapResult[key2]; Assert.AreEqual(goran.Name, goranR.Name); Assert.IsTrue(ivanR.Siblings[0] == goranR); Assert.IsTrue(goranR.Spouse.Children[0] == goranR.Children[0]); bin = Serialize(ivan, true); pv = PofValueParser.Parse(bin, GetPofContext(true)); ivanR = (PortablePersonReference)pv.Root.GetValue(); goranR = ivanR.Siblings[0]; Assert.IsTrue(goranR.Siblings[0] == ivanR); ivanR = (PortablePersonReference)pv.GetValue(PofConstants.T_UNKNOWN); goranR = ivanR.Siblings[0]; Assert.IsTrue(goranR.Siblings[0] == ivanR); }
public void TestReferencesInUniformMap() { var localCtx = new SimplePofContext(); localCtx.RegisterUserType(101, typeof(PortablePerson), new PortableObjectSerializer(101)); localCtx.RegisterUserType(102, typeof(PortablePersonReference), new PortableObjectSerializer(102)); localCtx.RegisterUserType(201, typeof(CompositeKey), new PortableObjectSerializer(201)); IDictionary mapPerson = new Dictionary <CompositeKey, IPortableObject>(); const String lastName = "Smith"; CompositeKey key1 = new CompositeKey(lastName, "ivan"), key2 = new CompositeKey(lastName, "goran"); var ivan = new PortablePersonReference("Ivan", new DateTime(78, 4, 25)); ivan.Children = null; mapPerson.Add(key1, ivan); mapPerson.Add(key2, ivan); initPOFWriter(); m_pofWriter = new PofStreamWriter(m_writer, localCtx); m_pofWriter.EnableReference(); m_pofWriter.WriteDictionary(0, mapPerson, typeof(CompositeKey), typeof(PortablePersonReference)); var mapPersonR = new Dictionary <CompositeKey, IPortableObject>(); initPOFReader(); m_pofReader = new PofStreamReader(m_reader, localCtx); m_pofReader.ReadDictionary(0, (IDictionary)mapPersonR); // compare mapPerson with result Assert.IsTrue(mapPersonR[key1].Equals(mapPerson[key1])); Assert.IsTrue(mapPersonR[key2].Equals(mapPerson[key2])); ICollection colValR = mapPersonR.Values; IEnumerator iter = colValR.GetEnumerator(); iter.MoveNext(); var val1 = (PortablePersonReference)iter.Current; iter.MoveNext(); var val2 = (PortablePersonReference)iter.Current; Assert.IsTrue(val1 == val2); }
public void testCircularReferences() { var ctx = new SimplePofContext(); ctx.RegisterUserType(101, typeof(PortablePerson), new PortableObjectSerializer(101)); ctx.RegisterUserType(102, typeof(PortablePersonReference), new PortableObjectSerializer(102)); var ivan = new PortablePersonReference("Ivan", new DateTime(78, 4, 25)); ivan.Children = new PortablePerson[1]; ivan.Children[0] = new PortablePerson("Mary Jane", new DateTime(97, 8, 14)); ivan.Spouse = new PortablePerson("Eda", new DateTime(79, 6, 25)); var goran = new PortablePersonReference("Goran", new DateTime(82, 3, 3)); goran.Children = new PortablePerson[2]; goran.Children[0] = new PortablePerson("Tom", new DateTime(103, 7, 5)); goran.Children[1] = new PortablePerson("Ellen", new DateTime(105, 3, 15)); goran.Spouse = new PortablePerson("Tiffany", new DateTime(82, 3, 25)); goran.Friend = ivan; ivan.Friend = goran; initPOFWriter(); m_pofWriter = new PofStreamWriter(m_writer, ctx); m_pofWriter.EnableReference(); m_pofWriter.WriteObject(0, ivan); initPOFReader(); m_pofReader = new PofStreamReader(m_reader, ctx); var ivanR = (PortablePersonReference)m_pofReader.ReadObject(0); Assert.IsTrue(ivanR.Name.Equals(ivan.Name)); Assert.IsTrue(ivanR.Children.Length == 1); Assert.IsTrue(ivanR.Friend.Equals(goran)); }
public void TestReferencesInArray() { var ctx = new SimplePofContext(); ctx.RegisterUserType(101, typeof(PortablePerson), new PortableObjectSerializer(101)); ctx.RegisterUserType(102, typeof(PortablePersonReference), new PortableObjectSerializer(102)); var ivan = new PortablePersonReference("Ivan", new DateTime(78, 4, 25)); var goran = new PortablePersonReference("Goran", new DateTime(82, 3, 3)); var jack = new PortablePersonReference("Jack", new DateTime(80, 5, 25)); var jim = new PortablePersonReference("Jim", new DateTime(80, 5, 25)); var siblings = new PortablePersonReference[2]; siblings[0] = jack; siblings[1] = jim; ivan.Children = null; jack.Children = null; jim.Children = null; goran.Children = new PortablePerson[2]; goran.Children[0] = new PortablePerson("Tom", new DateTime(103, 7, 5)); goran.Children[1] = new PortablePerson("Ellen", new DateTime(105, 3, 15)); ivan.Siblings = siblings; goran.Siblings = siblings; Assert.IsTrue(ivan.Siblings == goran.Siblings); var col1 = new Collection <IPortableObject>(); col1.Add(ivan); col1.Add(goran); initPOFWriter(); m_pofWriter = new PofStreamWriter(m_writer, ctx); m_pofWriter.EnableReference(); m_pofWriter.WriteCollection(0, (ICollection)col1); m_pofWriter.WriteCollection(0, col1, typeof(PortablePersonReference)); initPOFReader(); m_pofReader = new PofStreamReader(m_reader, ctx); var result = m_pofReader.ReadCollection(0, null); var result2 = m_pofReader.ReadCollection(0, null); Assert.IsTrue(2 == result.Count); IEnumerator iter = result.GetEnumerator(); iter.MoveNext(); var ivanR = (PortablePersonReference)iter.Current; iter.MoveNext(); var goranR = (PortablePersonReference)iter.Current; Assert.IsFalse(ivanR.Siblings == goranR.Siblings); Assert.IsTrue(ivanR.Siblings[0] == goranR.Siblings[0]); Assert.IsTrue(ivanR.Siblings[1] == goranR.Siblings[1]); Assert.IsNull(ivanR.Children); iter = result2.GetEnumerator(); iter.MoveNext(); var ivanR2 = (PortablePersonReference)iter.Current; iter.MoveNext(); var goranR2 = (PortablePersonReference)iter.Current; Assert.IsFalse(ivanR2.Siblings == goranR2.Siblings); Assert.IsTrue(ivanR2.Siblings[0] == goranR2.Siblings[0]); Assert.IsTrue(ivanR2.Siblings[1] == goranR2.Siblings[1]); Assert.IsNull(ivanR2.Children); }
public void TestReferencesInUniformArray() { var localCtx = new SimplePofContext(); localCtx.RegisterUserType(101, typeof(PortablePerson), new PortableObjectSerializer(101)); localCtx.RegisterUserType(102, typeof(PortablePersonReference), new PortableObjectSerializer(102)); localCtx.RegisterUserType(201, typeof(CompositeKey), new PortableObjectSerializer(201)); localCtx.IsReferenceEnabled = true; var ivan = new PortablePersonReference("Ivan", new DateTime(78, 4, 25)); var goran = new PortablePersonReference("Goran", new DateTime(82, 3, 3)); ivan.Children = null; goran.Children = new PortablePerson[2]; goran.Children[0] = new PortablePerson("Tom", new DateTime(103, 7, 5)); goran.Children[1] = new PortablePerson("Ellen", new DateTime(105, 3, 15)); ivan.Siblings = new PortablePersonReference[1]; ivan.Siblings[0] = goran; goran.Siblings = new PortablePersonReference[1]; goran.Siblings[0] = ivan; IDictionary mapPerson = new Dictionary <CompositeKey, IPortableObject>(); const String lastName = "Smith"; CompositeKey key1 = new CompositeKey(lastName, "ivan"), key2 = new CompositeKey(lastName, "goran"); mapPerson.Add(key1, ivan); mapPerson.Add(key2, goran); initPOFWriter(); m_pofWriter = new PofStreamWriter(m_writer, localCtx); if (localCtx.IsReferenceEnabled) { m_pofWriter.EnableReference(); } m_pofWriter.WriteDictionary(0, mapPerson); initPOFReader(); m_pofReader = new PofStreamReader(m_reader, localCtx); IDictionary mapResult = m_pofReader.ReadDictionary(0, null); Assert.IsTrue(2 == mapResult.Count); var ivanR = (PortablePersonReference)mapResult[key1]; var goranR = (PortablePersonReference)mapResult[key2]; ICollection keySet = mapResult.Keys; IEnumerator iter = keySet.GetEnumerator(); iter.MoveNext(); var key1R = (CompositeKey)iter.Current; iter.MoveNext(); var key2R = (CompositeKey)iter.Current; Assert.IsFalse(key1R.PrimaryKey == key2R.PrimaryKey); Assert.IsTrue(ivanR.Siblings[0] == goranR); Assert.IsTrue(goran.Name.Equals(goranR.Name)); Assert.IsNull(ivanR.Children); }