mirror of https://github.com/mono/CppSharp.git
c-sharpdotnetmonobindingsbridgecclangcpluspluscppsharpglueinteropparserparsingpinvokeswigsyntax-treevisitorsxamarinxamarin-bindings
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
1.9 KiB
78 lines
1.9 KiB
using System; |
|
using CppSharp.Utils; |
|
using NUnit.Framework; |
|
using VTables; |
|
|
|
public class FooDerived : Foo |
|
{ |
|
public override int vfoo() |
|
{ |
|
Console.WriteLine("Hello from FooDerived"); |
|
return 10; |
|
} |
|
} |
|
|
|
public class ManagedDerivedClassVirtual : DerivedClassVirtual |
|
{ |
|
public override unsafe int RetInt() |
|
{ |
|
return 15; |
|
} |
|
} |
|
|
|
public class ManagedDerivedClassVirtualRetBase : DerivedClassVirtual |
|
{ |
|
public override unsafe int RetInt() |
|
{ |
|
return base.RetInt(); |
|
} |
|
} |
|
|
|
public class VTablesTests : GeneratorTestFixture |
|
{ |
|
[Test] |
|
public void TestFoo() |
|
{ |
|
var foo = new Foo(); |
|
Assert.That(foo.vfoo(), Is.EqualTo(5)); |
|
Assert.That(foo.Vbar(), Is.EqualTo(5)); |
|
Assert.That(foo.CallFoo(), Is.EqualTo(7)); |
|
Assert.That(foo.CallVirtualWithParameter(6514), Is.EqualTo(6514 + 1)); |
|
|
|
var foo2 = new FooDerived(); |
|
Assert.That(foo2.CallFoo(), Is.EqualTo(12)); |
|
} |
|
|
|
void TestVirtualFunction(BaseClassVirtual obj, int actual) |
|
{ |
|
var ret = obj.RetInt(); |
|
Assert.AreEqual(actual, ret); |
|
|
|
ret = BaseClassVirtual.VirtualCallRetInt(obj); |
|
Assert.AreEqual(actual, ret); |
|
} |
|
|
|
[Test] |
|
public void TestVirtualFuntionRetVal() |
|
{ |
|
// Virtual Functions Object Slicing case |
|
// See http://stackoverflow.com/questions/3479712/virtual-functions-object-slicing |
|
var baseVirtual = BaseClassVirtual.GetBase(); |
|
TestVirtualFunction(baseVirtual, 5); |
|
|
|
BaseClassVirtual baseClass = new DerivedClassVirtual(); |
|
TestVirtualFunction(baseClass, 10); |
|
|
|
var basePtr = BaseClassVirtual.GetBasePtr(); |
|
TestVirtualFunction(basePtr, 10); |
|
|
|
var managed = new ManagedDerivedClassVirtual(); |
|
TestVirtualFunction(managed, 15); |
|
|
|
baseClass = managed; |
|
TestVirtualFunction(baseClass, 15); |
|
|
|
var retBase = new ManagedDerivedClassVirtualRetBase(); |
|
TestVirtualFunction(retBase, 10); |
|
} |
|
}
|
|
|