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.
 
 
 
 
 

109 lines
2.6 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()
{
using (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));
}
using (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
using (var baseVirtual = BaseClassVirtual.Base)
{
TestVirtualFunction(baseVirtual, 5);
}
BaseClassVirtual baseClass = new DerivedClassVirtual();
TestVirtualFunction(baseClass, 10);
baseClass.Dispose();
using (var basePtr = BaseClassVirtual.BasePtr)
{
TestVirtualFunction(basePtr, 10);
}
using (var managed = new ManagedDerivedClassVirtual())
{
TestVirtualFunction(managed, 15);
baseClass = managed;
TestVirtualFunction(baseClass, 15);
}
using (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"));
}
}
[Test]
public void TestTypeNameRTTI() =>
Assert.That(BaseClassVirtual.TypeName, Does.EndWith(nameof(BaseClassVirtual)));
}