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.
166 lines
4.1 KiB
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"); |
|
} |
|
|
|
} |
|
} |
|
|
|
|