Tools and libraries to glue C/C++ APIs to high-level languages
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.
 
 
 
 
 

92 lines
2.2 KiB

using System;
using CppSharp.Utils;
using NUnit.Framework;
using VTables;
public class FooDerived : Foo
{
public override int vfoo
{
get
{
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.Base;
TestVirtualFunction(baseVirtual, 5);
BaseClassVirtual baseClass = new DerivedClassVirtual();
TestVirtualFunction(baseClass, 10);
var basePtr = BaseClassVirtual.BasePtr;
TestVirtualFunction(basePtr, 10);
var managed = new ManagedDerivedClassVirtual();
TestVirtualFunction(managed, 15);
baseClass = managed;
TestVirtualFunction(baseClass, 15);
var retBase = new ManagedDerivedClassVirtualRetBase();
TestVirtualFunction(retBase, 10);
}
[Test]
public void TestStdStringInField()
{
using (var foo = new Foo())
{
Assert.That(foo.S, Is.Empty);
foo.S = "test";
Assert.That(foo.S, Is.EqualTo("test"));
}
}
}