mirror of
https://github.com/FabInfra/capnproto-dotnetcore_Runtime.git
synced 2025-03-12 06:41:50 +01:00
test & fix
This commit is contained in:
parent
5d0f24cdab
commit
af6dcec8f7
@ -842,12 +842,16 @@ namespace Capnp.Net.Runtime.Tests
|
||||
data[0] = p;
|
||||
Assert.ThrowsException<DeserializationException>(() => DeserializerState.CreateRoot(wf));
|
||||
p.SetFarPointer(0, 0, false);
|
||||
data[0] = p;
|
||||
Assert.ThrowsException<DeserializationException>(() => DeserializerState.CreateRoot(wf));
|
||||
p.SetFarPointer(1, 0, false);
|
||||
data[0] = p;
|
||||
Assert.ThrowsException<DeserializationException>(() => DeserializerState.CreateRoot(wf));
|
||||
p.SetFarPointer(0, 1, false);
|
||||
data[0] = p;
|
||||
Assert.ThrowsException<DeserializationException>(() => DeserializerState.CreateRoot(wf));
|
||||
p.SetFarPointer(0, 0, true);
|
||||
data[0] = p;
|
||||
Assert.ThrowsException<DeserializationException>(() => DeserializerState.CreateRoot(wf));
|
||||
|
||||
var data2 = new ulong[3];
|
||||
|
@ -18,6 +18,12 @@ namespace Capnp.Net.Runtime.Tests
|
||||
{
|
||||
var impl = new TestInterfaceImpl2();
|
||||
Assert.AreEqual(impl, await impl.Unwrap<ITestInterface>());
|
||||
using (var proxy = Proxy.Share<ITestInterface>(impl))
|
||||
using (var reso = ((Proxy)proxy).GetResolvedCapability<ITestInterface>())
|
||||
{
|
||||
|
||||
Assert.AreEqual(((Proxy)proxy).ConsumedCap, ((Proxy)reso).ConsumedCap);
|
||||
}
|
||||
Assert.IsNull(await default(ITestInterface).Unwrap());
|
||||
var tcs = new TaskCompletionSource<ITestInterface>();
|
||||
tcs.SetResult(null);
|
||||
|
@ -226,5 +226,22 @@ namespace Capnp.Net.Runtime.Tests
|
||||
Assert.IsTrue(Task.WaitAll(new Task[] { w1, w2 }, MediumNonDbgTimeout));
|
||||
}
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void DisposedProxy()
|
||||
{
|
||||
var b = new BareProxy();
|
||||
Assert.ThrowsException<ArgumentNullException>(() => b.Bind(null));
|
||||
var impl = new TestInterfaceImpl2();
|
||||
var proxy = Proxy.Share<ITestInterface>(impl);
|
||||
var p = (Proxy)proxy;
|
||||
Assert.ThrowsException<InvalidOperationException>(() => p.Bind(p.ConsumedCap));
|
||||
Assert.IsFalse(p.IsDisposed);
|
||||
proxy.Dispose();
|
||||
Assert.IsTrue(p.IsDisposed);
|
||||
Assert.ThrowsException<ObjectDisposedException>(() => p.ConsumedCap);
|
||||
var t = proxy.Foo(123, true);
|
||||
Assert.IsTrue(Assert.ThrowsExceptionAsync<ObjectDisposedException>(() => t).Wait(MediumNonDbgTimeout));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -29,7 +29,7 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<DefineConstants>DebugFinalizers</DefineConstants>
|
||||
<DefineConstants></DefineConstants>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Release|netstandard2.0|AnyCPU'">
|
||||
|
@ -329,10 +329,13 @@ namespace Capnp
|
||||
|
||||
case PointerKind.Far:
|
||||
|
||||
if (pointer.TargetSegmentIndex >= Segments.Count)
|
||||
throw new DeserializationException("Error decoding pointer: Invalid target segment index");
|
||||
|
||||
CurrentSegmentIndex = pointer.TargetSegmentIndex;
|
||||
|
||||
if (pointer.IsDoubleFar)
|
||||
{
|
||||
CurrentSegmentIndex = pointer.TargetSegmentIndex;
|
||||
|
||||
if (pointer.LandingPadOffset >= CurrentSegment.Length - 1)
|
||||
throw new DeserializationException("Error decoding double-far pointer: exceeds segment bounds");
|
||||
|
||||
@ -353,9 +356,12 @@ namespace Capnp
|
||||
}
|
||||
else
|
||||
{
|
||||
CurrentSegmentIndex = pointer.TargetSegmentIndex;
|
||||
Offset = 0;
|
||||
offset = pointer.LandingPadOffset;
|
||||
|
||||
if (pointer.LandingPadOffset >= CurrentSegment.Length)
|
||||
throw new DeserializationException("Error decoding pointer: exceeds segment bounds");
|
||||
|
||||
pointer = CurrentSegment[pointer.LandingPadOffset];
|
||||
}
|
||||
continue;
|
||||
@ -701,7 +707,7 @@ namespace Capnp
|
||||
{
|
||||
foreach (var cap in Caps)
|
||||
{
|
||||
cap?.Release();
|
||||
cap.Release();
|
||||
}
|
||||
|
||||
Caps = null;
|
||||
|
Loading…
x
Reference in New Issue
Block a user