/// <summary> /// Read event. /// </summary> /// <param name="reader">Reader.</param> /// <returns>Event.</returns> private static ICacheEntryEvent <TK, TV> ReadEvent0 <TK, TV>(PortableReaderImpl reader) { reader.DetachNext(); TK key = reader.ReadObject <TK>(); reader.DetachNext(); TV oldVal = reader.ReadObject <TV>(); reader.DetachNext(); TV val = reader.ReadObject <TV>(); return(CreateEvent(key, oldVal, val)); }
public void TestHandlesExclusive([Values(true, false)] bool detached, [Values(true, false)] bool asPortable) { var marsh = new PortableMarshaller(new PortableConfiguration { TypeConfigurations = new List<PortableTypeConfiguration> { new PortableTypeConfiguration(typeof (HandleInner)), new PortableTypeConfiguration(typeof (HandleOuterExclusive)) } }); var inner = new HandleInner { Before = "inBefore", After = "inAfter", RawBefore = "inRawBefore", RawAfter = "inRawAfter" }; var outer = new HandleOuterExclusive { Before = "outBefore", After = "outAfter", RawBefore = "outRawBefore", RawAfter = "outRawAfter", Inner = inner, RawInner = inner }; inner.Outer = outer; inner.RawOuter = outer; var bytes = asPortable ? marsh.Marshal(new PortablesImpl(marsh).ToPortable<IPortableObject>(outer)) : marsh.Marshal(outer); IPortableObject outerObj; if (detached) { var reader = new PortableReaderImpl(marsh, new Dictionary<long, IPortableTypeDescriptor>(), new PortableHeapStream(bytes), PortableMode.ForcePortable, null); reader.DetachNext(); outerObj = reader.Deserialize<IPortableObject>(); } else outerObj = marsh.Unmarshal<IPortableObject>(bytes, PortableMode.ForcePortable); HandleOuter newOuter = outerObj.Deserialize<HandleOuter>(); Assert.IsFalse(newOuter == newOuter.Inner.Outer); Assert.IsFalse(newOuter == newOuter.Inner.RawOuter); Assert.IsFalse(newOuter == newOuter.RawInner.RawOuter); Assert.IsFalse(newOuter == newOuter.RawInner.RawOuter); Assert.IsFalse(newOuter.Inner == newOuter.RawInner); Assert.IsTrue(newOuter.Inner.Outer == newOuter.Inner.RawOuter); Assert.IsTrue(newOuter.RawInner.Outer == newOuter.RawInner.RawOuter); Assert.IsTrue(newOuter.Inner == newOuter.Inner.Outer.Inner); Assert.IsTrue(newOuter.Inner == newOuter.Inner.Outer.RawInner); Assert.IsTrue(newOuter.RawInner == newOuter.RawInner.Outer.Inner); Assert.IsTrue(newOuter.RawInner == newOuter.RawInner.Outer.RawInner); }