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.
 
 
 
 
 

166 lines
4.1 KiB

using System;
using NUnit.Framework;
namespace Tests {
[TestFixture]
public class InheritanceTests {
[Test]
public void TestVirtualCall ()
{
var cls = new NumberClass (5);
Assert.AreEqual (5, cls.Number, "#1");
Assert.AreEqual (-5, cls.NegativeNumber, "#2");
}
[Test]
public void TestVirtualCallOnBaseClass ()
{
var cls = new AdderClass (8);
Assert.AreEqual (8, cls.Number, "#1");
cls.Add (2);
Assert.AreEqual (10, ((NumberClass)cls).Number, "#2");
}
[Test]
public void TestVirtualCallOnVirtualBaseClass ()
{
var cls = new AdderClassWithVirtualBase (8);
Assert.AreEqual (8, cls.Number, "#1");
cls.Add (2);
Assert.AreEqual (10, ((NumberClass)cls).Number, "#2");
}
[Test]
public void TestMultipleBases ()
{
var cls = new ClassWithNonVirtualBases (5, 3);
Assert.AreEqual (5, cls.Number, "#1");
Assert.AreEqual (3, ((MultiplierClass)cls).Number, "#2");
cls.Add (4);
Assert.AreEqual (9, cls.Number, "#3");
Assert.AreEqual (3, ((MultiplierClass)cls).Number, "#4");
cls.MultiplierClass.Multiply (10);
Assert.AreEqual (9, cls.Number, "#5");
Assert.AreEqual (30, ((MultiplierClass)cls).Number, "#6");
}
[Test]
public void TestMultipleVirtualBases ()
{
var cls = new ClassWithVirtualBases (4);
Assert.AreEqual (4, cls.Number, "#1");
Assert.AreEqual (4, ((MultiplierClassWithVirtualBase)cls).Number, "#2");
cls.Add (5);
Assert.AreEqual (9, cls.Number, "#3");
Assert.AreEqual (9, ((MultiplierClassWithVirtualBase)cls).Number, "#4");
cls.MultiplierClassWithVirtualBase.Multiply (6);
Assert.AreEqual (30, cls.Number, "#5");
Assert.AreEqual (30, ((MultiplierClassWithVirtualBase)cls).Number, "#6");
}
[Test]
public void TestNativeOverride1 ()
{
var cls = new ClassThatOverridesStuff (5, 3);
Assert.AreEqual (3, cls.Number, "#1");
Assert.AreEqual (3, ((NumberClass)cls).Number, "#2");
Assert.AreEqual (-3, cls.NegativeNumber, "#3");
Assert.AreEqual (5, cls.BaseNumber, "#4");
}
[Test]
public void TestNativeOverride2 ()
{
var cls = ClassThatOverridesStuff.GetInstance (5, 3);
Assert.AreEqual (3, cls.Number, "#1");
Assert.AreEqual (3, ((NumberClass)cls).Number, "#2");
Assert.AreEqual (-3, cls.NegativeNumber, "#3");
// Assert.AreEqual (5, ((ClassThatOverridesStuff)cls).BaseNumber, "#4");
}
class ManagedOverride1 : NumberClass {
public ManagedOverride1 () : base (3)
{
}
public override int Number {
get {
return 25;
}
}
}
[Test]
public void TestManagedOverride1 ()
{
var cls = new ManagedOverride1 ();
Assert.AreEqual (-25, cls.NegativeNumber, "#1");
}
class ManagedOverride2 : ClassWithNonVirtualBases {
public ManagedOverride2 () : base (5, 3)
{
}
public override int Number {
get {
return 25;
}
}
// override virtual member inherited from non-primary base
protected override void MultiplierClass__Multiply (int n)
{
base.MultiplierClass__Multiply (10);
}
}
[Test]
public void TestManagedOverride2 ()
{
var cls = new ManagedOverride2 ();
Assert.AreEqual (-25, cls.NegativeNumber, "#1");
cls.MultiplierClass.Multiply (7);
Assert.AreEqual (30, ((MultiplierClass)cls).Number, "#3");
cls.CallMultiply (2);
Assert.AreEqual (25, cls.Number, "#2");
Assert.AreEqual (300, ((MultiplierClass)cls).Number, "#5");
}
[Test]
public void TestRoundtripManagedOverride ()
{
var managed = new ManagedOverride2 ();
var roundtripper = new ClassThatRoundtrips (7, managed);
// test primary base ptr from native
var cls = roundtripper.GetThis ();
Assert.AreSame (roundtripper, cls, "#1");
Assert.AreEqual (7, cls.Number, "#2");
// test non-primary base ptr from native
cls = roundtripper.GetThat ();
Assert.AreSame ((MultiplierClass)managed, cls, "#3");
Assert.AreEqual (3, cls.Number, "#4");
Assert.AreEqual (3, cls.Number, "#5");
cls.Multiply (0);
Assert.AreEqual (-30, cls.NegativeNumber, "#6");
// cast to non-primary subclass
Assert.IsNotNull (((ClassWithNonVirtualBases)cls) as ManagedOverride2, "#7");
}
}
}