From 4bf0e970c2f25b4c1e33ba63f6e219bb0e702d01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20K=C3=B6llner?= Date: Fri, 3 Apr 2020 21:34:21 +0200 Subject: [PATCH] more tests --- .../Mock/TestCapImplementations.cs | 1 + Capnp.Net.Runtime.Tests/SerializationTests.cs | 62 ++++++++++++++++++- Capnp.Net.Runtime/SerializerState.cs | 2 +- 3 files changed, 63 insertions(+), 2 deletions(-) diff --git a/Capnp.Net.Runtime.Tests/Mock/TestCapImplementations.cs b/Capnp.Net.Runtime.Tests/Mock/TestCapImplementations.cs index dbd91c5..bb93eef 100644 --- a/Capnp.Net.Runtime.Tests/Mock/TestCapImplementations.cs +++ b/Capnp.Net.Runtime.Tests/Mock/TestCapImplementations.cs @@ -449,6 +449,7 @@ namespace Capnp.Net.Runtime.Tests.GenImpls public void Dispose() { + Assert.IsFalse(IsDisposed); IsDisposed = true; } diff --git a/Capnp.Net.Runtime.Tests/SerializationTests.cs b/Capnp.Net.Runtime.Tests/SerializationTests.cs index 35983ca..64a2835 100644 --- a/Capnp.Net.Runtime.Tests/SerializationTests.cs +++ b/Capnp.Net.Runtime.Tests/SerializationTests.cs @@ -962,7 +962,7 @@ namespace Capnp.Net.Runtime.Tests } [TestMethod] - public void StructReadCap() + public void StructReadCap1() { var dss = DynamicSerializerState.CreateForRpc(); dss.SetStruct(0, 3); @@ -978,6 +978,15 @@ namespace Capnp.Net.Runtime.Tests Assert.ThrowsException(() => dss.ReadCap(2)); } + [TestMethod] + public void StructReadCap2() + { + var dss = DynamicSerializerState.CreateForRpc(); + dss.SetListOfStructs(1, 1, 1); + dss.Allocate(); + Assert.ThrowsException(() => dss.ReadCap(0)); + } + [TestMethod] public void Rewrap() { @@ -1078,5 +1087,56 @@ namespace Capnp.Net.Runtime.Tests Assert.ThrowsException(() => dss2.ListBuildStruct(-1)); Assert.ThrowsException(() => dss2.ListBuildStruct(2)); } + + [TestMethod] + public void LinkObject() + { + var mb = MessageBuilder.Create(); + var dss = mb.CreateObject(); + dss.SetStruct(0, 4); + var s1 = mb.CreateObject(); + s1.SomeText = "foo"; + s1.MoreText = "bar"; + dss.LinkObject(0, s1); + var s2 = mb.CreateObject(); + s2.SomeText = "baz"; + s2.MoreText = "foobar"; + var d = (DeserializerState)s2; + dss.LinkObject(1, d); + var s3 = mb.CreateObject(); + s3.SomeText = "0"; + var s4 = mb.CreateObject(); + s4.SomeText = "1"; + var arr = new SomeStruct.WRITER[] { s3, s4 }; + dss.LinkObject(2, arr); + Assert.ThrowsException(() => dss.LinkObject(3, new object())); + + var t1 = dss.BuildPointer(0).Rewrap(); + Assert.AreEqual("foo", t1.SomeText); + Assert.AreEqual("bar", t1.MoreText); + var t2 = dss.BuildPointer(1).Rewrap(); + Assert.AreEqual("baz", t2.SomeText); + Assert.AreEqual("foobar", t2.MoreText); + var l = dss.BuildPointer(2).Rewrap>(); + Assert.AreEqual(2, l.Count); + Assert.AreEqual("0", l[0].SomeText); + Assert.AreEqual("1", l[1].SomeText); + Assert.AreEqual(ObjectKind.Nil, dss.BuildPointer(3).Kind); + } + + [TestMethod] + public void Disposing() + { + var mb = MessageBuilder.Create(); + var dss = mb.CreateObject(); + dss.Dispose(); + dss.Dispose(); + var dss2 = DynamicSerializerState.CreateForRpc(); + var cap = new TestInterfaceImpl2(); + dss2.ProvideCapability(cap); + dss2.Dispose(); + Assert.IsTrue(cap.IsDisposed); + dss2.Dispose(); + } } } diff --git a/Capnp.Net.Runtime/SerializerState.cs b/Capnp.Net.Runtime/SerializerState.cs index b18ce3c..c717f15 100644 --- a/Capnp.Net.Runtime/SerializerState.cs +++ b/Capnp.Net.Runtime/SerializerState.cs @@ -1404,7 +1404,7 @@ namespace Capnp { foreach (var cap in Caps) { - cap?.Release(); + cap.Release(); } Caps.Clear();