Cosmos/Tests/Cosmos.Compiler.Tests.Bcl/System/DelegatesTest.cs
2016-09-28 23:24:04 -05:00

81 lines
2.4 KiB
C#

using System;
using System.Linq;
using System.Threading.Tasks;
using Cosmos.Debug.Kernel;
using Cosmos.TestRunner;
namespace Cosmos.Compiler.Tests.Bcl.System
{
public class DelegatesTest
{
private static int mCount;
private static void IncreaseCounterOnce()
{
mCount++;
}
private void IncreaseCounterTwiceFromInstanceMethod()
{
mCount += 2;
}
public static void Execute()
{
TestDelegateWithoutArguments();
TestDelegateWithArguments();
//TestMulticastDelegateWithoutArguments();
}
private static void TestDelegateWithoutArguments()
{
mCount = 0;
Action xDelegate = IncreaseCounterOnce;
xDelegate();
Assert.AreEqual(1, mCount, "After calling delegate once, Count != 1");
mCount = 0;
var xTestInstance = new DelegatesTest();
xDelegate = xTestInstance.IncreaseCounterTwiceFromInstanceMethod;
xDelegate();
Assert.AreEqual(2, mCount, "After calling delegate second time, Count != 2");
}
private static void TestMulticastDelegateWithoutArguments()
{
var xDebugger = new Debugger("Test", "Delegates");
xDebugger.Send("Start MulticastDelegate test");
mCount = 0;
Action xDelegate = IncreaseCounterOnce;
xDebugger.Send("Adding second handler now");
xDelegate += IncreaseCounterOnce;
xDelegate();
Assert.AreEqual(2, mCount, "After calling multicast delegate once, Count != 2");
}
private static void IncreaseCounter(int number)
{
mCount += number;
}
private void IncreaseCounterFromInstanceMethod(int number)
{
mCount += number;
}
private static void TestDelegateWithArguments()
{
mCount = 0;
Action<int> xDelegate = IncreaseCounter;
xDelegate(2);
Assert.AreEqual(2, mCount, "After calling delegate once, Count != 2");
mCount = 0;
var xTestInstance = new DelegatesTest();
xDelegate = xTestInstance.IncreaseCounterFromInstanceMethod;
xDelegate(3);
Assert.AreEqual(3, mCount, "After calling delegate second time, Count != 3");
}
}
}