Browse Source

Tested indirect calls from native code of overrides in the target language.

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/1153/head
Dimitar Dobrev 7 years ago
parent
commit
7817b52ce3
  1. 21
      tests/CSharp/CSharp.Tests.cs
  2. 36
      tests/CSharp/CSharp.cpp
  3. 25
      tests/CSharp/CSharp.h

21
tests/CSharp/CSharp.Tests.cs

@ -1217,6 +1217,27 @@ public unsafe class CSharpTests : GeneratorTestFixture @@ -1217,6 +1217,27 @@ public unsafe class CSharpTests : GeneratorTestFixture
}
}
[Test]
public void TestVirtualIndirectCallInNative()
{
using (Inter i = new Inter())
{
using (InterfaceTester tester = new InterfaceTester())
{
tester.SetInterface(i);
Assert.That(tester.Get(10), Is.EqualTo(IntPtr.Zero));
}
}
}
public class Inter : SimpleInterface
{
public override int Size => s;
public override int Capacity => s;
public override IntPtr Get(int n) { return new IntPtr(0); }
private int s = 0;
}
private class OverrideVirtualTemplate : VirtualTemplate<int>
{
public override int Function

36
tests/CSharp/CSharp.cpp

@ -1495,3 +1495,39 @@ HasFixedArrayOfPointers::HasFixedArrayOfPointers() @@ -1495,3 +1495,39 @@ HasFixedArrayOfPointers::HasFixedArrayOfPointers()
HasFixedArrayOfPointers::~HasFixedArrayOfPointers()
{
}
SimpleInterface::SimpleInterface()
{
}
SimpleInterface::~SimpleInterface()
{
}
InterfaceTester::InterfaceTester() : interface(0)
{
}
InterfaceTester::~InterfaceTester()
{
}
int InterfaceTester::capacity()
{
return interface->capacity();
}
int InterfaceTester::size()
{
return interface->size();
}
void* InterfaceTester::get(int n)
{
return interface->get(n);
}
void InterfaceTester::setInterface(SimpleInterface* i)
{
interface = i;
}

25
tests/CSharp/CSharp.h

@ -1262,3 +1262,28 @@ struct DLL_API CSharp @@ -1262,3 +1262,28 @@ struct DLL_API CSharp
};
static int FOOBAR_CONSTANT = 42;
class DLL_API SimpleInterface
{
public:
SimpleInterface();
~SimpleInterface();
virtual int size() const = 0;
virtual int capacity() const = 0;
virtual void* get(int n) = 0;
};
class DLL_API InterfaceTester
{
public:
InterfaceTester();
~InterfaceTester();
int capacity();
int size();
void* get(int n);
void setInterface(SimpleInterface* i);
private:
SimpleInterface* interface;
};

Loading…
Cancel
Save