rendered paste bodyusing CSUnit;
using System;
public class TestCasts : TestCase
{
private BaseClass baseClass;
private DerivedClass derivedClass;
protected override void Setup()
{
baseClass = new BaseClass();
derivedClass = new DerivedClass();
}
protected override void Cleanup() {}
public TestCasts(string name) : base(name) {}
public void TestSimpleCasts()
{
AssertEquals(10, baseClass.getNum(10));
AssertEquals(11, derivedClass.getNum(10));
//test allowed cast
try {
BaseClass castedDerivedClass = derivedClass;
AssertEquals(11, castedDerivedClass.getNum(10));
} catch (Exception) {
Fail();
}
//test not allowed cast
try {
DerivedClass castedBaseClass = (DerivedClass) baseClass;
Fail();
} catch (Exception) {
}
}
public void TestSimpleInterfaceCasts()
{
//test not allowed cast
try {
INum num = (INum) baseClass;
Fail();
} catch (Exception) {
}
//test allowed cast
try {
INum num = derivedClass;
AssertEquals(666, num.getNum());
} catch (Exception) {
Fail();
}
}
public void TestSimpleBoxingUnboxing()
{
int i = 100;
object box = i;
//boxing
if (box is int) {} else
Fail();
AssertEquals(box, i);
AssertEquals(100, box);
//unboxing
int j = (int) box;
AssertEquals(100, j);
}
public void TestAdvancedBoxingUnboxing()
{
//simple object test
//boxing
object box = baseClass;
if (box is BaseClass) {} else
Fail();
//unboxing
BaseClass newBaseClass = (BaseClass) box;
AssertEquals(10, newBaseClass.getNum(10));
//advanced object test
//boxing
box = derivedClass;
if (box is DerivedClass) {} else
Fail();
if (box is BaseClass) {} else
Fail();
//unboxing
newBaseClass = (BaseClass) box;
AssertEquals(11, newBaseClass.getNum(10));
DerivedClass newDerivedClass = (DerivedClass) box;
AssertEquals(11, newDerivedClass.getNum(10));
}
}
//-----------------
//class definitions
//-----------------
public class BaseClass
{
public BaseClass()
{
}
public virtual int getNum(int num)
{
return num;
}
}
public class DerivedClass : BaseClass, INum
{
public DerivedClass()
{
}
// overridden method from base class
public override int getNum(int num)
{
return num + 1;
}
// method from interface
public int getNum()
{
return 666;
}
}
//---------------------
//interface definitions
//---------------------
public interface INum
{
int getNum();
}